<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
<title>John O&apos;Conner&apos;s Blog</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/joconner/" />
<modified>2008-05-09T22:07:53Z</modified>
<tagline></tagline>
<id>tag:weblogs.java.net,2008:/blog/joconner/146</id>
<generator url="http://www.movabletype.org/" version="3.01D">Movable Type</generator>
<copyright>Copyright (c) 2008, joconner</copyright>
<entry>
<title>Major themes of JavaOne: REST, Ruby and NetBeans</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/joconner/archive/2008/05/need_a_little_r.html" />
<modified>2008-05-09T22:07:53Z</modified>
<issued>2008-05-09T22:00:04Z</issued>
<id>tag:weblogs.java.net,2008:/blog/joconner/146.9770</id>
<created>2008-05-09T22:00:04Z</created>
<summary type="text/plain">I see themes, three of them, at JavaOne this year: REST, Ruby, and NetBeans</summary>
<author>
<name>joconner</name>

<email>john@joconner.com</email>
</author>
<dc:subject>JavaOne</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/joconner/">
<![CDATA[<p>Hundreds of sessions, thousands of people...and what did I come away with? Lots of t-shirts, plush toys, and more t-shirts. Oh, and 3 main things related to my work: REST, Ruby, and NetBeans.</p>

<p><b>REST</b> -- Want to communicate with web services? You'd better learn something about REST APIs. I can't give a full tutorial here. I hardly know enough myself. But I can give you some info.</p>
<ol>
<li>Give everything an id. That id will become part of a URI. Think of your application in terms of resources and URIs that access them.</li>
<li>Use the standard HTTP vocabulary to act on those resources: GET, POST, PUT, DELETE, and a few others. There's nothing complicated here. GET /customer/1 retrieves infor about customer 1 in the app. POST /customer sends customer information for a new customer. A new id gets generated. PUT /customer/1 updates some information about customer 1. And DELETE /customer/1 removes that object. Simple vocabulary. Use it.</li>
<li>Provide multiple representations of resources. You can use content negotiation or different URIs to retrieve multiple representations of the same data.</li>
<li>Use stateless communication. Avoid sessions whenever possible. Put whatever you need to process a request in the URI.</li>
<li>Finally, use some decent patterns. The <a href="http://wiki.opengarden.org/REST/REST_Patterns/Container_Pattern">container-item pattern </a>is useful. GET /container provides a list of items. POST /container creates a new item in the container. </li>
</ol>

<p>Some of the benefits of a RESTful architecture on the server side: scaleability, cacheable resources, reduced coupling. On the client side: resources are bookmarkable, you can easily test from a standard browser, you get broad programming language support for REST through standard HTTP, and you can get access to multiple formats for the data depending on your client capabilities and content negotiation.</p>

<p><b>Ruby</b> -- Lots of sessions talked about <a href="http://www.ruby-lang.org/en/">Ruby</a> or <a href="http://jruby.codehaus.org/">JRuby</a>. You couldn't escape Ruby. Ruby running on Java, Java from Ruby, Ruby from Java...it's a mixed up, crazy, beautiful combination. And you know the part I <em>really</em> liked. Apparently, once you create your application using Ruby (and Rails of course), you don't have to sound the alarms with your IT department by introducing another server to them. Supposedly, and I haven't tried this <em>yet</em>, you can deploy JRuby on Rails applications as WAR files on a standard Java application server. That's impressive.</p>

<p><b>NetBeans 6.1</b> -- I know that you have many IDEs to choose from. And you may have already selected. But just do me a favor, do yourself a favor...take a new look at NetBeans. Version 6.1 has all-new support for JavaScript, excellent Ruby integration and editing, and access to databases and several application servers in a single download. I've been dabbling with Eclipse. I'm working with a team that's considering Eclipse as their new IDE after working with IntelliJ. I can't let them do it. I have to get back to them next week and stop them while they still have time. NetBeans, it's the only tool we're going to need to do our JavaScript and HTML front ends, business logic on the Java EE middle-tier, and even modify, edit, and maintain our MySQL database on the backside. Check out the <a href="http://www.netbeans.org/">latest NetBeans</a> and see what <em>you</em> think. For more information about NetBeans 6.1, including my own more detailed review, check out <a href="http://javaboutique.internet.com/reviews/netbeans61/">NetBeans 6.1: Worth a Try</a>. </p>]]>

</content>
</entry>
<entry>
<title>Creating OpenOffice Extensions</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/joconner/archive/2008/05/creating_openof.html" />
<modified>2008-05-09T18:33:32Z</modified>
<issued>2008-05-09T18:33:23Z</issued>
<id>tag:weblogs.java.net,2008:/blog/joconner/146.9769</id>
<created>2008-05-09T18:33:23Z</created>
<summary type="text/plain">Creating OpenOffice extensions and plugins is simplified with NetBeans wizards.</summary>
<author>
<name>joconner</name>

<email>john@joconner.com</email>
</author>
<dc:subject>JavaOne</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/joconner/">
<![CDATA[<p>One of the great things about many applications these days is their open API for end-user additions or extensions or plug-ins. OpenOffice allows you to add your own functionality to the application as well, and you can create those extensions with Java of course. And tools like NetBeans make this easier than you might suspect by providing wizards to help you get started.</p>

<p>The OpenOffice API is called UNO, and after accessing the OpenOffice APIs from NetBeans or Eclipse or any other development environment, you'll package those plug-ins and extensions as .oxt files. You or your end users will install them by using the OpenOffice extension manager or by just clicking on the extension file.</p>

<p>You might be the one to create the next great OpenOffice extension by integrating your application into one of the most popular open source office suites available. Learn about about OpenOffice and the UNO API by visiting the following resources:</p>

<ul>

<li>The <a href="http://www.openoffice.org/">OpenOffice website</a> to get the office suite.</li>

<li>Learn about the <a href="http://extensions.services.openoffice.org/">extension API</a>.</li>
</ul>]]>

</content>
</entry>
<entry>
<title>Do we rely too much on XP?</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/joconner/archive/2008/05/windows_is_a_bi.html" />
<modified>2008-05-08T09:10:43Z</modified>
<issued>2008-05-08T08:56:24Z</issued>
<id>tag:weblogs.java.net,2008:/blog/joconner/146.9736</id>
<created>2008-05-08T08:56:24Z</created>
<summary type="text/plain">You can create Java apps for a multitude of platforms as long as you&apos;re developing on Windows XP.</summary>
<author>
<name>joconner</name>

<email>john@joconner.com</email>
</author>
<dc:subject>JavaOne</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/joconner/">
<![CDATA[<p>Earlier this year I decided to renew my commitment to learning something about Java ME. I went so far as to get a RIM Blackberry device when I had the opportunity to update my cell phone. Finding a Blackberry oriented session at JavaOne was just bonus material! I was excited to attend the session. I really wanted to learn how to develop apps for this excellent phone.</p>

<p>So I attended the "Developing Java ME Applications for BlackBerry" session yesterday. They have an SDK plugin for Eclipse...and they said that some have even installed the SDK under NetBeans. Great. I can develop Java applications for the BlackBerry using my favorite IDE. Perfect.</p>

<p>What? The Eclipse plugin only works on Windows XP...maybe Vista. Why's that? The BlackBerry session speaker says that the BlackBerry emulator was designed for XP. Won't run on the other platforms that Eclipse and NetBeans run on -- Solaris, Linux, Mac OS X. Sure, you can develop applications using Eclipse running on any OS, but you won't be able to use the emulator. Now why is that? Really, why? So, why use Eclipse as the development tool? Might as well be a Visual Studio plugin.</p>

<p>There's another device with an SDK that works from an Eclipse extension. Those <a href="http://www.sentilla.com/">Sentilla devices</a>, the ones on sale here at JavaOne. Excellent. Again, I can develop a Java application for a very small device with temperature sensors, an accelerometer, and even a radio. Very cool. I can write those Java applications using Eclipse...on Windows XP only because, well hell if I know, but that's what the booth worker says.</p>

<p>By the way, have you noticed the preferred operating system for most of the presentations around JavaOne? It's Windows XP by far. That's my observation anyway. Your mileage may vary.</p>

<p>Why is that? Why is XP the preferred OS? I have an idea, but you won't like it. Linux and Solaris are just too difficult to install and maintain for the typical consumer and even the typical developer. If you know how to tweak a kernel, or compile your own driver, maybe you'll get the mouse pad to work correctly. Maybe you'll get that bluetooth headset or bluetooth mouse to work if you find and edit the right config file. </p>

<p>Before coming to JavaOne, I decided to replace XP on my laptop. I put Ubuntu on it. Seemed like a good idea at the time. The application package installer was easy to use. Installing Java SE 6 and then NetBeans was easy. Ubuntu found my wireless card too. No problem. No problem until yesterday. For some reason, Ubuntu refused to display my desktop taskbar and application menu at the top of the window after I logged in. Strange for sure. Since I'm new to Ubuntu, I didn't know how to debug that. I couldn't recover. </p>

<p>After getting my Open Solaris disk at Community One, I figured I could install Solaris. I did. It's installed. Looks a lot like Ubuntu's desktop by default, very similar. Installing the JDK wasn't as easy. I had to install the JDK from a .sh script. There wasn't any clean, easy graphical installer. I felt a little pathetic at having grown so dependent on the easy installers we have on Windows. Although Open Solaris found my wireless card, I don't think the network tools are as easy to use as on Ubuntu. And the power manager doesn't seem to work. The os sucks the battery down way too fast. And I can't get my bluetooth mouse to work either. If I were a Linux or Unix guru, maybe I'd know the right place to find the correct settings or drivers. </p>

<p>After I return home, I'll definitely replace XP on this laptop. Even if I could get used to the new tools, simple installers, and the idea of compiling my own applications on Linux or Solaris, I can't use the applications I really want right now. After all, I'd really like to use that Eclipse SDK for developing BlackBerry applications. I might also want to try my hand at writing an application for some other cool Java device. Too bad the tools only run on XP.</p>

]]>

</content>
</entry>
<entry>
<title>Modularity in the Java Platform</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/joconner/archive/2008/05/modularity_in_t_1.html" />
<modified>2008-05-07T21:37:47Z</modified>
<issued>2008-05-07T21:37:40Z</issued>
<id>tag:weblogs.java.net,2008:/blog/joconner/146.9735</id>
<created>2008-05-07T21:37:40Z</created>
<summary type="text/plain">Deliverance from Jar hell is available soon.</summary>
<author>
<name>joconner</name>

<email>john@joconner.com</email>
</author>
<dc:subject>JavaOne</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/joconner/">
<![CDATA[<p>JSR 277 is the technical spec for Java Modules, a way to promote the "module" concept in both your own applications and in the Java platform itself. In their JavaOne session this morning, the co-spec leads -- Alex Buckley and Stanley Ho -- clarified that the previous JSR 294 "superpackages" spec has been consumed by this new JSR. JSR 277 includes modularity concepts and features for both development <em>and</em> deployment.</p>

<p>In short, the goals are these:</p>
<ol>
<li>promote a module concept for development</li>
<li>improve the Java platform by modularizing it</li>
<li>deliver us all from Jar hell</li>
<li>support the entire spectrum of Java programs from large enterprise apps, to applets, to desktop apps, to even "penlets" (maybe a reference to the Livescribe pen that's on sale during the conference)
</ol>

<p>Today, Java development is dominated by packages. Although package names are hierarchical, package membership is not. You can't easily share types and members across packages <em>unless</em> the interfaces or class members are <code>public</code>. That's a drag because it's clear that some classes are designed to work together even though they may be in different packages. Putting a <code>public</code> access modifier on members isn't always what you want in that situation, but it's all we currently have.
</p>

<p>Modules in the JSR 277 definition would allow developers to associate classes and resources in different packages so that those classes can access each other more easily. Modules would logically gather those classes -- even if they exist in different packages -- into a common bag or module, providing the ability for those classes to work more directly with each other. In effect, you get yet another access modifier, something like <code>module public</code> or <code>module private</code> that would apply to class members across packages.
</p>

<p>What's the impact of modules on the Java language and VM?</p>
<ol>
<li>First, the word "module" would become a restricted keyword.</li>
<li>The JVM would enforce module-private accessibility</li>
<li>The class file definition would get another attribute that declares module membership.
</ol>

<p>
How about developers? What's this module concept really mean for them? How do developers use it? Not much really changes in how you'll compile or run your applications:</p>
<ol>
<li>Compile your package source just like you've always done: javac does the trick.</li>
<li>You'll package up or gather those classes and packages a bit differently. You'll use the "jam" tool to create JAM files. JAM files are JAva module files that resemble jar files. Think of them as an improved jar format.</li>
<li>Run your applications using <code>java -jam SomeApp.jam</code>. The only difference is a command line option. Oh, and the .jam extension instead of .jar. </li>
</ol>

<p>Developers will be able to annotate classes (and modules) to describe modules versions, membership, dependencies, and other attributes. For example, you might use any of the following:</p>
<pre>
@Version
@MainClass
@Attribute
@ImportModules
@ImportModule
@ImportPolicyClass
@ModuleInitializerClass
@PlatformBinding
@ExportResources
</pre>

<p>Of course, you'll have to check out some of the technical docs and specs for more detailed descriptions of these and other annotations. But the info is out there. See the end of this blog for more information about resources you can use to learn more.
</p>
<p>
JAM files and modules should help deliver you from so-called "JAR hell." JAR hell basically refers to the confusion that developers and applications struggle with when deciding which versions of jar files to use. Yes, jar files can have version numbers, and they usually do. But jar dependencies are difficult to specify, determine, and enforce. And without classloader tricks, you can't use two versions of a JAR file...maybe a new version in one part of your application and an older version in another. Think that's an unreasonable expectation? It's not. Consider the situation you're in with XML parsers, for example. Your app might need one version. But maybe that same app uses a third party library that uses an older version of that same XML parser. Resolving this can be frustrating.
</p>

<p>The new spec resolves some of this. Different classloaders handle each JAM. The modules system makes sure that:</p>
<ol>
<li>JAM definitions and modules resolve properly against other JAM modules with similar names and APIs</li>
<li>JAM instances have their own class loader</li>
</ol>

<p>The JAM specification is still in draft status. The co-spec leads say that the final spec will be available "soon," and I assume that means that implementations are not far behind.
</p>
<p>
To learn more:</p>
<ul>
<li>Attend the upcoming BOF-5032 on Wed night at 8:30 pm</li>
<li>Take a look at the <a href="http://jcp.org/en/jsr/detail?id=277">JSR 277 specification site</a>.</li>
<li>Check out <a href="http://weblogs.java.net/blog/stanleyh/">Stanley Ho's blog</a>, where he writes about Java modules frequently</li>
<li><a href="http://www.osgi.org/blog/2006/10/jsr-277-review.html">OSGi</a> involvment</li>

</ul>
]]>

</content>
</entry>
<entry>
<title>Reviewing NetBeans 6.1</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/joconner/archive/2008/05/reviewing_netbe.html" />
<modified>2008-05-06T23:17:08Z</modified>
<issued>2008-05-06T23:17:01Z</issued>
<id>tag:weblogs.java.net,2008:/blog/joconner/146.9712</id>
<created>2008-05-06T23:17:01Z</created>
<summary type="text/plain">The NetBeans IDE can be compared to a Swiss Army knife; it offers many different tools, and you&apos;re almost guaranteed to find something you like or soon need.</summary>
<author>
<name>joconner</name>

<email>john@joconner.com</email>
</author>
<dc:subject>Community: NetBeans</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/joconner/">
<![CDATA[<p>The NetBeans community approved and released NetBeans 6.1 last week. That's right before JavaOne 2008. That's convenient! And of course, some of the JavaOne demos have NB 6.1 running in the background. If you're at JavaOne, you can't escape it. <a href="http://www.netbeans.org/">NetBeans 6.1</a> is here.</p>

<p>The latest NetBeans 6.1 has improved in these areas:</p>
<ul>
<li>JavaScript support</li>
<li>Performance boosts</li>
<li>MySQL support</li>
<li>CRUD support for quick creation of database applications</li>
<li>Spring framework support</li>
<li>Ruby and JRuby support</li>
<li>Mercurial support</li>
</ul>

<p>You can find out more about this latest release by checking out my online review: <a href="http://javaboutique.internet.com/reviews/netbeans61/">NetBeans 6.1: Worth a Try</a>. 
]]>

</content>
</entry>
<entry>
<title>Free, open source Linux is for hippies</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/joconner/archive/2008/05/free_open_sourc.html" />
<modified>2008-05-06T06:07:46Z</modified>
<issued>2008-05-06T06:05:23Z</issued>
<id>tag:weblogs.java.net,2008:/blog/joconner/146.9692</id>
<created>2008-05-06T06:05:23Z</created>
<summary type="text/plain">Open source Linux is for hippies?</summary>
<author>
<name>joconner</name>

<email>john@joconner.com</email>
</author>
<dc:subject>JavaOne</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/joconner/">
<![CDATA[<p>CommunityOne is the conference at Moscone Center just prior to the JavaOne conference, which starts in earnest on Tuesday May 6 2008. I'm here for JavaOne but couldn't resist dropping in on CommunityOne.</p>

<p>CommunityOne's schedule includes several tracks today, including topics on web applications, scripting languages, Open Solaris, projects and strategy, and tools. NetBeans has its own track too.</p>

<p>Frankly, I don't think the CommunityOne sessions were that interesting. The speakers obviously have other day jobs, and well, that's a good thing. However, the interesting parts of a conference like CommunityOne or JavaOne are <em>not</em> always in a formal session. The "community" is so diverse that I found myself drawn to the hallways and side tables just to eavesdrop on conversations. Some conversations were serious, others were fun, and one of my own was just...well, I'm still confused. It went something like this:/p>

<p><b>John (that's me)</b>: Hi, I'm John. I'm surprised how many people are here before JavaOne, for this conference before the <em>big</em> conference.</p>

<p><b>Other attendee</b>: Oh, hi. I'm Dag.</p>

<p><b>John</b>: Dad? </p>

<p><b>Other attendee</b>: No, Dag. D-a-g.</p>

<p><b>John</b>: That's an interesting name. I'm sure you have to spell it often.</p>

<p><b>Dag</b>: Yeah, all the time. But anyway, yes, there are a lot of people. The open source communities are huge. In fact, I'm here just for CommunityOne.</p>

<p><b>John</b>: Really, you came just for CommunityOne? Amazing. I sort of suspected that CommunityOne was just the thing to do if you were in town early.</p>

<p><b>Dag</b>: No way, the open source community is big, and supporters turn out in huge numbers. In fact, this year's open source day is 50% larger than last year. I think this is the turning point. Next year will be even bigger and better.</p>

<p><b>John</b>: So, what open source projects do you work on?</p>

<p><b>Dag</b>: Nothing. I'm a consumer. Our shop has used MySQL for years, and we've been using Linux too.</p>

<p><b>John</b>: Linux, huh. I'm trying Ubuntu on my laptop this week. I expected to see more Solaris CDs...you know, Sun is a big influence here. I'm surprised a cd wasn't in my tote bag.</p>

<p><b>Dag</b>: Although we've been using Linux, our management is pushing us away. Their impression of Linux is just too much for them. We're moving to Solaris x86 soon.</p>

<p><b>John</b>: What impression?</p>

<p><b>Dag</b>: Well, open source, Linux in general. It's just a hippy, fringe thing, you know. That's what they think anyway.</p>

<p><b>John</b>: Hmm...I guess I didn't know about that.</p>

<p><b>Dag</b>: Yeah, the managers also say, "Free, open source...you get what you pay for." So they're trying to push us away from Linux to Solaris. That's open now too, but the impression is different. They'll go for Solaris, but they're uncomfortable with Linux.</p>

<p><b>John</b>: Solaris is open-source, but the impression is different?</p>

<p><b>Dag</b>: Absolutely. Sun's a big company, with plenty of support options, big name, big brand. The managers trust that.</p>

<p><b>John</b>: They don't trust names like Red Hat?</p>

<p><b>Dag</b>: Eh, not so much. Hey, and you know what? You can get better, cheaper service support from Sun now than you can from Red Hat. Sun support for Solaris is cheaper than Red Hat support for Linux.</p>

<p><b>John</b>: I had no idea. So, you'll move to Solaris soon for the support?</p>

<p><b>Dag</b>: For the cheaper support, sure. <em>And</em> the name. The managers trust the name. Sun. Solaris. </p>

<p><b>John</b>: Brand recognition, yes, that's important. Still, I'm surprised that you can get Solaris support for less than Red Hat support. I haven't researched it myself, but I'll take your word on it.</p>

<p><b>Dag</b>: Yeah, support is very important. We can't just get something for free. The managers don't trust that. So, we have to pay for it somehow. So we'll get the support contracts; we'll write out those checks to Sun for support even if we don't pay for the software.</p>

<p><b>John</b>: So, they don't like open source because that also means free sometimes, as in no charge. But they'll tolerate it from someone like Sun because they get support from a known-brand company.</p>

<p><b>Dag</b>: Right. That's it. Hey, gotta go to that Project Darkstar session. I didn't tell the boss about that, but I want to check it out anyway.</p>

<p><b>John</b>: No problem. Enjoy yourself. Later!</p>

<p>Hey, I didn't make this up. That was a real conversation. Strange but interesting, no? I still don't know quite what to make of it. And that's much of the appeal of CommunityOne and JavaOne, aside from the actual technical content. The opinions, the people, the conversations...always interesting even if you don't personally agree.</p>

<p>Make sure you help create some of those conversations this week. Meet someone new. Don't hang out with your typical group. Get away from your everyday colleagues. Learn something new. Hear something different. That's the best way to get the most from JavaOne!</p>

<p>P.S. I <em>did</em> eventually find a Solaris x86 cd. It was in the CommunityOne tote bag that I received when I picked up my free t-shirt. I want to try it but frankly I'm hesitant. I've never had much luck with it when installing to a laptop. If you've put it on a Dell Latitude D620 before, let me know...I <em>might</em> try it this year. But don't expect me to buy a support contract.</p>]]>

</content>
</entry>
<entry>
<title>Top 10 Desktop Sessions at JavaOne 2008</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/joconner/archive/2008/04/top_10_desktop_1.html" />
<modified>2008-04-24T16:32:44Z</modified>
<issued>2008-04-23T23:58:52Z</issued>
<id>tag:weblogs.java.net,2008:/blog/joconner/146.9596</id>
<created>2008-04-23T23:58:52Z</created>
<summary type="text/plain">Here are the top 10, must-see Java Desktop sessions at JavaOne 2008, the Desktop sessions that will influence you the most in the coming year.</summary>
<author>
<name>joconner</name>

<email>john@joconner.com</email>
</author>
<dc:subject>JavaOne</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/joconner/">
<![CDATA[<p>
<img src="http://weblogs.java.net/blog/joconner/waynetop10.jpg" width="120" height="120" alt="" border="0" style="float:left;margin:5px">
I've been doing a top 10 list for a couple years for JavaOne technology tracks. No need to stop now. So let's jump right to it. If you're interested in what <em>I</em> think are the top 10, must-see Java Desktop sessions at JavaOne 2008, the <b>Desktop</b> sessions that will influence you the most in the coming year, check them out and make sure you use the online <a href="http://www.cplan.com/javaone2008/schedulebuilder">Schedule Builder</a> to sign up. Scheduled times and room locations can change, so check the catalog often.
</p> 

<p>My list is below, numbered but in not in any particular preference order:
</p>
<ol style="clear:both">
<li><p style="font-weight:bold">Desktop Track Overview & New Features in the upcoming Java 6u10 Platform, Session TS-6649<p>
<p>Java 6u10 will have features that make deploying Java apps even easier. You'll learn about the modular kernel for smaller JRE downloads, the deployment toolkit, "Patch in Place" technology for faster and smaller JRE updates, the "QuickStart Service" that improves JRE startup time, improved graphics performance (for Windows only...sigh), and the new Nimbus pluggable look-and-feel.</p></li>

<li><p style="font-weight:bold">Using JavaFX Script To Build Swing Applications, TS-6609</p>
<p>In my opinion, JavaFX Script was announced a little too early last year at JavaOne 2007. But the technology has matured, at least a bit more, and I think there's great potential value in this alternate tool for creating Swing applications. This presentation shows examples of how to use the language to declaratively create your UI, create custom components, animate your UI, and bind visual components to their models.
</p>
</li>

<li>
<p style="font-weight:bold">Deep Inside JSR 296, the Swing Application Framework, TS-6605</p>
<p>After learning about the Swing Application Framework, you'll probably change the way you create Swing apps. The session teaches you about views, tasks, resource injection, and actions. Plenty of examples demonstrate how to put an app together using the framework.
</p>
</li>

<li>
<p style="font-weight:bold">Extending Swing: Creating Your Own Components, TS-4982</p>
<p>The set of existing Swing components are great, but what do you do when you want to create really rich clients? You'll have to create custom Swing components. It's really not so hard. Attend this session to find out how.</p>
</li>

<li>
<p style="font-weight:bold">Nimbus: The New Face of Swing, Session ID TS-6096</p>
<p>Nimbus is the next cross-platform look-and-feel for the Java desktop apps. The look and feel is also skinnable to allow your own twist on how things should look. This session shows you how to use Nimbus to create in your Swing applications and then shows you how to extend Nimbus to create your own custom look-and-feel. 
</p>
</li>

<li>
<p style="font-weight:bold">Extreme GUI Makeover: In the Real World, TS-6656</p>
<p>In this session, you'll see the presenters transform a plain-looking application into a "stunning beauty." You'll also learn more about JavaFX Script and the new scene graph project.</p>
</li>

<li>
<p style="font-weight:bold">Distributed Client-Server Persistence with the Java Persistence API, TS-5969</p>
<p>Sometimes you might think that those EE guys get all the best new APIs and technologies. Not true! Desktop apps can use and benefit from the Java Persistence API (JPA) too. This session shows you how to use the JPA in Swing applications. Hey, didn't I already <a href="http://java.sun.com/developer/technicalArticles/J2SE/Desktop/persistenceapi/">write that article</a>? But I didn't cover everything you should know. In this session, you'll learn about storing data locally and remotely, syncing with remote applications, and enabling "offline" modes that synchronize data on reconnects to the network. This is great technology that you'll want to adopt into your desktop apps.
</p>
</li>

<li>
<p style="font-weight:bold">Designing Graphical Model-Driven Applications: Lego MindStorm, TS-6298</p>
<p>Although this definitely also fits into the "Cool Stuff" category, I think there's something interesting and maybe even substantially different here for desktop application design. No doubt, there's some fun here too. Lego MindStorms! Come on, what's more fun than that? This session introduces model-driven design (MDD) as a programming paradigm for creating, drawing, and interacting with scene graphs for your graphical apps.</p>
</li>

<li>
<p style="font-weight:bold">The NetBeans Platform Compared to the Eclipse Rich Client Platform, TS-4895</p>
<p>This isn't a session about the NetBeans or Eclipse IDEs. This is a session about how you can use their rich client platform APIs to create your own apps, saving you lots of time. Learn about component models, UI toolkits, actions, commands, help facilities, and dynamic updates for your own rich client desktop applications. Why create all that functionality yourself when you can get it for free?</p>
</li>

<li>
<p style="font-weight:bold">Beans Binding: Good for the Heart, TS-6657</p>
<p>OK, someone got a little carried away with the session title, but let's look beyond that. I've looked at this API, and I think desktop developers should take notice. The "Beans Binding API" is the friendlier name for JSR 295, which simplifies how you bind beans or tie them together so that their data is synchronized. This session updates you on the project, which has been surprisingly quiet lately, and demonstrates how to use the API.</p>
</li>

</ol>

<p>That's it! Join me for a few of these sessions this year. JavaOne is May 6-9 @ the Moscone Center, San Francisco, CA. And if you haven't registered yet, you'd better hurry.</p>
]]>

</content>
</entry>
<entry>
<title>Encoding URIs and their components</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/joconner/archive/2008/04/encoding_uris_a.html" />
<modified>2008-04-23T15:19:16Z</modified>
<issued>2008-04-23T07:48:44Z</issued>
<id>tag:weblogs.java.net,2008:/blog/joconner/146.9592</id>
<created>2008-04-23T07:48:44Z</created>
<summary type="text/plain">The JavaScript layer has its own lossy character conversion points. One of those is the escape function.</summary>
<author>
<name>joconner</name>

<email>john@joconner.com</email>
</author>
<dc:subject>Programming</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/joconner/">
<![CDATA[<p>
<img src="http://weblogs.java.net/blog/joconner/js.gif" title="" width="60" height="60" border="0" style="float:left;margin-right:5px">
As you pass data from the browser to the application server to the database, opportunities for data loss lurk. I highlighted some of those <a href="http://weblogs.java.net/blog/joconner/archive/2008/04/character_conve_1.html">conversion points</a> earlier, but I neglected a browser issue. The JavaScript layer has its own lossy points of interest. One of those points is the <code>escape</code> function.
</p>

<p>
The <code>escape</code> function "encodes" a string by replacing non-ASCII letters and some other punctuation symbols with escape sequences of the form %XX,  where X is a hex digit. Unicode characters from \u0080 through \u00FF are converted to the %XX form as well. Unicode characters in higher ranges take the form %uXXXX. So, as an example, the name José will take the form <code>Jos%E9</code>. Go ahead, give it a try below:
</p>
<p>
    <input type="text" size="20" id="text1"/>
    <input type="button" value="Escape" onclick="escapeText()"/>

<script language="JavaScript">
    function escapeText() {
        var text = escape(document.getElementById("text1").value);
        alert(text);
    }
</script>
</p>

<p>
The problem with this is that the escape mechanism is broken if you want to use UTF-8 as your document encoding. If you were dynamically composing URL strings with parameters, those parameters will definitely not be escaped correctly. Instead of <code>Jos%E9</code> that URI component should really be <code>Jos%C3%A9</code>.
</p>

<p>
Fortunately, JavaScript has resolved the problem, but the solution means you'll have to use another function. The <code>escape</code> function is deprecated in ECMAScript v 3. Instead, you should use the function <code>encodeURI</code> or <code>encodeURIComponent</code>. These functions convert their argument to the UTF-8 encoding and then %XX encode all the non-ASCII characters. Two forms of the function exist so that you have greater control over whether characters like "?" and "&" are encoded. You'll need to check your documentation for details. You can experiment with the <code>encodeURIComponent</code> function here:
</p>

<p>
    <input type="text" size="20" id="text2"/>
    <input type="button" value="EncodeURIComponent" onclick="encodeText()"/>

<script language="JavaScript">
    function encodeText() {
        var text = encodeURIComponent(document.getElementById("text2").value);
        alert(text);
    }
</script>
</p>

<p>
What's this mean for you? Maybe nothing if you're hopelessly attached to ISO-8859-1. However, if you're trying to reach a global market with your product, chances are very good that you've decided to use UTF-8 for your character set encoding. That's an excellent choice, but you'll have to manage the conversion points. In a nutshell, that simply means that you'll need to use UTF-8 from front to back consistently. 
</p>

<p>
Part of managing those conversion points is consistently providing well-formed URIs to your application server. If you use JavaScript to manipulate data or to create dynamic URIs in your application, make sure you toss aside that deprecated <code>escape</code> function. Take a look at <code>encodeURI</code> and <code>encodeURIComponent</code> instead.
</p>]]>

</content>
</entry>
<entry>
<title>Character Conversion points</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/joconner/archive/2008/04/character_conve_1.html" />
<modified>2008-04-13T17:07:12Z</modified>
<issued>2008-04-13T17:07:12Z</issued>
<id>tag:weblogs.java.net,2008:/blog/joconner/146.9525</id>
<created>2008-04-13T17:07:12Z</created>
<summary type="text/plain">You&apos;d think this sort of problem would be resolved by now, but it&apos;s not. It&apos;s still almost impossible to quickly and easily migrate an application from the too common default Latin-1 to UTF-8 character set encoding.</summary>
<author>
<name>joconner</name>

<email>john@joconner.com</email>
</author>
<dc:subject>Programming</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/joconner/">
<![CDATA[<p><img src="http://www.unicode.org/webscripts/logo60s2.gif" align="left" title="" border="0">You'd think this sort of problem would be resolved by now, but it's not. It's still almost impossible to quickly and easily migrate an application from the too common default Latin-1 to UTF-8 character set encoding. The problem isn't that UTF-8 can't handle the conversion. No, that's definitely not it. UTF-8 can represent any Latin-1 character and much, much more. The problem is that the Latin-1 charset is so deeply ingrained as the default in every software interface that you just have so many faulty conversion points. A conversion point is a handoff point between one software component and another, a place where character encodings matter and where faulty conversions are way too common.</p>

<p>Here's an example: a simple web application that stores names and addresses in a database. Chances are, if you haven't done anything explicit to change this, the web page itself will have no charset encoding associated with it. And neither will your application server. And neither will your database. And without explicit settings, many applications use Latin-1 as the default character set. So, you'll be able to enter, store, retrieve, and display common Western European names, but you won't be able to handle Russian or Japanese or Chinese or, well, you get the idea. </p>

<p>So let's imagine you decide to convert from Latin-1 to UTF-8 so that you open up your application to the rest of the world's languages and scripts. What does that mean? What must you do? How do you start?</p>

<p>Here are some of the charset conversion points you'll need to resolve as you migrate through this problem:</p>
<ol>
<li>database tables</li>
<li>database connections</li>
<li>application and/or web server frameworks</li>
<li>web page</li>
<li>form encodings</li>
<li>JavaScript or other browser scripts</li>
</ol>

<p>To help you get started, I've discussed the first 4 conversion points in the article <a href="http://java.sun.com/developer/technicalArticles/Intl/HTTPCharset/">Character Conversions from Browser to Database</a>. Go ahead, take a look. But come back here to let me know what you think. Old article, yes, for certain. However, I just ran head on into this very problem just this week. The same problems never go away, and this article had the content my team needed to resolve it in our environment.</p>

<p>I'll talk about some of the JavaScript issues in an upcoming blog.</p>

<p>Also posted to <a href="http://joconner.com">joconner.com</a>.</p>]]>

</content>
</entry>
<entry>
<title>Another solution for non-UTF8 source files in NetBeans 6.1?</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/joconner/archive/2008/04/another_solutio.html" />
<modified>2008-04-06T06:00:48Z</modified>
<issued>2008-04-06T05:55:19Z</issued>
<id>tag:weblogs.java.net,2008:/blog/joconner/146.9484</id>
<created>2008-04-06T05:55:19Z</created>
<summary type="text/plain">Recently I mentioned a potential problem when saving source files in a non-Unicode charset encoding. The potential data loss is significant for large projects. After thinking about the problem a little more, I have a potential solution, a solution that...</summary>
<author>
<name>joconner</name>

<email>john@joconner.com</email>
</author>
<dc:subject>Community: NetBeans</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/joconner/">
<![CDATA[<p>Recently I mentioned a potential problem when <a href="http://joconner.com/site/entry/netbeans_6_1_uses_utf1">saving source files in a non-Unicode charset encoding</a>. The potential data loss is significant for large projects. After thinking about the problem a little more, I have a potential solution, a solution that allows you to save to a non-Unicode encoding but also prevents data loss. </p>

<p>You are familiar with <code>\u</code> notation for non-ascii characters in property files? I think the same encoding can work for non-ascii characters in any Java source file. I'm not suggesting that should be the preferred representation. I think the <code>\u</code> notation is only tolerable, something to be avoided whenever possible. However, in this situation -- saving files that were once in UTF-8 -- this might be the only option for storing the files without data loss. </p>

<p>Here's how it would work. First, NetBeans 6.1 uses UTF-8 for a project's default source code and configuration file encoding, an excellent choice by the way. So, now imagine that your source code has the Euro currency symbol in it. That's Unicode code point <code>U+20AC</code>. And the character itself is this: €. If you can't see the actual character (maybe you don't have a capable font?), here's the image instead:  
</p>

<p><img src="http://joconner.com/resources/site/images/euroglyph.png" alt="Euro glyph" title="Euro" border="0" /></p>

<p>Now, let's imagine that you need to change your project encoding for some reason. So, maybe you choose ISO-8859-1, which doesn't contain the Euro symbol. You can still represent the Euro character, but you'll have to encode it with the \u. Wouldn't it be nice if NetBeans did this for you, creating <code>\u20AC</code> in your file instead of converting the character to a meaningless <code>?</code> question mark. I think that would be better. And it's entirely possible. It doesn't prevent NetBeans from converting the file to the target encoding as requested by the user, and it allows NetBeans to prevent data loss by using the \u encoding for characters that are not in the target charset. </p>

<p>So, what do you think? Maybe the NetBeans team can get this into the 6.1 product before final release?</p>

<p>Have you seen <a href="http://netbeans.org">NetBeans 6.1</a>? Give it a try, and <a href="http://www.netbeans.org/competition/blog-contest.html">blog about it</a>. Who knows, you might win $500!</p>

<p>Also posted to<a href="http://joconner.com"> joconner.com</a>.</p>
]]>

</content>
</entry>
<entry>
<title>Call for participation: Internationalization and Unicode Conference #32</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/joconner/archive/2008/04/call_for_partic.html" />
<modified>2008-04-03T08:08:12Z</modified>
<issued>2008-04-03T08:04:38Z</issued>
<id>tag:weblogs.java.net,2008:/blog/joconner/146.9466</id>
<created>2008-04-03T08:04:38Z</created>
<summary type="text/plain">The Internationalization &amp; Unicode Conference is the technical conference for software and web internationalization engineers. If you have a product that implements the Unicode standard or an idea that will help others work with this standard, share your knowledge. The...</summary>
<author>
<name>joconner</name>

<email>john@joconner.com</email>
</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/joconner/">
<![CDATA[<p>The Internationalization & Unicode Conference is <em>the</em> technical conference for software and web internationalization engineers. If you have a product that implements the Unicode standard or an idea that will help others work with this standard, share your knowledge. </p>

<p>The "call for participation" is an invitation for Unicode gurus, clients, and vendors to submit papers for this upcoming conference. Learn more at the <a href="http://www.unicodeconference.org/">Unicode Conference web site</a>.</p>

<p>Also posted to my software internationalization blog at <a href="http://joconner.com">joconner.com</a></p>]]>

</content>
</entry>
<entry>
<title>NetBeans 6.1, UTF-8 encoded source files, and a tale of corruption</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/joconner/archive/2008/03/netbeans_61_utf.html" />
<modified>2008-03-30T18:10:55Z</modified>
<issued>2008-03-30T10:59:54Z</issued>
<id>tag:weblogs.java.net,2008:/blog/joconner/146.9443</id>
<created>2008-03-30T10:59:54Z</created>
<summary type="text/plain">The NetBeans 6.1 beta uses the UTF-8 encoding (a Unicode encoding) as its default for project configuration and source files; that&apos;s good. But allowing data loss is a bad thing, especially when it can be avoided or discouraged so easily.</summary>
<author>
<name>joconner</name>

<email>john@joconner.com</email>
</author>
<dc:subject>Community: NetBeans</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/joconner/">
<![CDATA[<p>I'm always happy when a company or product adopts Unicode as its charset. I think it makes perfect sense to do so. There are lots of good reasons why standardizing on Unicode is the right thing:</p>
<ul>
<li>the data charset can represent all modern, useful -- and many not-so-useful -- scripts</li>
<li>charset consistency helps prevent data loss across application boundaries, including those among application, business tiers, application servers, and databases</li>
<li>a single, multilingual charset simplifies the localization process</li>
</ul>

<p>I was pleased to see that NetBeans 6.0 and the 6.1 beta uses the UTF-8 encoding (a Unicode encoding) as its default for project configuration and source files. The following figure shows the default setting in the project's property sheet:</p>

<p><img src="http://joconner.com/site/resource/images/projectproperties.png" align="left" alt="NB 6.1 project properties" title="NetBeans 6.1 project properties" border="0" /></p><br clear="left"/>

<p>This makes it <em>much</em> easier to edit non-ASCII, non-English source and property files. You can type text in any supported Unicode script right into Java source code. A legitimate usage would be comments or even localizable text in <code>ListResourceBundle</code> files. You can do that because NetBeans will save your files using the UTF-8 encoding by default...<em>and</em> NetBeans even puts this setting into the project's Ant file settings so that it compiles the file properly using the correct <code>javac</code> arguments. For example, NetBeans would use the following for a UTF-8 source file:</p>
<pre>
javac -encoding UTF-8 YourSource.java
</pre>

<p>
Despite the potential benefits of this, NetBeans 6.1 still doesn't support this correctly in my humble opinion. Why not? Well, the biggest reason is simple: file corruption and permanent data loss. Ouch!
</p>

<p>
Let's take a simple "Hello, world!" example in Japanese. This is simple for NetBeans because of the UTF-8 encoding. The NetBeans editor even displays it correctly as shown here:
</p>

<p style="float:left">
<img src="http://joconner.com/site/resource/images/nbeditor.png" align="left" alt="" title="NetBeans editor" border="0" />
</p><br clear="left"/>

<p>Unfortunately, the joy of this discovery was short lived when I discovered how easy it is to corrupt this data. Feel like experimenting with the charset encoding? Surely someone will. I suspected what would happen, so I didn't do this with any substantial code base...but someone will. I sure hope they use version control software.</p>

<p>Reopen that project property sheet, select another encoding, say <code>ISO-8859-1</code> or <code>windows-1252</code> since so many American and Western-European programmers use that by default. What happens? It appears as if nothing has happened. In this NB 6.1 beta, I see the same editor screen as before. NetBeans apparently hasn't yet reloaded the file from disk, so I'll force the issue by closing and reloading this file. The result is here:</p>

<p style="float:left">
<img src="http://joconner.com/site/resource/images/filecorruption.png" align="left" alt="" title="File corruption" border="0" />
</p><br clear="left"/>

<p>Some of you, the super careful, nit-picky ones will now argue with me, "But John, you haven't really lost anything yet. 8859-1 and CP 1252 don't have those characters, but the original byte values are still entact. You can get them back in this example." OK, I concede the point. But now I'll show you some <em>serious</em> data loss, no messing around this time. Instead of <code>ISO-8859-1</code>, pick <code>US-ASCII</code> as the target charset. Add a comment or another line of code to the file. Save. And there you have it as shown here:</p>

<p style="float:left">
<img src="http://joconner.com/site/resource/images/encodeusascii.png" align="left" alt="" title="" border="0" />
</p><br clear="left"/>

<p>Now that's just not good. Did NetBeans save the file correctly? Sure. However, NetBeans can do better than this. I would argue that if NetBeans knows that the target encoding does <em>not</em> support the source encoding, it should <em>at least</em> warn the user that the resulting file will contain garbage characters and that parts of the file will be lost--permanantly in many cases.</p>

<p>So, just in case anyone over there in the NetBeans developer group can hear me...you have to fix this. Yes, I know it's a silly mistake for someone to do this, but NetBeans can help them avoid the problem. Just provide a warning dialog, "Saving this file in the target encoding will cause data loss because the target encoding does not support all characters in this file or project." Keep the encoding feature, just perfect it by helping some users avoid this costly mistake. The fact is that most software developers still don't understand character sets and encodings, and this is just an accident waiting to happen.</p>

<p>On a personal note: I really love NetBeans. And I hope this blog qualifies me for the <a href="http://www.netbeans.org/competition/blog-contest.html">NetBeans 6.1 blogging contest</a>! I could probably file this under the "suggestions on how to enhance NetBeans 6.1" category. </p>

]]>

</content>
</entry>
<entry>
<title>Will blog, write, or program for JavaOne pass</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/joconner/archive/2008/03/will_blog_write.html" />
<modified>2008-03-26T07:56:12Z</modified>
<issued>2008-03-26T08:01:00Z</issued>
<id>tag:weblogs.java.net,2008:/blog/joconner/146.9424</id>
<created>2008-03-26T08:01:00Z</created>
<summary type="text/plain">These are trying, desperate times. Let&apos;s make a deal for the JavaOne 2008 conference!</summary>
<author>
<name>joconner</name>

<email>john@joconner.com</email>
</author>
<dc:subject>JavaOne</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/joconner/">
<![CDATA[<p style="float:left">
<img alt="deal.jpg" src="http://weblogs.java.net/blog/joconner/archive/images/deal.jpg" width="50" height="50" />
</p>
<p>Although I was there last year -- writing, blogging, communicating to the community -- I don't have a pass to <a href="http://java.sun.com/javaone/sf/index.jsp">JavaOne 2008</a> yet. Unfortunately, I have no concrete plans. No corporate or community sponsor has agreed to help yet either. It's a sad, sad thing. Indeed, these are trying, desperate times.</p>

<p>I want to go to JavaOne...and I'm willing to take drastic action. Sure, I <em>could</em> just put up the money myself. The $1595 price tag for a 4-day pass is expensive but not entirely out of my budget. Still, there's no fun in that, especially if I can do something more interesting than just sending in the registration cash. So, I'm going to do something a little different in order to participate this year. I'm hiring myself out!</p>

<p>Yes, that's right. The first sponsor to offer a full 4-day <b>Conference Pass</b> and <b>room</b> will receive my professional consulting/writing/blogging/programming/<a href="http://en.wikipedia.org/wiki/Gofer">go-fer</a> services for the duration of the event!</p>

<p>Here's what you'll get:</p>

<ul>
<li>One full week of blogging for your products of choice at the JavaOne conference.</li>
<li>Booth duty...you know you need a break from the pavilion booth at some point. Let me help.</li>
<li>A feature article...or two...from me if you're the editor of a Java-related journal.</li>
<li>Any other reasonable task that you might need.</li>
</ul>

<p>Yes, it's a bit unusual. But the JavaOne conference is unusual too. I think this is going to work out just great.</p>

<p>You know how to reach me: john at joconner dot com.</p>
]]>

</content>
</entry>
<entry>
<title>Beans Binding and my Flex friend</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/joconner/archive/2008/03/beans_binding_a.html" />
<modified>2008-03-23T19:16:18Z</modified>
<issued>2008-03-23T18:53:18Z</issued>
<id>tag:weblogs.java.net,2008:/blog/joconner/146.9407</id>
<created>2008-03-23T18:53:18Z</created>
<summary type="text/plain">I am enthusiastic about Beans Binding, but a coworker threw a wet towel on me.</summary>
<author>
<name>joconner</name>

<email>john@joconner.com</email>
</author>
<dc:subject>Programming</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/joconner/">
<![CDATA[<p style="float:left; margin:5px">
<img src="http://today.java.net/images/tiles/111-BeansBinding.jpg" alt="Beans Binding"/>
</p><p>I recently wrote a brief introduction to Beans Binding called <a target="_blank" href="http://today.java.net/pub/a/2008/03/20/synchronizing-properties-with-beans-binding.html">Synchronizing Properties with Beans Binding</a>. I was enthusiastic about Beans Binding, and then a coworker threw a wet towel on me. The conversation went something like this:</p>

<p>
<span style="font-style: italic;">John</span>: I just finished an article on java.net. This API might be useful in this project.</p>

<p><i>Coworker</i>: Yeah, what's that?</p>

<p><span style="font-style: italic;">John</span>: Beans Binding. It's an API that will help us bind beans together, synchronizing properties.</p>

<p><span style="font-style: italic;">Coworker</span>: What do you mean?</p>

<p><span style="font-style: italic;">John</span>: You know...say you want to update a table with new data anytime a result set changes, or maybe you want a price field to display the current total of all purchased items in a shopping cart. You can use beans binding to synchronize the properties without having to write all the plumbing and event handling yourself.</p>

<p><span style="font-style: italic;">Coworker</span>: Hmm. Java hasn't always had that?</p>

<p><span style="font-style: italic;">John</span>: Well, yes. Java has always allowed you to synchronize properties, but we've never had an API to make it this easy.</p>

<p><span style="font-style: italic;">Coworker</span>: Really? We've had this in Flash and Flex forever. </p>

<p><span style="font-style: italic;">John</span>: You've had binding?</p>

<p><span style="font-style: italic;">Coworker</span>: Binding, or Beans Binding...whatever you call it. We can bind a variable or property to another variable or property so the updates trickle throughout the application. It's a great feature, a must-have, and I couldn't do without it. I use <code>[Bindable]</code> among other things.</p>

<p><span style="font-style: italic;">John</span>: Yes, it's great. I agree. So take a look at <a href="http://today.java.net/pub/a/2008/03/20/synchronizing-properties-with-beans-binding.html">that article</a>. Beans Binding, it's pretty cool.</p>

<p><span style="font-style: italic;">Coworker</span>: You're just getting binding in the Java language? Hmm... really? I just assumed Java would have had that all along.</p>

<p><span style="font-style: italic;">John</span>: Um, it's not exactly part of the language. It's a new API. Making changes to the language is difficult and usually takes a long time...</p>

<p><span style="font-style: italic;">Coworker</span>: Oh, I misunderstood. It's <span style="font-style: italic;">not</span> part of the language? Just a separate API? Got it. Hmm...ok. Well, uh, gotta run.</p>

<p><span style="font-style: italic;">John</span>: Hey, wait. But Java FX Script has a <code>bind</code> keyword that <em>is</em> part of the language. Remember? I told you about Java FX Script earlier.</p>

<p><span style="font-style: italic;">Coworker</span>: Right. Java FX Script. It's about time Java got got a bind operator or keyword, something.</p>

<p><span style="font-style: italic;">John</span>: No, not Java. Java FX <em>Script</em>. That's the new language for rich client app development. Java FX Script has the <code>bind</code> operator. Java has the Beans Binding API.</p>

<p><span style="font-style: italic;">Coworker</span>: OK, right...well...hey...I have to get back to work on this Flex app. But I agree, binding is great, couldn't do without it, use it all the time.</p>
]]>

</content>
</entry>
<entry>
<title>Videos and the cubicle effect on content consumption</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/joconner/archive/2008/03/videos_are_grea.html" />
<modified>2008-03-20T22:59:00Z</modified>
<issued>2008-03-20T22:54:57Z</issued>
<id>tag:weblogs.java.net,2008:/blog/joconner/146.9395</id>
<created>2008-03-20T22:54:57Z</created>
<summary type="text/plain">Notice all those great videos on java.sun.com these days. I think they&apos;re great but inaccessible for a couple reasons.</summary>
<author>
<name>joconner</name>

<email>john@joconner.com</email>
</author>
<dc:subject>Accessibility</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/joconner/">
<![CDATA[<p>They do great work over there on the java.sun.com editorial team, and they've been improving the site with lots of videos lately. The last three featured content pieces have been videos. That's excellent work, but it's inaccessible for a couple reasons.</p>

<p>First, I like to hit java.sun.com first thing in the day from my workplace. That's been a cubicle environment recently. I can quietly read a text article, even print it and read it later during a lunch break. Unfortunately, I can't do the same with the videos. They're fun, sure, but unwatchable because video and audio are distracting to others in the office. Bandwidth issues aside...people just don't like to hear this from another cube. I understand that, so I don't intrude on their peace and quiet. Unfortunately, the video is inaccessible to me. And when I get home, well, there's a better than even chance that I won't watch a tech video then either.</p>

<p>Second, the videos are inaccessible to those with hearing or sight impairments. Seems obvious, right? Can't hear...the audio isn't usable. Can't see...can't watch the video either. I suppose you could listen to the video -- but not in my cube. So, the videos are inaccessible to others too. Granted, those who can't benefit from the videos are a small minority. Still, wouldn't it be nice to include them as far as possible?</p>

<p>I think a solution is possible. Video is a great idea for java.sun.com, and clearly the medium is popular. Just witness the popularity of YouTube, etc. I think the videos could be improved though with something very simple. Transcripts.</p>

<p>Providing a transcript with the video would allow cubicle dwellers access to the content. The same transcript makes the content accessible to hearing and site impaired developers too. Can't hear -- you can read the transcript content. Can't see? Text readers exist for that case. Either way, the videos become more accessible to a larger group of people.</p>

<p>Is this a complaint? No way. I enjoy practically all of the content provided by java.sun.com. This is just a friendly suggestion, hoping that it will bring the content to an even wider audience.</p>

<p>It has been a long, long time since I last worked in a cubical environment. I find the experience undesirable but tolerable. It makes me curious though...just how many of us work in a cube environment? Might be a great polling opportunity for the java.net editors...</p>
]]>

</content>
</entry>

</feed>