<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: What&#8217;s wrong with Apple</title>
	<atom:link href="http://www.jidesoft.com/blog/2009/06/16/whats-wrong-with-apple/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jidesoft.com/blog/2009/06/16/whats-wrong-with-apple/</link>
	<description>Love being a Swing developer</description>
	<lastBuildDate>Thu, 18 Jun 2009 17:40:59 -0700</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: David Qiao</title>
		<link>http://www.jidesoft.com/blog/2009/06/16/whats-wrong-with-apple/comment-page-1/#comment-7596</link>
		<dc:creator>David Qiao</dc:creator>
		<pubDate>Thu, 18 Jun 2009 17:40:59 +0000</pubDate>
		<guid isPermaLink="false">http://www.jidesoft.com/blog/?p=73#comment-7596</guid>
		<description>Now all classes are under com.apple.laf. What does it mean? None of L&amp;F related code are public? The only way to do the feature we want to do is to use a handful of properties? That&#039;s just not possible. After all, what is the criteria of a &quot;public API&quot;? 

As a matter of fact, I already asked some specific questions on the mailing list to make component vendor like us easier to do certai things. And the answer is no, they are not interesting supporting it. Saying that, I do understand why they don&#039;t want to support. The more public APIs, the more effort to support them later. We are in the same position as we are also component provider.

Regarding Osvaldo&#039;s idea to use wrapper, sometimes it is just not possible. For example, we have to extend AquaTableHeaderUI to support column grouping feature. Right now we still extend the one in apple.laf so that the code works on both old and new Apple JDK because the old one is just deprecated. When Apple removes all classes from apple.laf, our code will break again. I don&#039;t really know how to use reflection or wrapper to workaround this potential issue. I guess we will just have to face the consequence.</description>
		<content:encoded><![CDATA[<p>Now all classes are under com.apple.laf. What does it mean? None of L&#038;F related code are public? The only way to do the feature we want to do is to use a handful of properties? That&#8217;s just not possible. After all, what is the criteria of a &#8220;public API&#8221;? </p>
<p>As a matter of fact, I already asked some specific questions on the mailing list to make component vendor like us easier to do certai things. And the answer is no, they are not interesting supporting it. Saying that, I do understand why they don&#8217;t want to support. The more public APIs, the more effort to support them later. We are in the same position as we are also component provider.</p>
<p>Regarding Osvaldo&#8217;s idea to use wrapper, sometimes it is just not possible. For example, we have to extend AquaTableHeaderUI to support column grouping feature. Right now we still extend the one in apple.laf so that the code works on both old and new Apple JDK because the old one is just deprecated. When Apple removes all classes from apple.laf, our code will break again. I don&#8217;t really know how to use reflection or wrapper to workaround this potential issue. I guess we will just have to face the consequence.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: William Woody</title>
		<link>http://www.jidesoft.com/blog/2009/06/16/whats-wrong-with-apple/comment-page-1/#comment-7594</link>
		<dc:creator>William Woody</dc:creator>
		<pubDate>Thu, 18 Jun 2009 16:58:44 +0000</pubDate>
		<guid isPermaLink="false">http://www.jidesoft.com/blog/?p=73#comment-7594</guid>
		<description>Apple noted in the release of 10.5 (back in October of 2007) that &lt;i&gt;all references to apple.laf.* are deprecated.&lt;/i&gt; (&lt;a href=&quot;http://developer.apple.com/releasenotes/Java/JavaLeopardRN/ResolvedIssues/ResolvedIssues.html&quot; rel=&quot;nofollow&quot;&gt;Source, search for &quot;4907470&quot; which is the Radar bug referring to this change&lt;/a&gt;) Thus, it was not (nor, to the best of my knowledge was ever considered) a public API.

As they noted, if there is functionality that you are not able to achieve in Java using the standard Swing UI (along with &lt;a href=&quot;http://developer.apple.com/documentation/Java/Reference/Java_PropertiesRef/Articles/JavaSystemProperties.html&quot; rel=&quot;nofollow&quot;&gt;some random property settings&lt;/a&gt; sprinkled through the code), you should file a bug at http://bugreport.apple.com, or you can also join the Java-dev mailing list at http://lists.apple.com.</description>
		<content:encoded><![CDATA[<p>Apple noted in the release of 10.5 (back in October of 2007) that <i>all references to apple.laf.* are deprecated.</i> (<a href="http://developer.apple.com/releasenotes/Java/JavaLeopardRN/ResolvedIssues/ResolvedIssues.html" rel="nofollow">Source, search for &#8220;4907470&#8243; which is the Radar bug referring to this change</a>) Thus, it was not (nor, to the best of my knowledge was ever considered) a public API.</p>
<p>As they noted, if there is functionality that you are not able to achieve in Java using the standard Swing UI (along with <a href="http://developer.apple.com/documentation/Java/Reference/Java_PropertiesRef/Articles/JavaSystemProperties.html" rel="nofollow">some random property settings</a> sprinkled through the code), you should file a bug at <a href="http://bugreport.apple.com" rel="nofollow">http://bugreport.apple.com</a>, or you can also join the Java-dev mailing list at <a href="http://lists.apple.com." rel="nofollow">http://lists.apple.com.</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Fabrizio Giudici</title>
		<link>http://www.jidesoft.com/blog/2009/06/16/whats-wrong-with-apple/comment-page-1/#comment-7573</link>
		<dc:creator>Fabrizio Giudici</dc:creator>
		<pubDate>Thu, 18 Jun 2009 07:21:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.jidesoft.com/blog/?p=73#comment-7573</guid>
		<description>I&#039;m sort of mid way. Osvaldo and Romain are right, you should expect troubles when you depend on private stuff. OTOH I perfectly understand that people working on L&amp;F can be forced with tweaking with internals. I know that I&#039;m depending on a couple of internal APIs of the NetBeans Platform and I&#039;m surprised that they are still working after two years and several major releases. I do expect sooner or later they will break.

But there is a specific problem with Apple. Hell, if you get the update, you loose the previous runtime (in contrast with Windows and Linux, where several runtimes can co-exist). So, troubles do happen automatically and you must react by the hour. The second problem is that everything happens without any preliminary warning. I suppose that the apple.laf trouble experienced by JIDE was not visible in the early access Apple released some time ago. In my case, I know in advance what&#039;s happening to the various APIs of NetBeans since the work is done in the open, so I can prepare myself in time.</description>
		<content:encoded><![CDATA[<p>I&#8217;m sort of mid way. Osvaldo and Romain are right, you should expect troubles when you depend on private stuff. OTOH I perfectly understand that people working on L&amp;F can be forced with tweaking with internals. I know that I&#8217;m depending on a couple of internal APIs of the NetBeans Platform and I&#8217;m surprised that they are still working after two years and several major releases. I do expect sooner or later they will break.</p>
<p>But there is a specific problem with Apple. Hell, if you get the update, you loose the previous runtime (in contrast with Windows and Linux, where several runtimes can co-exist). So, troubles do happen automatically and you must react by the hour. The second problem is that everything happens without any preliminary warning. I suppose that the apple.laf trouble experienced by JIDE was not visible in the early access Apple released some time ago. In my case, I know in advance what&#8217;s happening to the various APIs of NetBeans since the work is done in the open, so I can prepare myself in time.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David Qiao</title>
		<link>http://www.jidesoft.com/blog/2009/06/16/whats-wrong-with-apple/comment-page-1/#comment-7569</link>
		<dc:creator>David Qiao</dc:creator>
		<pubDate>Thu, 18 Jun 2009 06:04:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.jidesoft.com/blog/?p=73#comment-7569</guid>
		<description>AquaLookAndFeel was under apple.laf too. I would consider AquaLookAndFeel being a public API, right? The problem is everything was under the same package. How people know which one is public and which is not (even with public qualifier). Sun JDK is better because they have separate packages.

I guess my point was, even we are using non-public, non-documented API, it is not that we are not aware of what are using but because we had to. We either don&#039;t use them and leave out the features only Mac, or we use them to make our users happy but face potential future broken code. Of course we will choose the latter. It is the same deal supporting Sun JDK except Sun JDK is a lot opener than Mac&#039;s. 

Anyway, good news is that we had a urgent patch release yesterday with the help from JIDE users. JIDE seems running just fine on both old JDK and the new JDK. I am happy :-)</description>
		<content:encoded><![CDATA[<p>AquaLookAndFeel was under apple.laf too. I would consider AquaLookAndFeel being a public API, right? The problem is everything was under the same package. How people know which one is public and which is not (even with public qualifier). Sun JDK is better because they have separate packages.</p>
<p>I guess my point was, even we are using non-public, non-documented API, it is not that we are not aware of what are using but because we had to. We either don&#8217;t use them and leave out the features only Mac, or we use them to make our users happy but face potential future broken code. Of course we will choose the latter. It is the same deal supporting Sun JDK except Sun JDK is a lot opener than Mac&#8217;s. </p>
<p>Anyway, good news is that we had a urgent patch release yesterday with the help from JIDE users. JIDE seems running just fine on both old JDK and the new JDK. I am happy <img src='http://www.jidesoft.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Romain Guy</title>
		<link>http://www.jidesoft.com/blog/2009/06/16/whats-wrong-with-apple/comment-page-1/#comment-7568</link>
		<dc:creator>Romain Guy</dc:creator>
		<pubDate>Thu, 18 Jun 2009 05:51:12 +0000</pubDate>
		<guid isPermaLink="false">http://www.jidesoft.com/blog/?p=73#comment-7568</guid>
		<description>I understand your frustration but was the appl.laf package ever considered a public API? I would be very surprised if it ever was.</description>
		<content:encoded><![CDATA[<p>I understand your frustration but was the appl.laf package ever considered a public API? I would be very surprised if it ever was.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Osvaldo Pinali Doederlein</title>
		<link>http://www.jidesoft.com/blog/2009/06/16/whats-wrong-with-apple/comment-page-1/#comment-7516</link>
		<dc:creator>Osvaldo Pinali Doederlein</dc:creator>
		<pubDate>Tue, 16 Jun 2009 18:01:50 +0000</pubDate>
		<guid isPermaLink="false">http://www.jidesoft.com/blog/?p=73#comment-7516</guid>
		<description>Applications should not depend on non-standard, internal packages. I&#039;m not a fan of Apple, but they didn&#039;t do anything &quot;weird&quot;, they owe no explanation to anyone. In other words... it&#039;s your fault.

Now, I understand your problem but if you really want to take advantage of private APIs, you must write a wrapper around it, exposing a stable interface to the application. So when the vendor makes incompatible changes, you just implement a new wrapper, and have a smart factory method that detects which version is available in the JRE and returns the correct wrapper - or even a dummy wrapper if it doesn&#039;t detect any of the supported versions, so you have the extra benefit of not needing different distributions for Mac and other platforms. This dummy wrapper is also important as a workaround in the hiatus after Apple releases a new version and users update the JRE, but before you provide an updated app and users install that update.</description>
		<content:encoded><![CDATA[<p>Applications should not depend on non-standard, internal packages. I&#8217;m not a fan of Apple, but they didn&#8217;t do anything &#8220;weird&#8221;, they owe no explanation to anyone. In other words&#8230; it&#8217;s your fault.</p>
<p>Now, I understand your problem but if you really want to take advantage of private APIs, you must write a wrapper around it, exposing a stable interface to the application. So when the vendor makes incompatible changes, you just implement a new wrapper, and have a smart factory method that detects which version is available in the JRE and returns the correct wrapper &#8211; or even a dummy wrapper if it doesn&#8217;t detect any of the supported versions, so you have the extra benefit of not needing different distributions for Mac and other platforms. This dummy wrapper is also important as a workaround in the hiatus after Apple releases a new version and users update the JRE, but before you provide an updated app and users install that update.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
