![]() |
SunSolve was, and still is, Sun's way of distributing patches; the equivalent mechanism at Oracle is My Oracle Support (MOS), and Gerry just announced thatSun patches now available there. This includes the GlassFish commercial patches like 128640-20, which is one of the patches in GlassFish 2.1.1 patch 6. I just looked directly for the patch ID (using Sun's patch number), I'll try to dig more info on how to use MOS and will post it later on. |
|
Alexis and Arun went to FISL11 at Porto Alegre (Wikipedia, GeoMap) and have provided reports including photos; see Alexis' Back from FISL, and Arun's AFISL 2010 Trip Report. Alexis's slides are available via SlideShare: GlassFish OSGi - from modular runtime to hybrid applications and The future of the GlassFish community. Arun's presentation was all demos, which he has also made available as a YouTube playlist. |
Open Source is very strong in Brazil (see for example this post). As you can see from our GeoMap, GlassFish has a fair amount of adoption, but we need to improve our outreach. If you have suggestions or want to contribute, post them as comments on this entry, or contact us at theaquarium at sun dot com.
Without the Groovy facet, I would have been totally lost. I doubt that, now that that Groovy facet is available in the open source, a tutorial on facets is even needed. Simply read the Groovy facet and adapt it to your own purposes, as I did here:
Open source rocks!
IntelliJ IDEA version 10 development goes full-speed and today we are opening the public EAP program.
The changes are made in every part of the IDE: the UI, the editor, supported technologies and frameworks. Check out the full Release Notes for this first EAP to see what is in.
Download the EAP build for your platform.
For details about certain features check out the posts with ‘ideaX’ tag and stay tuned for more updates on the blog.
We need your feedback, that’s what this program is for. Post your ideas and impressions on our EAP discussion forum and to the issue tracker.
Develop with pleasure!
The JetBrains Team
Earlier this month, Oracle released a new version of Java, 1.6.0_21 (also called 6u21). Unfortunately as Eclipse users quickly discovered, it was incompatible with Eclipse and Eclipse Rich Client Platform (RCP) programs.
Bug 319514 in the Eclipse bug database has all the gory details, but in a nutshell, Oracle changed the company name property on java.exe from “Sun Microsystems, Inc” to “Oracle”. The change was not announced or documented in the release notes. Ironically, Eclipse has been using this value since 2007 to work around another Java problem where Sun’s default for the “MaxPermSize” option was too small for Eclipse to run. When it changed, the workaround no longer worked, and many people encountered “PermGen” errors when they started Eclipse.
Oracle responded by respinning 6u21 on Monday to restore the value, but warned that it will be changed for good in JDK 7. A company developer wrote:
As part of Oracle’s rebranding of Sun’s products, the Company Name property of the java.exe file, the executable file containing Oracle’s JRE for Windows, was updated from “Sun Microsystems” to “Oracle” in Java SE 6u21.
After the updated JRE was posted on java.sun.com, it was reported that the change affected Eclipse users on Windows by causing it to hang when starting Eclipse after updating to the rebranded JRE. A workaround was quickly identified and posted on Eclipse’s website, but a wide distribution of the rebranded JRE executable could negatively impact many Eclipse users.
In consideration to Eclipse and other potentially affected users, Oracle has restored the Windows Company Name property value to “Sun Microsystems”. This value will be changed to “Oracle” in JDK 7.The change affected only the Windows version of the JRE, not the versions for Solaris and Linux. To accommodate this update the Windows build version will increase from 6u21-b06 to 6u21-b07. Solaris and Linux distributions will continue to ship build 6u21-b06.
An engineering side note: The “Java” property values for java.vendor and java.vm.vendor were never changed in the jdk6 releases and will remain “Sun Microsystems, Inc.”. It was understood that changing the vendor property values could impact applications and we purposely did not disturb these vendor properties. The Windows specific exe/dll file “COMPANY” value is what is at issue here, not the Java properties. It came as a surprise to us that anyone would be inspecting or depending on the value of this very platform specific field. Regardless, we will restore the COMPANY field in the jdk6 releases. Note that the jdk7 releases will eventually be changing to Oracle, including the java.vendor and java.vm.vendor properties.
This morning I verified that the official Oracle download site has been updated with the correct version and that it works with Eclipse. Here’s what it prints when I run java -version:
C:\> java -version
java version “1.6.0_21″
Java(TM) SE Runtime Environment (build 1.6.0_21-b07)
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b17, mixed mode)
If you downloaded Java for Windows 32-bit or 64-bit recently, be sure you have the 1.6.0_21-b07 version and not b06.
The above, which is in the free community edition, implies a future where NetBeans Platform development will be a first-class development option in IntelliJ IDEA. I have the basic plugin set up, as you can see above. However, is there someone who can tell me how I should continue from here? I need to be able to (1) set things on the classpath, (2) create runtime configurations, and (3) generate folders and files when Finish is clicked above.
Another option would be to hook a project in IntelliJ IDEA into an Ant script such as the one created in the NetBeans Platform Ant Tutorial. For example, when "Run" is invoked on the project, the related target in the NetBeans Platform would be invoked, via the Ant script outlined in the tutorial.
Any advice from IntelliJ IDEA API users out there?
Part of my day I’m working on some cool OSGi server stuff. While doing this I came across a few issues with PDE. Mostly they are around launching and self-hosting.
As with all my Open Source engagements, I just don’t stop after reporting them. I also take the time to analyze them and provide patches for them. Why? Well, it saves me a lot of time in the end because I don’t need to live with workarounds.
Here is a list of patches produced so far for Eclipse PDE 3.6:
Now, thanks to Eclipse it’s also possible to easily share the patches with you. Just point your Eclipse 3.6 installation to my p2 repository (http://eclipseguru.org/) and install “EclipseGuru’s Patches for PDE“.
The summer is hot not only because of the sun. Today we have even 3 breaking news to share:
1. IntelliJ IDEA 9.0.3 is available with fixes for many reported issues and some improvements, namely:
BTW, if you’re doing Flex, make sure to watch the IntelliJ IDEA screencasts by John Lindquist, about the debugger, refactorings and other stuff IntelliJ IDEA provides for Flex.
2. TeamCity 5.1.3 is out with some compatibility and stability fixes.
3. And the last big piece of news for today is PyCharm Beta release. JetBrains PyCharm is the new lightweight IDE for Python with the best available support for Django and Google App Engine. During the Beta we are giving away 50% discount coupons for PyCharm 1.0. So, check it out!
Needless to say, we are still going to continue to develop and release the Python plugin for IntelliJ IDEA, which will remain free for all users of IntelliJ IDEA Ultimate.
Develop with pleasure!
-The JetBrains Team
IntelliJ IDEA 9.0.3 brings you a new feature that simplifies storing of your credentials: Password Safe. With it, you can store passwords, encrypted with master password in IntelliJ IDEA either permanently in application settings, or temporary, in memory until you close IntelliJ IDEA.

Passwords in memory are stored while you are working with IntelliJ IDEA, if disk storage is selected, passwords are encrypted and stored in a database. Before database is accessed for the first time, a master password is requested. It is also possible to change master password or reset it, but then you are losing all passwords encrypted with password you are resetting.
Note that on Windows systems there is an option to encrypt master password using user credentials. This is less secure, but more convenient option. In which case master password is stored in an encrypted form in the application settings, and it can be accessed by any application that is run from under this user account. The value of this option can be specified using reset and change password dialog.

Git integration uses this functionality to store SSH passwords and passphrases. If your plugin needs to store passwords, you can make use of the PasswordSafe component or just use PasswordSafePromptDialog that automatically remembers entered passwords in the password database.
After a few false starts, Apple appears finally ready to admit there is a problem with the iPhone 4 antenna and do something about it. The company will host a press conference on Friday to discuss the issue. There has been speculation of a recall, but I expect they’ll downplay the problem and announce free bumper cases to anyone who needs them.
Updated: Yep, that’s what happened.
The video from Consumer Reports was the final straw. Not only did CR refuse to recommend the iPhone 4 until Apple fixed the “death grip” reception flaw, they humorously suggested a fix of their own: duct tape.
“By using non-conductive tape, like duct tape,” reported CR’s Mike Gikas Monday, “and covering the gap on the side of the iPhone, we were able to reduce the reception problems. However, it does spoil the look, don’t you think?” In an update posted Thursday, CR has verified that the Apple bumper case alleviates the signal-loss problem in a somewhat more aesthetically pleasing fashion.
Meanwhile, cell phone makers continue to churn out new Android devices at a breakneck pace. Two go on sale today alone: the Verizon Droid X by Motorola, and the T-Mobile Vibrant by Samsung.
The wide variety of Android phones emphasizes the main difference between iOS and Android: Android is available from multiple vendors. If you don’t like the limitations of one phone, choose another. That’s one disadvantage Apple can’t tape over.
Image credit: ConsumerReports.org
Hello all,
This is a post for those of you who’s currently trying (and failing) to buy something from JetBrains, or to submit a bug into our issue tracker, or contribute to one of our community resources.
Today the extreme heat in Europe finally took a toll on us in the form of blackout that temporarily took down a part of our online assets.
While the majority of resources at jetbrains.com is available, our e-shop section is down (which is why you aren’t currently able to order any of our products), as are our bug tracker, wiki, and forums.
We’re regularly getting updates on the recovery progress, and the current (quite rough) recovery time estimate is today evening, 19:00 CET.
We apologize for the inconvenience, and we’re really hoping for a quick recovery.
Update! Seems like it’s all over, and on schedule! Power supply is resumed, meaning that YouTrack, Confluence, and JetBrains e-shops are now back online, and our support service is working well!
Once I wrote about console folding for Groovy stacktraces. Naturally, many people wished similar things could work for other languages and frameworks. Long story short, there’s now a settings page dedicated to the console folding. It provides a settings page where you may specify which console lines to fold:

This functionality is available in IDEA 9.0.2 via Console Folding plugin. In IDEA X, it will be bundled. Furthermore, there will be a nice addition to these settings: an action that allows you to add folding rules very easily right from the console. Just select the fragment which will toggle the folding of the lines containing it, and right-click:

There are few small, but very useful improvements in XML editing will be available in IntelliJ IDEA 10. All of them are very handy when edit XML files like schemes, JSPs, MXMLs, etc. First of these improvements is inspection detecting unused namespace declarations.

Others include namespace prefix intentions which allow you to rename, remove or introduce namespace prefixes. Want to make you schema file lighter? Not a problem:

Rename in place:

Or introduce new namespace prefix:

Find usages works as well. Enjoy them in first IntelliJ IDEA X EAP soon.
download.oracle.com. You might want to bookmark the new location, however, redirects are in place. Any attempt to access the previous location at java.sun.com, is re-directed to the new location. We hope this will be a seamless transition for our many tutorial readers, but please let us know if you encounter any problems.
This migration of the tutorial also coincides with the JDK 6 Update 21 release.
The following updates are included in this release:
Note that it is not yet possible to download the July 7th, 2010 edition of the tutorial. We are working out some logistics, but it should be available for download in the next couple of weeks.
Thanks for your patience.
-- Sharon Zakhour
One of the main features in GlassFish 3.1 is clustering and for m2 we have added support for creating and starting instances on remote hosts. The underying GlassFish 3.1 code uses SSH to connect to the remote hosts and introduces the concept of a node which is used by the system to deterimine where the instances will be created or started. At this time the only connection type supported is SSH. Users now have a few new commands to manage nodes.
Below is a simple example of creating a cluster, creating an instance and starting the instance all from the administration host or the DAS (Domain Administration System).
First, some assumptions about the setup for GlassFish. For m2, users will have to install and start GlassFish on all hosts that are part of the cluster. We do not currently support installing or starting GlassFish on a remote host and this is planned for a future release. Second, SSH needs to be setup on both hosts as it is the underlying mechanism that is used to run commands on the remote hosts. Currently we have only tested on UNIX (MacOs, Ubuntu, and OpenSolaris) but for m3 we will be including Windows as a tested platform. There are many blogs that talk about setting up SSH so I won't go into all details here. I found this blog useful. To summarize how I set up the authentication key, I used ssh-keygen -t dsa to create the key file in my .ssh dir. Note: a limitation for m2 is that we don't support encrypted key files so you must not set a passphrase when creating keys. I then used scp to copy the key file id_dsa.pub to the host I want to log in to. I put it in the .ssh dir and called it authorized_keys2. Also I had the same username on both systems which further simplified things. At that point I can ssh into the remote host without supplying a password. This is a good test to see if you are set up correctly before you try the commands below.
In this example, we will create a cluster with two machines, foo and bar. foo will be the DAS which has all the information about the servers running in the cluster. Recall that in this release we have introduced a new CLI command create-node-ssh to create a node which is used to locate the host for a particular instance.
create-node-ssh has three required parameters,
All other parameters will default to reasonable values. We default the ssh port to 22. If no username is provided we default to the user running the command and we look for the key file in the home directory of that user. All instances are now required to reference a node element which GlassFish uses to determine where the instance will be created or started. This means that we have added a --node option to the create-instance command. As a convience we have a default node for localhost so if the node option is not specified when the instance is created a reference is automatically added to the localhost node. The localhost node contains only a node name of localhost. We can get the GlassFish installation directory from the server.
Let's see how this works. All commands are run on the DAS machine and as long as there is SSH access to the other host we will be able to create and start instances.
Install and start GlassFish 3.1 m2 on foo and bar.
On host foo (the DAS) we run all the commands.
$asadmin create-cluster c1
Command create-cluster executed successfully.
$asadmin create-node-ssh --nodehost=bar --nodehome=/home/cmott/glassfishv3/glassfish nodebar
Command create-node-ssh executed successfully.
$asadmin list-nodes
localhost
nodebar
Command list-nodes executed successfully.
$asadmin create-instance --cluster=c1 --node=nodebar instance1
Command create-instance executed successfully.
$asadmin create-instance --cluster=c1 instance2
Command create-instance executed successfully.
$asadmin list-instances
instance2 not running
instance1 not running
Command list-instances executed successfully.
$asadmin start-cluster c1
Command start-cluster executed successfully.
$asadmin list-instances
instance2 running
instance1 running
Command list-instances executed successfully.
Notice that when creating instance2 I did not specify a node and so the default node lcoalhost is used. In a future release of GlassFish, create-node-ssh will test if a connection can be made to the remote host when the node is created. If not reachable the user can create the node if the --force option is set to true.
Check it out!
Feature branches have simple life cycle, they usually consume trunk changes and are merged back into trunk after the work is completed.
In IntelliJ IDEA 9.0.3 EAP, take all trunk changes into feature branch and reintegrate back into trunk using new “Merge from…” action:
You can merge all changes in one shot or select a subset of them. Changelist with merged changes is created and offered for commit.
Just in case you didn’t know, we had our DemoCamp yesterday in Jena. Needless to say, it was a fantastic event. We had about fifty attendees and seven demos of fifteen minutes each. It was me using yellow and red cards to make sure they stay in time.
Sascha had the pleasure of giving a few opening words.

Steffen showed us how to use Xtext to simplify writing test cases using a DSL.

Mike demonstrated how a lawyer can build an Eclipse RCP application for generating employers’ references without writing any line of code.

Then Matthias introduced us into the world of Git and the Eclipse Git integration.

Jochen – the guy with the three phones – used the Eclipse SDK to develop an Android conference call management app.

Myself talked about Eclipse on servers.

Christoph demoed what that really means. He wrote an application that uses Equionx/Gyrex and allows to upload and manage bundles at runtime through a web interface.

Enrico talked about GenGMF – a modeling framework for easier generation of GMF editors.

Last but not least, a guy with the only Eclipse t-shirt had some nice closing words.

Thank you everybody for coming and thank you all presenters for your great demos. You can view all pictures of the event here.
We’re happy to announce the winners of the fourth JetBrains IDEAl Plugin Contest, in which the users could submit all plugins released between January 1st, 2009 and March 31, 2010. Once again, we’ve received a lot of great submissions, and were quite impressed with the quality of most of them.
And the winners are:
We thank all the participants and congratulate the contest winners on their awards. However, congratulations are also in order for the whole IntelliJ IDEA community on getting new useful plugins. The new submissions can be found in our repository, with a special icon denoting the IntelliJ IDEAL contest winners. Let the downloading begin!
Well, the same procedure as every year (no, it's not p2 this time:-) - here is my personal "Helios" release including updates of all of my own plugins (there is no FindBugs Eclipse plugin update until now, as I was/I'm heavily involved in the MercurialEclipse development). BTW, 5 of the plugins are hosted now on Eclipse Labs and using Mercurial as version control system behind.
Side note: Last August after the disaster with bugfix propagation between different branches in the FindBugs project I've started to looking for a replacement for the SVN (which was the evil system). I quickly became the committer rights in the MercurialEclipse plugin - and now few months later I've managed all of my project updates in a full featured IDE without the command line.
There are no groundbreaking changes - mostly some code polishing and few small enhancements, as most of my plugins are mature enough. Go to the project pages to see what is the difference to the old versions. Warning: with this "Helios" release I give up support for Eclipse releases older Eclipse 3.5. Technically there are no changes preventing the code to run on older Eclipse versions, but I simply don't have time and energy to support ALL of the possible plugin/platform/OS combinations. Eclipse 3.5 + 3.6 should be enough from now.
Enjoy :-)
Anyone working on large Maven projects knows well about how hard it is to keep in mind all the dependencies between modules and libraries; and even harder, to resolve conflicts between them. We’ve greatly improved Maven Dependencies Diagram to make this whole thing a lot simpler.

There are several approaches to resolving dependency conflicts, and so we created a special layout that shows you dependencies (nodes) in the exact order as they are defined in pom.xml files. This differs from other Maven dependency diagrams: for example, in Eclipse this diagram looks like this:
It’s hard to understand and impossible to navigate from node to node by keyboard. All artifacts with different version numbers are merged (multiple incoming links per node), and there are no visible conflicts. IntelliJ IDEA shows you dependency layout exactly in the order they are defined in pom.xml
It’s easy to find your modules on diagram — they all are blue, as well as test dependencies are green. Conflicting dependencies are marked red, and you can find what they conflicted with by selecting one of them:
You can fix a conflict by excluding a dependency. IntelliJ IDEA will offer all places where it’s possible to add the exclusion definition:
Navigation from nodes to POM files is also convenient. Each dependency links directly to the place where it was defined:

On huge dependency diagrams it is useful to use scope filter to decrease number of nodes:
![]() |
![]() |
Maven Dependencies Diagram will be available in the first EAP of IntelliJ IDEA 10. Your suggestions and feature requests are welcome.
The people used to be enthusiastic and pationate about their work (and they still are). The company culture... oh man, it's kind of unsharable experience. You could meet legendary people in corridors. And even better you could work or drink with them too. All your ideas could be changed into an innovation. That was the company that I liked and reasons why I joined. Everything changed, of course, however I changed too
It's time to move.
Since IntelliJ IDEA and all JetBrains products use YouTrack for issue tracking, we thought you’d be interested to know that a new major version of YouTrack has just been released.
What’s different about YouTrack 2.0? Most importantly, with this new version, you can easily migrate issues from your current bug tracker using REST API, create unlimited custom attributes, and use per-issue permissions for fine-grained security. However, this is just a fraction of what the new version brings: to learn more about new features and improvements, visit What’s New.
At the same time, YouTrack remains an intelligent, keyboard-centric, and easy-to-use issue tracker, packing the majority of its functionality in just two controls: a search box and command window.
All in all, if you’re using other bug and issue trackers, it’s probably just the right time to reconsider and take a look at YouTrack more closely, specifically considering that YouTrack 2.0 adds a new Starter Edition, the best fit for small teams priced at only $111! Professional Edition and Enterprise Edition are currently worth $225 and $900, respectively.
You can download YouTrack 2.0, instantly deploy it, and enjoy a free 60-day evaluation. If you’re already using YouTrack, you’re entitled to a free upgrade to YouTrack 2.0: just use your existing license key.
Believe or not - two days after we have announced the 1.6.0 MercurialEclipse plugin release, Mike announced that Eclipse Labs will use Mercurial as version control system. This is a perfect match!
Please don't even try to start your first Eclipse Labs project with Subversion. Subversion time is over. It is now "legacy" and clearly behind Git and Mercurial. Please give Mercurial (and MercurialEclipse) a try! It is worth the effort, especially if you use MercurialEclipse as Mercurial GUI frontend.
The video below shows first steps with MercurialEclipse and Google Code (==Eclipse Labs). Additionally I highly recommend you this detailed series of posts about using DVC systems in Eclipse, particularly Mercurial with MercurialEclipse.
Are you new to Mercurial? Just check this great Mercurial tutorials for beginners.
/* * (C) Copyright 2000-2010, by Object Refinery Limited. */ import java.awt.Color; import java.awt.RadialGradientPaint; import java.awt.geom.Point2D; import javax.swing.JPanel; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.labels.StandardPieSectionLabelGenerator; import org.jfree.chart.plot.PiePlot; import org.jfree.chart.title.TextTitle; import org.jfree.data.general.DefaultPieDataset; import org.jfree.data.general.PieDataset; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.RefineryUtilities; /** * A simple demo showing a pie chart using RadialGradientPaint. */ public class PieChartWithRadialGradientPaintDemo extends ApplicationFrame { /** * Default constructor. * * @param title the frame title. */ public PieChartWithRadialGradientPaintDemo(String title) { super(title); setContentPane(createDemoPanel()); } /** * Creates a panel for the demo (used by SuperDemo.java). * * @return A panel. */ public static JPanel createDemoPanel() { JFreeChart chart = createChart(createDataset()); ChartPanel panel = new ChartPanel(chart); panel.setMouseWheelEnabled(true); return panel; } /** * Creates a sample dataset. * * @return A sample dataset. */ private static PieDataset createDataset() { DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("United States", 607.0); dataset.setValue("People's Republic of China", 84.9); dataset.setValue("France", 65.7); dataset.setValue("United Kingdom", 65.3); dataset.setValue("Russia", 58.6); dataset.setValue("Germany", 46.8); dataset.setValue("Japan", 46.3); dataset.setValue("Italy", 40.6); dataset.setValue("Saudi Arabia", 38.2); dataset.setValue("India", 30.0); return dataset; } /** * Creates a chart. * * @param dataset the dataset. * * @return A chart. */ private static JFreeChart createChart(PieDataset dataset) { JFreeChart chart = ChartFactory.createPieChart( "Military Spending 2008 - Top 10 Countries", dataset, false, // legend? true, // tooltips? false // URLs? ); chart.addSubtitle(new TextTitle("http://en.wikipedia.org/wiki/List_of_countries_by_military_expenditures")); PiePlot plot = (PiePlot) chart.getPlot(); plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} ({2})")); plot.setBackgroundPaint(Color.WHITE); plot.setOutlinePaint(null); Point2D center = new Point2D.Float(0, 0); float radius = 200; float[] dist = {0.2f, 1.0f}; RadialGradientPaint p = new RadialGradientPaint(center, radius, dist, new Color[] {Color.BLUE, new Color(200, 200, 255)}); plot.setSectionPaint("United States", p); RadialGradientPaint p2 = new RadialGradientPaint(center, radius, dist, new Color[] {Color.RED, new Color(255, 200, 200)}); plot.setSectionPaint("People's Republic of China", p2); RadialGradientPaint p3 = new RadialGradientPaint(center, radius, dist, new Color[] {Color.YELLOW, new Color(255, 255, 200)}); plot.setSectionPaint("France", p3); plot.setExplodePercent("France", 0.30); RadialGradientPaint p4 = new RadialGradientPaint(center, radius, dist, new Color[] {Color.GREEN, new Color(200, 255, 200)}); plot.setSectionPaint("United Kingdom", p4); RadialGradientPaint p5 = new RadialGradientPaint(center, radius, dist, new Color[] {Color.ORANGE, new Color(255, 200, 200)}); plot.setSectionPaint("Russia", p5); RadialGradientPaint p6 = new RadialGradientPaint(center, radius, dist, new Color[] {Color.DARK_GRAY, new Color(200, 200, 200)}); plot.setSectionPaint("Germany", p6); RadialGradientPaint p7 = new RadialGradientPaint(center, radius, dist, new Color[] {Color.GREEN, new Color(200, 255, 200)}); plot.setSectionPaint("Japan", p7); RadialGradientPaint p8 = new RadialGradientPaint(center, radius, dist, new Color[] {Color.YELLOW, new Color(255, 255, 200)}); plot.setSectionPaint("Italy", p8); RadialGradientPaint p9 = new RadialGradientPaint(center, radius, dist, new Color[] {Color.ORANGE, new Color(255, 200, 200)}); plot.setSectionPaint("Saudi Arabia", p9); RadialGradientPaint p10 = new RadialGradientPaint(center, radius, dist, new Color[] {Color.MAGENTA, new Color(255, 200, 255)}); plot.setSectionPaint("India", p10); return chart; } /** * The starting point for the demo. * * @param args * ignored. */ public static void main(String[] args) { // ****************************************************************** // More than 150 demo applications are included with the JFreeChart // Developer Guide...for more information, see: // // > http://www.object-refinery.com/jfreechart/guide.html // // ****************************************************************** PieChartWithRadialGradientPaintDemo demo = new PieChartWithRadialGradientPaintDemo("PieChartWithRadialGradientPaintDemo.java"); demo.pack(); RefineryUtilities.centerFrameOnScreen(demo); demo.setVisible(true); } }


I case you hadn't noticed :-) despite the recent transition, JavaOne is indeed happening. The call for papers went out a while ago, and it's it's about to close, so submit your proposal today!.
It promises to be a giant year with JavaOne being just a few blocks from Oracle OpenWorld. That few blocks should provide a gap of sanity (opportunity?) between the Geeks and the BizTypes. San Francisco will be bursting at the seams.
You've probably seen the news - the Sun/Oracle transaction has closed. With the passing of that milestone, I can once again speak freely.
Having had nine months to accelerate down the runway, there's not a doubt in my mind Oracle's takeoff and ascent will be fast and dramatic. I wish the combined entity the best of luck, and have enormous confidence in the opportunity.
Greg Papadopoulos, one of the brightest people I've ever known, once made a very interesting statement - all technology ultimately becomes a fashion item. It was true for timekeeping, and it's definitely true of computing and telecommunications. To that law, I'd like to add a simple corollary: the technology industry only gets more interesting. It's been true my entire life.
As for where life takes me next, you should follow me via Twitter at openjonathan to find out. I'll also be rehosting this blog (and again, stay tuned to Twitter by following me here). I expect to do my part to keep things interesting.
Thank you for your support and commitment. I wish you all the best of luck building, taking advantage of (and likely wearing) the future!
Jonathan Schwartz
CEO, Sun Microsystems, Inc.
A Wholly Owned Subsidiary of Oracle Corporation.
Sometimes you may want to quickly generate graphs programmatically and view/analyze those. Examples include, inheritance/type relation diagrams of an object oriented program, function call graphs and any other domain specific graphs (reporting chain of your organization chart for example). I find GXL very useful for this. GXL stands for Graph eXchange Language. It is a simple XML format to specify graphs. A simple graph stating that "JavaFX" language is related to "Java" language is as follows:
File: Test.gxl<gxl> <!-- edgemode tells this is directed or undirected graph --> <graph id="langs" edgemode="directed"> <!-- write your nodes --> <node id="java"/> <node id="javafx"/> <-- now write your edges --> <edge from="java" to="javafx"/> </graph> </gxl>
You can also add number of "attributes" to nodes and edges - like color of the edge, style of the edge and so on. For example, "red" color can be specified for an edge as follows:
<edge from="java" to="javafx"> <attr name="color"><string>red</string></attr> </edge>
Now that we have written a simple graph with two nodes and a single edge between them, we may want to view it. There are number of tools/libraries to view GXL documents -- I've used Graphviz. Graphviz displays it's own native format called ".dot". Graphviz comes with a set of command line tools. One such tool is "gxl2dot", which as you'd have guessed, can be used to convert a .gxl file to a .dot file.
gxl2dot Test.gxl > Test.dot
Once converted the .dot file can be opened in Graphviz GUI and we can export it to .pdf/.jpg/.png and so on. This way you can email the graphs to others and/or publish in your blogs/webpages easily.
The converted .pdf file for the above simple graph is here: test.pdf
I've used GXL graphs in a recent debugging tool related to JavaFX compiler. More on that later...
// File: SuperClass.java
public class SuperClass {
public static int func() {
return 0;
}
}
// File: SubClass.java
public class SubClass extends SuperClass {
public static boolean func() {
return false;
}
}
$ javac -fullversion
javac full version "1.6.0_15-b03-226"
javac SuperClass.java SubClass.java
SubClass.java:2: func() in SubClass cannot override func() in SuperClass; attempting to use incompatible return type
found : boolean
required: int
public static boolean func() {
^
1 error
The subclass uses a different return type for the same named method with same argument types. So, it is overloading SuperClass.func() and the overloading SubClass.func() differs only in return type. But, I am not sure of the error message....
This blog highlights some of the changes that are part of GlassFish v3 logging. Since Prelude I have added 3 asadmin commands related to logging. I have updated the set-log-level command and changed the syntax. See below for details. The new commands are:
* asadmin rotate-log
* asadmin list-logger-levels
* asadmin set-log-level logger-name=level:logger-name=level
The first command rotates the log files immediately. Users can now use native scheduling software such as cron to rotate the logs. We still support rotating logs based on file size or elapsed time since the last log rotation and this new command allows more flexibility when rotating log files. The second command lists the loggers and their current level. This command reports on all the known loggers that are listed in logging.properties file. Note that in some cases the loggers may not have been created by the respective containers however they will still appear in the list. The third command, asadmin set-log-level, sets the level for aone or more loggers. For example, to set the log level of the web container logger level to WARNING simply type: asadmin set-log-level javax.enterprise.system.container.web=WARNING. This command updates the logging.properties file which means that the values are persisted across server restart. Use asadmin list-logger-levels to get the names of the loggers.
Finally, I've added a property to logging.properties file in the domain config directory that controls the number of message written to the server log file. GlassFish v3 logging code writes messages to a queue instead of directly to the server log file. Log messages are taken off the queue and written to the server log file as cycles become available. The property name is com.sun.enterprise.server.logging.GFFileHandler.flushFrequency. This propertys controls the number of messages that are taken off the queue and written to a file a time. The actual number written is the value of this property or less depending on the number of messages in the queue. The default value is 1.
Bonjour, Comment Java?
This coming Thursday(08/27/09) 'll be at GooglePlex (Mountain View) for an Eclipse Day...The entire genda is at http://wiki.eclipse.org/Eclipse_Day_At_Googleplex_2009.
2 presos seem to be very interesting so far:
and possibly others...The Google crowd is impressive.
There is a waiting list for people who did not register in time:-) But I am sure online videos of the conference will be available as well.
Ludo (Testing the new Java.net Blog system)


Ahem Motorola HQ-Android guys, the blog has moved to:
http://mobilebytes.wordpress.com
You will find coverage of the AndCooper Android Dev tool there.

package at.bestsolution.qt;
import com.trolltech.qt.gui.QApplication;
import com.trolltech.qt.gui.QGridLayout;
import com.trolltech.qt.gui.QLabel;
import com.trolltech.qt.gui.QLineEdit;
import com.trolltech.qt.gui.QMainWindow;
import com.trolltech.qt.gui.QWidget;
public class HelloWorld extends QMainWindow {
public HelloWorld() {
setWindowTitle("Hello World!");
QWidget composite = new QWidget();
QGridLayout layout = new QGridLayout();
composite.setLayout(layout);
QLabel label = new QLabel();
label.setText("Label");
layout.addWidget(label,0,0);
QLineEdit text = new QLineEdit();
layout.addWidget(text,0,1);
setCentralWidget(composite);
}
public static void main(String[] args) {
QApplication.initialize(new String[0]);
HelloWorld world = new HelloWorld();
world.show();
QApplication.exec();
}
}

package at.bestsolution.qt;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import com.trolltech.qt.gui.QApplication;
import com.trolltech.qt.gui.QGridLayout;
import com.trolltech.qt.gui.QLabel;
import com.trolltech.qt.gui.QLineEdit;
import com.trolltech.qt.gui.QMainWindow;
import com.trolltech.qt.gui.QPixmap;
import com.trolltech.qt.gui.QPushButton;
import com.trolltech.qt.gui.QWidget;
public class MainWindow extends QMainWindow {
public MainWindow() {
QWidget widget = new QWidget();
widget.setObjectName("main_window");
QGridLayout layout = new QGridLayout();
layout.setMargin(0);
widget.setLayout(layout);
addHeader(layout,"Tom Schindl","at/bestsolution/qt/bookmarks.png");
QWidget content = new QWidget();
QGridLayout contentLayout = new QGridLayout();
content.setLayout(contentLayout);
addLine(0, contentLayout, "Firstname");
addLine(1, contentLayout, "Lastname");
addLine(2, contentLayout, "Age");
QPushButton button = new QPushButton();
button.setObjectName("submit");
button.setText("Submit");
contentLayout.addWidget(button,3,1);
layout.addWidget(content);
setCentralWidget(widget);
}
private void addHeader(QGridLayout layout, String labelText, String icon) {
QLabel header = new QLabel();
layout.addWidget(header);
header.setObjectName("header");
QGridLayout headerLayout = new QGridLayout();
headerLayout.setMargin(0);
header.setLayout(headerLayout);
QLabel headerIcon = new QLabel();
headerIcon.setObjectName("header_icon");
headerIcon.setPixmap(loadImage(icon));
headerLayout.addWidget(headerIcon);
QLabel headerText = new QLabel();
headerLayout.addWidget(headerText,0,1);
headerLayout.setColumnStretch(1, 100);
headerText.setObjectName("header_text");
headerText.setText(labelText);
}
private void addLine(int line, QGridLayout contentLayout, String labelText) {
QLabel label = new QLabel();
label.setText(labelText);
label.setObjectName("label");
contentLayout.addWidget(label);
QLineEdit text = new QLineEdit();
text.setObjectName("text");
contentLayout.addWidget(text,line,1);
}
private QPixmap loadImage(String path) {
try {
InputStream in = getClass().getClassLoader().getResourceAsStream(path);
ByteArrayOutputStream out = new ByteArrayOutputStream();
int l;
byte[] buffer = new byte[1024];
while ((l = in.read(buffer)) != -1) {
out.write(buffer, 0, l);
}
QPixmap pic = new QPixmap();
pic.loadFromData(out.toByteArray());
return pic;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
package at.bestsolution.qt;
import org.eclipse.equinox.app.IApplication;
import org.eclipse.equinox.app.IApplicationContext;
import com.trolltech.qt.gui.QApplication;
public class Application implements IApplication {
public Object start(IApplicationContext context) throws Exception {
QApplication.initialize(new String[0]);
MainWindow window = new MainWindow();
window.show();
QApplication.exec();
return IApplication.EXIT_OK;
}
public void stop() {}
}
private String loadStyles(String cssPath) {
InputStream in = getClass().getClassLoader().getResourceAsStream(cssPath);
BufferedReader r = new BufferedReader(new InputStreamReader(in));
StringBuilder s = new StringBuilder();
String line;
try {
while( (line = r.readLine()) != null ) {
s.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
return s.toString();
}public Object start(IApplicationContext context) throws Exception {
QApplication.initialize(new String[0]);
MainWindow window = new MainWindow();
window.setStyleSheet(loadStyles("at/bestsolution/qt/style.css"));
window.show();
QApplication.exec();
return IApplication.EXIT_OK;
} and we need to define some styles:


To say the past few months have been a whirlwind is an understatement.
And thanks for the reminders, I recognize it's been a while since I've posted a blog. For reasons why, just click here to read the background. And before you ask, SEC regulations and securities laws limit what I can discuss about the Oracle transaction, so don't expect any insights on the topic.
But there's still a ton going on at Sun - with JavaOne (June 2nd, in San Francisco) coming up fastest on the horizon. We're preparing to reveal what I believe is one of the most important advancements ever for the Java community - and this time, it's all about revenue and business opportunity.
As you know, we're fond of throwing great big numbers around when talking about Java's distribution: billions of PCs', mobile devices, and smartcards, millions of enterprise servers, set top boxes, Blu-Ray DVD players and a growing number of very cool Kindles (buy one here). Very few technologies on the internet have anywhere near that kind of distribution muscle. Adobe's Flash, and Microsoft's Windows are just about its only peers when measured by runtime volume.
But not all Java runtimes are the same. For most devices, from RIM's Blackberry to Sony's Blu-Ray DVD players, original equipment manufacturers (known as "OEM's") license core Java technology and brand from Sun, and build their own Java runtime. Although we're moving to help OEM's with more pre-built technology, the only runtimes currently that come direct from Sun are those running on Windows PC's.
And oddly enough, that's made the Windows Java runtime our most profitable Java platform. I thought I'd provide some insight into that business here, and then introduce a project we're planning to unveil at this year's JavaOne, known internally as Project Vector.
As a business model, traffic for traffic's sake isn't that interesting (but never confuse traffic with adoption). Free internet traffic is only interesting if a third party is willing to pay to drive distribution of their content to your audience - from highway billboards to internet runtimes, businesses will pay for exposure and distribution to drive their business, whether through branding/advertising, delivering news, or selling movies or retail products. "Getting distribution" used to mean getting access to bricks and mortar distributors in shopping malls - nowadays, it means having another company propel your content into the market via the internet.
Now to that point, a few years ago, we called our friends at one of the world's largest search companies (you can guess who), to talk about helping them with software distribution - because of Java's ubiquity, we had a greater capacity than almost anyone to distribute software to the Windows installed base. We signed a contract through which we'd make their toolbar optionally available to our audience via the Java update mechanism. They paid us a much appreciated fee, which increased dramatically when we renegotiated the contract a year later. Distribution was becoming quite valuable to us and to them - and given the "take" rates, or the rates at which consumers were choosing to install new content, the Java audience saw value in the new application.
The year following, the revenue increased dramatically again - when an aspiring search company (again, you can figure out who) outbid our first partner to place their toolbar in front of Java users (this time, limited to the US only). Toolbars, it turns out, are a significant driver of search traffic - and the billions of Java runtimes in the market were a clear means of driving value and opportunity.The revenues to Sun were also getting big enough for us to think about building a more formal business around Java's distribution power - to make it available to the entire Java community, not simply one or two search companies on yearly contracts.
And that's what Project Vector is designed to deliver - Vector is a network service to connect companies of all sizes and types to the roughly one billion Java users all over the world. Vector (which we'll likely rename the Java Store), has the potential to deliver the world's largest audience to developers and businesses leveraging Java and JavaFX. What kinds of companies might be interested?
If you talk to a Fortune 500 company or a startup, pretty much everyone craves access to consumers - which is the one problem we've solved with the Java platform. Most folks don't think of Sun as a consumer company, and largely we're not, but our runtimes reach more consumers than just about any other company on earth. That ubiquity has obvious value to search companies, but it's also quite valuable to banks looking to sign up new accounts, sports franchises looking for new viewers, media companies and news organizations looking for new subscribers - basically, any Java developer looking to escape the browser to reach a billion or so consumers.
How will it work? Candidate applications will be submitted via a simple web site, evaluated by Sun for safety and content, then presented under free or fee terms to the broad Java audience via our update mechanism. Over time, developers will bid for position on our storefront, and the relationships won't be exclusive (as they have been for search). As with other app stores, Sun will charge for distribution - but unlike other app stores, whose audiences are tiny, measured in the millions or tens of millions, ours will have what we estimate to be approximately a billion users. That's clearly a lot of traffic, and will position the Java App Store as having just about the world's largest audience.
This creates opportunity for everyone in the developer community - and specifically, for any developer (even those not using Java/JavaFX) seeking to reach beyond the browser to create a durable relationship with their customers (and btw, don't forget to join us for CommunityOne - the day before JavaOne, June 1st, same location - click the graphic to learn more). Remember, when apps are distributed through the Java Store, they're distributed directly to the desktop - JavaFX enables developers, businesses and content owners to bypass potentially hostile browsers.For details on how Vector will work, when it'll be available, how to submit your content or application - alongside insights into Project Vector's technology, roadmap, features and business model, come see us at JavaOne... In the interim, you can learn more about the latest JavaFX news at sun.com/javafx, and download the latest JavaFX design tools at netbeans.org.
And although we obviously don't comment on rumors, we might even have a special guest or two at JavaOne.
See you in San Francsico (or on the webcast...)!
I have decided to quit Sun Microsystems. I spent amazing 5 years at Sun and I am very grateful for all I've learned with the company. Working on both NetBeans and OpenSolaris adoption was real fun so I leave with very mixed feelings.
I am going back to Java developer business and will be going to Java One with my new employer, so you will find me in the Java One pavilion area if you want to say hi. I wish my Sun colleagues good luck with their new adventures!
P.S. Thanks for all the beans.
1. Technology Adoption
2. Commercial Innovation
3. Efficiently Connecting Adoption and Commercial Opportunity.
I'm hoping you've got a clear picture surrounding the first of these two priorities - how and where we drive software adoption, and focus our commercial efforts.
So now I'd like to talk about the linkages - while also addressing one of our biggest strategic challenges, our scale.
Selling Scale
First, why is scale a challenge for Sun? To be clear, I'm not talking about purchasing scale. As I've said before, we use innovation to drive product profitability, not simply bulk purchasing leverage. The scale to which I'm referring is selling and marketing scale. With Sun's current products, we could be selling to twice the number of customers we currently serve - our products appeal to an audience far greater than our customer base. But we're limited by our size - our sales and partner force has a tenth the resources of our biggest peers.
This is a particularly tough problem to solve in the midst of an economic downturn. Growing customers while reducing employees is an obvious challenge.
But it's also a huge opportunity. We have fewer than 100,000 customers worldwide. Using just one example, there are more than 10,000,000 MySQL users globally - reaching an additional 1% of them could more than double our customer base. The question is obviously how - we know we're relevant to those users, but we and our partners can't very well put sales reps on airplanes to visit all 10,000,000.
To answer that question, I'd like to examine what may seem like a tangential topic... the search business.
Discovering Intent
Now, why is the search business so valuable? Because it's an exceptionally efficient means of harvesting intentionality -
if a consumer is searching for "flights to Cairo," the odds are good she's in the market for a trip to Egypt. That intent represents a ton of value for the airlines, hotel chains and car rental companies that serve travelers to Egypt. Whoever first recognizes that intent can broker a relationship between the traveler and those businesses, and charge a healthy toll for the privilege (that's the heart of on-line advertising). A discount airfare to Cairo, presented alongside the results of a "flights to Cairo" search, has a far higher likelihood of generating a ticket purchase than an unqualified billboard or ad in a newspaper. It's easier to find needles in haystacks when the haystacks are sorted by needle count.
Now I want you to think about the model I've described in these last few entries - Sun's business starts with exceptionally high volume free software adoption, literally millions of assets each day. What does that have to do with search?
Well, what is a customer telling us when they download software? Depending upon what they're downloading, they're telling us about what they value. If you're downloading MySQL or ZFS, you're more than likely storing data. If you're downloading OpenOffice.org, you're likely to create, save and maybe print documents. If you download VirtualBox, our virtualization software, you're telling us you work with multiple operating systems. An enormous stream of this kind of data funnels into Sun every day - signaling intent from customers spanning every corner of the world's technology market. That's the foundation of our analytical marketing activities.
Individuals and organizations opt-in to tell Sun, by what they download, what they're intending to do - which gives Sun a unique vantage point surrounding what comes next. If your company is downloading Lustre, the leading parallel file system for supercomputing, the odds are good you're on your way to building a supercomputing facility. Sun uniquely optimizes our solutions around Lustre, and we target those offers to an obviously interested user community.
This is one reason we've been growing in the supercomputing market. We use software innovation to drive preference for Lustre - the majority of top supercomputing sites now use it. We target our product and service development to optimize for facilities using Lustre. And we target our selling and marketing activities around users that identify themselves to us - by downloading Lustre, or whitepapers and content related to it.
But as I've said, the majority of free software users aren't going to be building million dollar supercomputers, nor will they be issuing million dollar software purchase orders. And therein lies a new opportunity - one that helps us address our scaling challenges, as well.
Introducing Sun's Cloud
That opportunity is for Sun's Cloud - which we just announced today - to deliver commercial network services to the entire free software community.
Let's start with what we announced today.
This morning, Dave Douglas, the SVP of our Cloud Computing business, announced we're building the Sun Cloud, atop open source platforms - from ZFS and Crossbow, to MySQL and Glassfish. With more than 4,000 developers hard at work on these enabling elements, and a twenty year history of network scale software innovation, we're very comfortable with our technology lead. By building on open source, we're also able to radically reduce our costs by avoiding proprietary storage and networking products.
Second, we announced the API's and file formats for Sun's Cloud will all be open, delivered under a Creative Commons License. That means developers can freely stitch our and their cloud services into mass market products, without fear of lock-in or litigation from the emerging proprietary cloud vendors.
Third, unlike our peers, we also announced our cloud will be available for deployment behind corporate firewalls - that we'll commercialize our public cloud by instantiating it in private datacenters for those customers who can't, due to regulation, security or business constraints, use a public cloud. We recognize that workloads subject to fiduciary duty or regulatory scrutiny won't move to public clouds - if you can't move to the cloud, we'll move the cloud to you.
The Developing Cloud
How will developers use the cloud? Let me give you a very basic example - inside Sun, we're just now rolling out a version of OpenOffice extended for the cloud. If you take a look at the File menu in this picture, you'll see menu items that don't exist in your version -
but will exist in Sun's distribution. "Save to Cloud," and "Open From Cloud..." will enable OpenOffice users to use our public cloud to store and retrieve documents from the network, rather than their PC. We're in beta deployment inside Sun as we speak, and with around 3,000,000 new users joining the OpenOffice community every week, the opportunity to deliver this as a public service, to nearly 200,000,000 users, adn their employers, is really exciting.
The same applies to, say, VirtualBox - our desktop virtualization product, used by millions of users across the world. VB users will see a new feature later this year, offering an upload service to those wishing to archive or run multiple OS/application stacks - in Sun's Cloud. Those users have already told us they run multiple OS's - now that we know their intent, delivering a cloud to add value is a simple step forward. The same will apply to Glassfish and NetBeans, whose adoption helps us discover and recruit application developers - who might have a similar interest in running and/or storing apps in the cloud.
So in addition to offering the basic infrastructure services developers have come to expect (storage, compute, bandwidth), we'll be bringing tens of millions of free software users a library of cloud services and design patterns - designed to enhance the value they derive from the underlying software, while encouraging community development around open clouds. And all this will be based on what users have already told us they're interested in.
The Network is the Computer
To me, this is the embodiment of Sun's vision statement, the Network is the Computer. The breadth and quality of Sun's open source software is well known, and has created a user community that numbers in the hundreds of millions across the globe. The evolution of Sun's cloud and cloud services, from remote storage to remote execution, will allow us to grow our market, and the value we deliver to customers - even in, and perhaps amplified by the economic downturn. Clouds are just as interesting to students and startups as they are to Fortune 500 customers. If you're interested in Sun's Cloud, just head over to sun.com/cloud.
The network is the computer has always been one of the most powerful statements describing the future of the technology we build. For the first time, we expect to translate that mission statement to our business model, investing in the free software community to grow our market, and leveraging the network to grow the value we deliver - to a market, and partner community, far larger than Sun.
And in that connection between adoption and commercial opportunity, we see near limitless opportunity, measured only by the scale of adoption we can achieve in a world where bandwidth is as pervasive as electricity, and free software adoption continues to accelerate.
With that said, this brings to a close this discussion of who Sun is, and where we're headed. I hope it's been useful. We're a very simple business, we strive to do three basic things. To drive free software across the world, both because it's good for the planet and innovation, and it's good for our business. Second, to deliver the world's most compelling technologies to captivate developers and deployers, alike. And finally, to put those assets to work in creating opportunities in the cloud, for our customers, our partners and for Sun, as well.
Thank you for your time and attention, I'll see you next time.
A few months ago I decided to look at a different place to host my blog. I compared Google's blogger and wordpress, and finally decided to go with the former.
The full URL is: http://frankkieviet.blogspot.com/ .
1. Technology Adoption
2. Commercial Innovation
3. Efficiently Connecting 1. and 2.
This entry focuses on the second, Commercial Innovation, and reviews our core revenue products, services and strategies.
By now, you understand Sun's approach to growing the market - driving adoption of key technologies drives Sun's addressable market. Once you're using one of our fundamental technologies, Sun's innovations focused on those technologies are relevant to you. The beauty of free distribution is you don't have to pick customers, they pick you.
Three very valuable markets emerge from this adoption. I'll focus on the first two here, the products and services we sell.
The first market is obvious. Software isn't downloaded onto air.
Systems InnovationsAnd in this datacenter market we build exceptional systems - screaming fast entry level servers, all the way up to the most efficient mainframe class systems. We build super fast storage, from our new flash based platforms to eco-efficient tape and archive solutions. We also build the world's fastest networking switches, powering the planet's largest supercomputers. We cover the entire spectrum, and work with the smartest partners in the industry to serve customers across the globe. Although we focus on our own technologies, like Java, MySQL and Lustre, we also optimize for VMware, Microsoft's Windows and we're generally recognized to run Oracle better than anyone on the planet.
Now, you heard me call these our Systems products, not just hardware products. These systems are obviously more than just naked components, they're engineered with remote management and monitoring, component redundancy, integrated virtualization, and on board storage and networking. That's why our margins are higher than the industry's***. I'm very proud of our Systems team, they are the most talented platform engineers on earth, and they earn consistently stellar reviews.
But where's this first market headed? Here's where it's going to get interesting.
Datacenter Systems Convergence - Who Plays? Wins?
As I've said before, general purpose microprocessors and operating systems are now fast enough to eliminate the need for special purpose devices. That means you can build a router out of a server - notice you cannot build a server out of a router, try as hard as you like. The same applies to storage devices.
To demonstrate this point, we now build our entire line of storage systems from general purpose server parts, including Solaris and ZFS, our open source file system. This allows us to innovate in software, where others have to build custom silicon or add cost. We are planning a similar line of networking platforms, based around the silicon and software you can already find in our portfolio.
We believe both the storage and networking industry's proprietary approach, and their gross profit streams, are now open to those us with general purpose platforms. That's good news for customers, and for Sun.At the heart of this convergence is Solaris - enabled by technologies such as ZFS (around which we're building our entire storage line), and Crossbow (around which you'll see us build some very compelling networking products). Technologists interested in ZFS and Crossbow can visit OpenSolaris.org, or request an OpenSolaris CD (click the CD image).
I've provided a picture here to make the point - these three industries (servers, storage and networking), are converging, driven by the raw performance of the underlying server operating system and microprocessor.
That means these adjacent markets are all open to Sun and the Solaris community. Leveraging inexpensive, general purpose components is one big advantage for us, but there are others - using a general purpose OS allows us to easily embrace specialized components (from flash memory to GPU's), or adapt to new storage or networking protocols entirely in software. The underlying OS and server are so fast, these extensions and enhancements are simple feature updates, and ones we can leverage across servers, and storage and networking.This isn't to say the networking or storage companies don't have their own operating systems. They do, but in both instances, they're proprietary, have tiny volumes, and despite paying lip service to open standards and the Linux community, their core operating software is unavailable to developers, it's truly proprietary. Their niche OS's also lack cross industry support, which is why our Solaris OEM agreements with IBM, Dell, Intel, Fujitsu and HP are so important to our end customers - they know they'll never be locked in. Today's storage and networking vendors remind me of the server vendors in the late 1990's - with expensive software bolted to expensive hardware. Ultimately forced open by innovation.
At Sun, open source isn't for servers. Open source is for datacenters.
Where's the Money?
Let's also look at the financial backdrop to this convergence. For these networking and storage vendors, entering the server market means suffering profit degradation - the server industry is vastly more competitive than the storage and networking marketplace.
On the other hand, as Sun grows into the storage and networking markets, we're thrilled with higher profit margins. We're unique among platform vendors in being able to deliver Servers, Storage, Networking and Virtualization on our own terms, very well integrated and at our own prices. How will we differentiate against our peers?
Simple. Integration, innovation, and as a result of building atop open source and commodity components, we are the low cost supplier. They, on the other hand, will be forced into all kinds of contorted partnerships and complex reselling arrangements. They may ship the boxes, but they won't control the platform software - or profit streams.How is our Systems business doing? The portions of this business sensitive to software adoption, primarily the low end of all these products, is doing quite well, growing double digits**. The weakness in our Systems business is really focused on the high end. This reflects really two things - the first is the deferrability of high end system purchases. Our high end business was up 20% a little over a year ago, it was down more than 20% in the December quarter of 2008 - across the industry, customers are holding off on big ticket purchases.
The second, and arguably more important headwind was a decision made back in the 1990's to cancel Solaris on Intel, in the belief it would protect Sun's SPARC hardware business. Conversely, that mistake destroyed a generation of Solaris developers, and accelerated the rise of alternatives to traditional SPARC hardware. And now you understand why we prioritize developers - they are the seeds from which great forests grow. If you don't water the roots, the trees wither.
But how do you make money giving software away to developers? Well, let's switch gears, and talk about Software and Services.
When Free is Too Expensive
One of my favorite customer stories relates to an American company that did nearly 30% of its yearly revenue on Christmas Day. They were a mobile phone company, whose handsets appeared under Christmas trees, opened en masse and provisioned on the internet within about a 48 hour period. When we won the bid to supply their datacenter, their CIO gave me the purchase order on the condition I gave him my home phone number. He said, "If I have any issues on Christmas, I want you on the phone making sure every resource available is solving the problem." I happily provided it (and then made sure I had my direct staff's home numbers). Christmas came and went, no problems at all.
A year later, he was issuing a purchase order to Sun for several of our software products. To have a little fun with him (and the Sun sales rep), I told him before he passed me the purchase order that the products were all open source, freely available for download.
He looked at me, then at his rep, and said "What? Then why am I paying you a million dollars?" I responded, "You can absolutely run it for free. You just can't call me on Christmas day, you'll be on your own." He gave me the PO. At the scale he was running, the cost of downtime dwarfed the cost of the license and support.Numerically, most developers and technology users have more time than money. Most readers of this blog are happy to run unsupported software, and we are very happy to supply it. For a far smaller population, the price of downtime radically exceeds the price of a license or support - for some, the cost of downtime is measured in millions per minute. If you're tracking packages or fleets of aircraft, running an emergency response network or a trading floor, you almost always have more money than time. And that's our business model, we offer utterly exceptional service, support and enterprise technologies to those that have more money than time. It's a good business.
All in/all up, our Software business is among the fastest growing businesses at Sun. I've attached our latest financial summary at the end of this blog. We span network identity (built with the OpenDS community), application infrastructure (biult with Glassfish and OpenESB), data management (built with MySQL, ZFS and Lustre), embedded software (such as Java, and the emerging JavaFX), alongside our core operating system and virtualization software (Solaris, OpenSolaris and VirtualBox). These open source platforms generate, alongside the services attached to them, over a billion dollars a year, making Sun by far and away the world's largest open source software company. (For those that continue to ask if we make money with Java, the answer is yes, it's on a ramp to hit about $250m this year - one of our best businesses - and that's just Java on consumer devices, excluding servers).
Every day, these products are being adopted globally, driving university curriculum, corporate trials and design wins, influencing skills, even supporting Presidential campaigns. We know not every download yields revenue or users, but they do yield awareness and trials - a small, but intensely valuable portion of which yields revenue and profit. Our sales reps see the purchase orders at the point of value, not at the point of download. The revenue's recognized over the period of the Service contract - a business model the rest of the industry, at least for mass market products, will inevitably adopt. Fighting free and open software, like fighting free news or free search, is like fighting gravity - and btw, gravity gets a lot stronger during economic downturns.
Conclusion
And in a nutshell, that's how we monetize adoption - with targeted, high value innovations.
We deliver the world's most effective and efficient Systems portfolio, spanning x86 and SPARC servers, storage and networking. And the world's most appealing Software and Services products, spanning embedded software to high performance file systems.
We call all these products network innovations. I know that defies industry categorization, but that's what innovation's all about, defying categorization.
I've only touched on two of the three opportunities opened by mass adoption. And with that as a teaser, I invite you to return for the final blog entry, talking about what might be the most valuable of them all - a market enabled by the innovations described above, and set to transform the entire marketplace. Embodying the phrase, The Network is the Computer.
See you then.
-----------------------
* and before you dismiss those users, some of the world's biggest internet companies/datacenters were started on laptops in dorm rooms... a trend I expect to accelerate.
** Sun's x86 systems business, for example, grew over 11% last quarter, when both HP and IBM's comparable businesses shrank in double digits. For those wondering "how do you differentiate?", just ask our customers.
*** Compared to other industry standard server vendors.
1. Technology Adoption
2. Commercial Innovation
3. Efficiently Connecting 1. and 2.
This entry focuses on the first, Technology Adoption. Adoption is a non-economic phenomena, no money is spent, only time - yet it has extreme financial consequences. Let me give you an example.
I was with a big customer of ours last year, and reading through my account briefing before the meeting, I knew we were doing well. An analysis of their download activity showed they were heavy users of Solaris and OpenSolaris, and they had a large internal community of MySQL users, as well. In the meeting, their CIO said "we love where Solaris is headed." I then asked if we could help with MySQL, and he said... "I banned it."
Not exactly a buying signal.
I was stunned. I asked, "why?" He responded, "Oracle is our global standard, and with 20,000 developers, people need to follow the rules." I said we had a very good relationship with Oracle, and started talking about how fast Oracle runs against our new Open Storage products.

In a nutshell, that's adoption in action. Change in IT isn't just a top down phenomenon - it's more often bottom up*.
Innovation vs. Reselling Innovation
What's the cost of missing that adoption? For Sun to resell a 1-way x86 server running Microsoft's Windows or Red Hat yields (at best) a 10% gross profit margin. Very few companies have the scale to survive on those margins. More to the point, when you resell someone else's products, your customer relationship isn't built with the CIO or technology directors, it's built with their reverse auction web site. For technology companies, the same applies to reselling any product you don't own - it's impossible to differentiate with anything more than a cheaper price. A price your supplier can, and will always, undercut.
Alternatively, when a user picks our products - when they build their storage on ZFS, their network on Crossbow, or their application on MySQL, independent of whether they've paid, they've created an opportunity for Sun - going forward, there's only upside. It's called positive option value.
Not to dip into finance 101, when the net present value of a lifetime revenue cycle exceeds the value of a one time purchase, a product or service that initiates the payment stream is either freely distributed (if it has no marginal cost, like software), or subsidized (if it has a hard cost). That's why you see so many free credit cards, free checking account, free mobile phones, free month's rent, free social networking, etc. In the technology world, free is the new black.
Free Markets
That's also why the internet's most valuable brands are *all* free - Amazon, Google, EBay, Skype, Yahoo!, Facebook, Hi5, MySpace, Baidu, TenCent, etc. Those brands reach more and have greater affinity than just about any other consumer brands. And in the technology marketplace, Linux, Java, MySQL, Firefox, Apache, Eclipse, NetBeans, OpenOffice.org, OpenSolaris, the same applies - free is a universal price, requires no currency translation, and reaches the longest tail of the market.
Now, could Amazon charge you to shop? Could your bank charge you to open an account? Google charge you to search? Could Sun charge people to download MySQL or OpenOffice.org? Sure, we could also destroy those brands in a matter of days. If you're not free, by definition you miss serving those that can't afford, or aren't ready to pay - which means your audience is capped, or destroyed if your competition is already free.
Microsoft's the only company I didn't include in the above list - and although I consider them a stupendously great brand, they're the only company that can really approximate free while making money on the distribution of their products. The fact is they're bundled on almost every PC across the planet, and appear "free" to the users who use those PC's - they've amassed immense power with their distribution, and few users believe they're paying for Windows when they buy a personal computer.
Thus, to developers (Sun's target market) with Windows PC's, Microsoft's product are, in effect, already free. (As an aside, notice Microsoft inexorably moving toward free distribution, too, to reach new users - at some point, you can't bundle every product on every computer, it'd be like printing a Sunday edition of the newspaper every day of the week).This is exactly why we freely distribute our key software assets all over the world - if we didn't, users and developers might pick someone else's free product (or simply use the one they assume to be free). And if they picked someone else's product on which to build their business or their application, Sun becomes a reseller - which isn't our mission or business model. It's a free market, in every sense.
The customer I referenced in my first entry
that said, "I haven't visited Sun in five years, but all of a sudden you seem to matter to my developers" was saying he was seeing exactly that, a lot more of our products used by his developers - from VirtualBox to MySQL, Glassfish to ZFS. For some users, and nearly all developers, budgets aren't measured in dollars, they're measured in time and attention - if you want those audiences to spend their time and attention with you, you have to earn it. If you earn it, a preference forms. For Sun, we drive that preference over our competition, primarily proprietary alternatives.
Our Products are Our Ads
Now, the words "driving preference" are used by the advertising industry when talking about branding. Businesses brand or advertise to drive awareness of or preference for their products. In the case of a Nike or Toyota, both have to spend fortunes to "buy media," or acquire the ad space (or airtime) through which they'll present, free of charge to consumers, the images or content they feel best represents their brands.
Why doesn't Facebook advertise? Because Facebook itself is a branding experience. Using Facebook drives preference for Facebook. And their audience, in users, outreaches just about every media company on earth. It would make no sense for them to buy media, they are media.
For the audiences Sun cares about, those building, deploying or buying technology, we've got a similar reach. By being freely distributed, our products build their own audiences. And using the products, from Glassfish to ZFS or NetBeans, creates a branding experience (and a wildly positive one, if we're doing our jobs well). So why don't we advertise in traditional outlets? Well, every day, the number of people using our products, getting that positive branding experience, eclipses nearly all major newspapers globally, combined.
By proliferating Sun innovations, even encouraging derivatives that will never drive revenue to Sun, we are creating preference for open source, awareness of Sun as an innovator, and displacing proprietary vendors that can't build comparable audiences. That preference has value to us, and to the broader communities in which we participate. The value spans awareness, market penetration, skills development, ecosystem expansion - a healthy community is a growing community.
How else is adoption or preference valuable? Volume adoption attracts application developers, and can drive tipping effects - once one independent software vendor, or ISV, picks your platform, others that work with that ISV follow suit. If you do a good job, you lead an avalanche of ISV's to pick your platform - which makes it more appealing to end users. That's why Red Hat has such a durable Linux model - once Oracle picked Red Hat as the Linux to which they'd first certify Oracle's database, the ISV's that relied on Oracle certified only to Red Hat, which tipped the market to Red Hat so strongly that not even Oracle has been able to undo that grip.
So adoption drives the ecosystem, which drives more adoption and more expansion... you get the idea. It's a virtuous cycle, a cycle that starts with volume adoption.
What Adoption Looks Like
So what does "Adoption" look like? Here's a picture, which shows the ramp we're seeing from free software adoption across the world for some of our key datacenter assets.
On the consumer side, OpenOffice.org, which certainly promotes Sun's vision of open standards and data formats, reaches nearly three million new users - every week. Adding them to a user base we estimate to be between 150 and 200 million users. Talk about global circulation.
Our products are our brands and one of our most effective means of driving design wins - in front of users, developers and OEM's. In markets as diverse as high performance computing and grid scheduling, web databases, application infrastructure and desktop virtualization. Free distribution and access to source code is our investment in the global developer community. We invest with our code, our ideas and time, and we promote and encourage derivatives. We gain by reaching people we'd otherwise never reach - and earning their attention and engagement. Even if we're never paid, that's positive option value.
Another way of looking at adoption are these "pink dot" maps - they show us where our products are gaining users via opt-in registration. My favorite dots on the map shown are in places we clearly have no sales coverage - I'd like to say hello to our users on the Falkland Islands, thank you for choosing Solaris :)
What's the value of all that adoption? Like the value of search, shopping, or opening a bank account, there's no instantaneous value beyond the fact you've chosen to invest your time and energy in our ecosystem, and not our competition's. At global scale, that makes us an enormously tough competitor for proprietary companies, or those without true innovation. For example, to get a sense for what our proprietary storage competitors are facing everywhere around the globe, Google the phrase, "love ZFS".
But as with all free business models, the real value arises in what comes after free - and that's my teaser to get you to read the next blog entry, focused on our Commercial Innovations.
Thanks, again, for reading, watching and commenting.
---------------------------------
* as I often say to groups of CIO's, "which one of you gave permission to your employees to search on Google?" No one ever raises their hand :)
And to my readers/viewers for whom English isn't your first language... I'm doing my best to talk more slowly. I will redouble those efforts in the next video... thank you for watching!
As of late this evening, Sun will have shipped its 100,000,000th JavaFX runtime. Congratulations, folks! From a standing start in early December last year, JavaFX's download rate makes it the fastest growing RIA platform on the market - demonstrating the fastest adoption of any product Sun has ever shipped.

Why such a fast uptake? The Java platform continues to provide the world's most complete open source platform for a rich internet - supported by the world's largest developer community. JavaFX allows Sun to reach beyond our traditional base to creative professionals and non-coders working with audio, video and high performance graphics. And most importantly - JavaFX allows content owners to bypass potentially hostile browsers, to install applications directly on user desktops and phones. You'll see that phenomenon heat up in 2009, accelerated by the emergence of "AppStores" on every device connected to the internet.
What's our view of the overall marketplace? Here are a few thoughts.
First, freely distributed, open source software will continue to create enormous revenue opportunities for those that understand the underlying business model - as an example, the Java business for Sun, last quarter, delivered more than $67m in billings, up nearly 50% year over year. On an annualized basis, that means the Java client business (as distinct from the Java server business) is now a multi-hundred million dollar business, opening doors for Sun, and the Java community, across the planet. All built on freely available runtimes and source code. Free as in beer, free as in speech, and free as in market.
Second, devices are becoming functionally equivalent - what you can do with Flash is comparable to Silverlight, and again comparable to JavaFX. We each have our specialty, but over the long haul, my view is adoption rates and business models will be a greater driver of success than the technologies themselves. Why? Because if you're Amazon building the extraordinary Kindle 2, it matters that Sun won't put its business model between you and your customers - you want the technology you select to enable your business, not your supplier's, while enabling access to the world's largest developer community. (That said, must you use JavaFX or Flash or Silverlight to be a part of the rich internet future? Well, no - Apple used Objective-C for the iPhone, after all, completely discrediting the purist notion that if the app isn't written with a web scripting language, it isn't fashion forward).
Finally, the consumer electronics market is going to be infinitely more vibrant and competitive than the relatively stagnant personal computer market. Having just seen a host of new Java devices, from automobile dashboards and BluRay DVD players, to set top boxes, picture frames, VOIP phones and new consumer electronics... the economy might be cooling down, but the RIA market is definitely heating up.
The Java platform is only growing in importance and value, across billions of devices. At Sun, we're planning on maintaining Java's ubiquity as the number one runtime environment, backed by the world's most price performant datacenter infrastructure, all powered by Sun's cloud. After all, the network is the computer.
So again, congratulations to the team - and the Java community! Now, on to the next 100,000,000! (For those interested, download JavaFX SDK here.)
We're approaching the end of our fiscal year, and given all the swirl in the economy, I thought it worthwhile to restate where Sun's headed as a company, to let customers, partners, employees and investors see and understand where we're headed. Clarity's always useful, doubly so in times of uncertainty.
Let me start by joining the chorus of those worried about the global economy. I am routinely talking to customers now partially owned by governments, whose share prices have declined 95% or more, whose balance sheets and basic business models are under extraordinary duress. Like every business, our health is a derivative of our customers', and to that end, we've got our challenges - sure, innovation loves a crisis, but only after customers have stepped out from under their desks.
The glass isn't only half empty. I'm also seeing customers who've never had it better, from media startups and telecommunications firms, to government agencies flush with new funding - but they're certainly a cheerful minority.
Sun is privileged to have an exceptionally strong balance sheet, over $3 billion in cash, and a nearly two decade history of generating positive cash flow. We've also got a set of technologies and people that continue to play an ever more vital role in the economy. Sun's products help companies grow and help them consolidate, and they help governments stimulate the economy, as well. From building bridges to automating health care, government stimulus will undoubtedly drive technology investment, and we're well positioned to participate globally.
Which is all to say, I'm neither worried about the role information technology will play in the economy, nor am I worried about the relevance of Sun's offerings. I'm not worried about the future, I'm focused on its arrival date.
So I'm going to divide my comments on Sun's future into three or four blog entries, of which this is the first. You're going to see an accelerating series of announcements over the coming year, from amplifying our open source storage offerings, to building out an equivalent portfolio of products in the networking space; from the addition of new and potentially surprising Solaris and MySQL OEM's, to our newest cloud offerings and startup programs. I want to put all this in context, to be as clear as possible about our priorities and market approach, and help everyone understand both the parts and the sum of the parts.
Let's get on with it.
In my view, we have a very simple business - when I talk about Sun, I talk about us needing to do "only three things."
1. Recruit every developer on earth to use our software or services.
This is a strategic activity, not a financial one, so don't look for revenue here. I'll devote an entire entry to understanding the motivations and mechanisms driving technology adoption, and to discussing the varied audiences we target. As the head of developer technologies from a very large customer said to me last week over dinner, "I haven't visited Sun in five years, but all of a sudden you seem to matter to my developers." I'll help parse that statement in my next entry.
2. Deliver the world's most compelling commercial offerings - focused primarily, but not exclusively, on deployers of the technologies whose adoption we're driving.
Our software and service products target those that find free to be a more expensive alternative than commercially supported, for whom the cost of downtime exceeds the price of a commercial license. That's a small fraction of the planet, but it's a lucrative one. On the systems side of the house, our products reach across rack and blade servers, storage and networking systems - basically, everything to power the cloud.
I'll talk about the reliance this business has on developers to drive differentiation, and gross margin dollars, and the competitive advantage such reliance creates as we broaden our market offerings into storage and networking.
3. Execute the world's most effective selling/service connection between 1. and 2.
I spend a lot of time talking publicly about the first two points, and very little talking about this last one - in part, because it's been a work in progress, and because the scale of our sales/services channel has been one of our biggest strategic challenges.
But the ordering matters - our first financial priority is to generate free cash flow; our first strategic priority is to grow our available market. When they're in sync, as I believe we are in our Open Storage business right now, you have to beat us in the free software community and then again in front of paying customers. That's a tough combination, especially if you're a proprietary storage vendor that pretends to like free software, so long as it doesn't compete with your products.
As you know, simplicity takes a lot of engineering, so it's easy to say "just three things," but I'm not in any way suggesting these tasks are easily accomplished. But our intent is to create, promote, and commercialize the highest quality network innovations. Innovations that captivate developers, and deployers.
To understand Sun, you have to understand both, you have to see what drives our financial performance, as well as read our financial statements. Absent both perspectives, you'll miss the bigger picture, the bigger threat, or the bigger opportunity.
With this as a backdrop, you should expect me to focus on the points enumerated above in the next few blogs entries. Focusing on today's market, and - independent of the economic slowdown - on tomorrow's.
Thanks for reading.
(YouTube version of video here)