<?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>Chris Adamson&apos;s Blog</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/invalidname/" />
<modified>2007-07-23T21:29:55Z</modified>
<tagline></tagline>
<id>tag:weblogs.java.net,2008:/blog/invalidname/50</id>
<generator url="http://www.movabletype.org/" version="3.01D">Movable Type</generator>
<copyright>Copyright (c) 2007, invalidname</copyright>
<entry>
<title>Of &quot;User-Facing&quot; Software</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/invalidname/archive/2007/07/of_userfacing_s.html" />
<modified>2007-07-23T21:29:55Z</modified>
<issued>2007-07-23T21:29:47Z</issued>
<id>tag:weblogs.java.net,2007:/blog/invalidname/50.7909</id>
<created>2007-07-23T21:29:47Z</created>
<summary type="text/plain">I&apos;m not fully satisfied with &quot;desktop&quot; or even &quot;client&quot; as a term to describe the GUI software that users directly interact with.  So I&apos;m trying out a new term.</summary>
<author>
<name>invalidname</name>

<email>cadamson@oreilly.com</email>
</author>
<dc:subject>Community: JavaDesktop</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/invalidname/">
<![CDATA[<p>
You might have noticed my use of a new term, <em>user-facing</em>, in some of my <a href="http://weblogs.java.net/blog/editors/">editor's blogs</a>.  Since Josh made a big deal of distinguishing between <i>client</i> software and <i>desktop</i> software in his <a href="http://weblogs.java.net/blog/joshy/archive/2007/07/java_fx_updated.html">recent blog about upcoming Java GUI awesomeness</a>, I thought I'd take a minute to discuss why I'm in search of a new term.
</p>

<p>
First, Josh is right: "desktop" is a wholly inadequate term for a lot of the things we mean by the term.  Now that the GUI toolkits originally meant for desktop applications are running on phones -- like Swing on the SavaJe (or whatever its successors will be called) to Cocoa on the iPhone -- the idea of associating the API with its typical real-world environment has been completely broken.  The concept had other flaws as well, such as application baggage (presumptions of installers and double-clickables) that didn't make sense for scenarios like applets and Java WebStart.  So "desktop" just isn't a term that does a lot of good for its intended uses anymore.
</p>

<p>
Josh uses "client" to cast a broader net, to include non-PC runtime environments like phones, set-top boxes, etc., that would also offer a visual interface to the user.  Good.  But my problem with the idea of calling these "clients" is the implication that there is a corresponding "server" somewhere.  Coming from the company that makes the net work, the one that put the dot in dot com, that's a perfectly understandable bias.  But I think its still inaccurate.
</p>

<p>
There are lots of apps we use every day that aren't networked, "clients" that don't have a server.  Even if they do, in the context of describing API's and programming practices, "client" doesn't capture the essence of what's involved.  If I talk about an e-mail "client", sure, the concept of that application interacting with a server is useful.  But if I say I'm  a "client-side programmer" who worked on an e-mail app, you'll rightly assume that my focus and speciality is on the buttons, lists, tables, and other components that make up the GUI.  Maybe I did the networking too, but at the moment that I stop talking about Swing and start talking about sockets, I've temporarily stopped being a "client" programmer and started being a "network" programmer, even though I'm still working on an e-mail "client".
</p>

<p>
Lately, in the context of describing the field of developing GUI's, I've started using the term <i>user-facing</i>, as in <i>user-facing software</i>, <i>user-facing API's</i>, etc.  It's a mouthful, and I'm not entirely satisfied with it, but I think it has the advantage of accuracy across a broad range of technologies.  A Swing programmer, a Flash author, and an Ajax JavaScript developer all have something important in common: their focus is on the code that presents information to the user and lets them interact with it through various facilities (buttons, menus, touch-screens, game controllers, speech recognition, etc.).  The point is that these people are writing the code that the user is in direct, face-to-face contact with.  Hence, "user-facing".
</p>

<p>
Also, it's a term that's biased and loaded in useful ways.  A "client" is a balloon in a flow diagram on a whiteboard.  Calling something "user facing" reminds us that there are <i>real people</i> working with our stuff, and reminds us that it had better not suck, you know, <a href="http://www.amazon.com/Programming-as-if-People-Mattered/dp/0691037639">as if people mattered</a>.
</p>

<p>
So, that's my case for a new term... maybe this one, and maybe another.  But I'm consciously avoiding both "desktop" and "client" except in those cases where they are clearly accurate.  When describing the broader concept of GUI code that is the user's point of access to a system, I'm trying to develop better terminology.
</p>]]>

</content>
</entry>
<entry>
<title>Blu-Ray Q&amp;A Brain Dump</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/invalidname/archive/2007/05/bluray_qa_brain.html" />
<modified>2007-05-11T15:46:15Z</modified>
<issued>2007-05-11T15:46:09Z</issued>
<id>tag:weblogs.java.net,2007:/blog/invalidname/50.7367</id>
<created>2007-05-11T15:46:09Z</created>
<summary type="text/plain">My completely unedited notes from BOF-0889:  Talk to the Stars: A Discussion of Blu-Ray Java Technology</summary>
<author>
<name>invalidname</name>

<email>cadamson@oreilly.com</email>
</author>
<dc:subject>JavaOne</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/invalidname/">
<![CDATA[<p>I'll have an opinionated blog later, but here's my notes from the Blu-Ray Q&A BOF.  Missing is my question/comment at the end, which I'll blog later.</p>

<hr/>


<p>
Talk to the Stars: A Discussion of Blu-Ray Java Technology
</p>

<ul>
	<li>Phil Starner, Javelin Software (blond, glasses)</li>
	<li>Mike Zink, Technicolor (red shirt, black jacket)</li>
	<li>Kyle Prestinbock, Disney</li>
	<li>Bill Foote, Sun (session lead)</li>
</ul>

<p>
[note to self: remember comments about compatibility problems from morning keynote]
</p>

<p>
First question: there's a real discrepency between timeline tool based thinking (Final Cut, Flash) versus programming (Java).  Zink: for 70-80% of these titles, something timeline-based would be plenty.
</p>

<p>
Bill: Sun's future plans in this space.  Did everyone see JavaFX thing in the keynote?  It's a scripting environment that is intellectually rigorous.  Predicts dooms of ECMAScript and personal-basis Java.  Claims ScriptFX will solve the same problems as Flash, but speaks to a low-level spec that can be standardized and "gotten right".  By comparison, HD-DVD builds all their effects into the low level, so if they miss something good, they can't add it back later.  BD-J puts runtime on the disc, so it can be fixed later.  Bill tells Kyle that having Java developers developing titles is crazy; need to get designers into the loop.
</p>

<p>
Bill: we expect tools to be created.  Once those are out there, we can set up authors/designers with those tools.  BD-J as a whole is much larger than that.  With DVD, we ran out of new innovative things to do after about three years.
</p>

<p>
Audience member: BD-J doesn't exist in a vacuum.  Consumers are blaming BD-J complexity for lack of titles.  Yes, you're future proofing, but we've got a timeline here, and Blu-Ray needs to get its act together.  Sun is saying "we've got JavaFX", but Sun can't just throw a switch and suddenly everything's fine.
</p>

<p>
Audience member 2: OK, how do I learn BD-J now if I don't work at a studio that has paid the license.  I want to just download some Eclipse plugins.
</p>

<p>
Mike: What we're doing in large scale production is different from what a developer would do at home.  We use authoring tools to do the multiplexing, Java's just an application on top that does the underlying interactivity.  Blu-Print, Scenarist.  Both have some kind of Java implementation, but they're both high-level solutions.  To just do Java development without worrying about the video, check out the "HD production handbook", and upcoming "HD production cookbook" (sked'ed for September).  Bill: answer right now is "some assembly required".  To do it professionally, you need players with debuggers.  Kyle: some authoring tools have emulators.  We've found that developers who develop with MHP tools can be ported to Blu-Ray in about a week, so go the MHP route, use the community and the tools.  It'll be easier to switch to Blu-Ray when those evolve to Blu-Ray tools.  Bill: check out hdcookbook.com, join the forums, check out the BD-J discussions.  It'll be good to see what people can do at different levels of spending.  The guy who did "Dragon's Lair" took some discs, looked at what was in there, decompiled... didn't work with an authoring tool.
</p>

<p>
Audience 2: If Sony & Sun want BD-J to win, why don't they get SDK's and tools out there?  Bill: Blu-Ray Disc Association, and their 19 companies, don't want it to happen.  Sun comes from a "give tools to people" mindset.  It's $100,000 to just buy the specs for Blu-Ray, a very different culture.  Lots of stakeholders, coming from a different industry.  It's not like the computer industry.  Phil: if these tools were available, it would definitely help Blu-Ray.  That kind of stuff is available for HD-DVD, and it helps them.  Mike: remember that Blu-Ray is pretty complex, and it takes a lot of time to develop these tools.  Nothing out there where you could throw it to the masses and make everyone happy.  Throwing full-blown Flash-like tools out there doesn't make sense for the system.  Microsoft-like approach is more appropriate: give people some docs, let them do it.  Bill: we're not actively trying to deny people information, we need more time.  Everyone agrees that this needs to happen, get some agreement on when.
</p>

<p>
Audience 3:  I'm tired of writing EJB's.  Sounds like Microsoft has the path of least resistance for developers right now.  In enterprise, we have tons of information, free tools, etc.  At what point in the future, do we get some docs and tools.  Do the studios want many developers, or just a few people at a few studios.  Bill: studio hopes that we can create as many Blu-Ray titles as DVD.  Audience 3: Does HD-DVD make it easier to get started?  Are Java developers at a disadvantage because they're waiting for the BDA to get its act together?  Bill: we work with other vendors; startups help us with this.  Some developers come to us with just some ME experience.
</p>

<p>
CD's of Blu-Ray SDK's (Sequence) somewhere in this room?  No, just the Fox contest that's Windows-only (speeeeeewww...)
</p>

<p>
Audience 4: I'm from a company that makes a BD-J tool, and if you're interested in this kind of thing, there are a lot of opportunities.  Not as a stay at home developer, but with companies.  Lot of positions out there.
</p>]]>

</content>
</entry>
<entry>
<title>I Must Be Dim</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/invalidname/archive/2007/04/i_must_be_dim.html" />
<modified>2007-04-14T03:20:46Z</modified>
<issued>2007-04-14T03:19:36Z</issued>
<id>tag:weblogs.java.net,2007:/blog/invalidname/50.7052</id>
<created>2007-04-14T03:19:36Z</created>
<summary type="text/plain">In trying to create a dimming effect for an AB5k desklet, I&apos;ve found some genuinely weird behavior in JLayeredPane.  Anyone ever seen this?</summary>
<author>
<name>invalidname</name>

<email>cadamson@oreilly.com</email>
</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/invalidname/">
<![CDATA[<p>So, a day after I finished my <a href="http://www.ab5k.org">AB5k</a> desklet, Josh goes and totally breaks it with a wildly ambitious new version of the desklet container, which "virtualizes" all the components.  In other words, all the components really live off-screen in memory and blit their pixels into buffers that Josh can play with, render on a 3D surface, whatever.</p>

<p>Among the breakage is an animated dimming effect I was using.  It doesn't seem like desklets should be able to spawn their own windows or dialogs, so for open and save dialogs, and some HTML "about" text, what I decided to do was to use a glass-pane hack: I'd "dim" the glasspane to darken the desklet, then insert the <code>JFileChooser</code> or <code>JScrollPane</code>, with large insets, in the center of the glass-pane.  By "darken", I mean that I'd set its background to a black color with a non-trivial alpha value (ie, a translucent black), and fill the pane.  I posted a <a href=http://groups.google.com/group/desklets-contributors/msg/831adf714f628c7b">screenshot</a> of it to the Desklet Contributors group back when it worked.</p>

<p>But like I said, the virtualized component scheme broke this, because it depended on my component climbing the heirarchy to find a <code>RootPaneContainer</code>, which would provide access to the glass-pane.  In the virtualized world, the components don't live in real frames or root-pane containers anymore, so this doesn't work.</p>

<p>OK, plan B: do my own <code>JLayeredPane</code>.  The contents of a <code>RootPaneContainer</code> are just a big <code>JLayeredPane</code> so this should work, right?</p>

<p>Well, um, no.  Not like you'd think it would.  It seems to break in really interesting ways.  Specifically, if the "dim box" -- the component that fills the layer above the background -- is less than the size of the <code>JLayeredPane</code> in both dimensions, it works as before.  On the other hand, if it equals the container's size exactly, or equals or exceeds in both dimensions, then the dim box loses its translucence.</p>

<p>Weird?  Let's play.  Here's an applet version.  You turn on the dim layer with the checkbox, then set its size with the text areas.  You'll need to turn it on and set non-zero dimensions in order to see anything.  You can also download <a href="http://weblogs.java.net/blog/invalidname/archive/dimlayertest.jar">dimlayertest.jar</a> and run it as an application with <code>java -classpath dimlayertest.jar DimLayerTest</code>.</p>

<applet code="DimLayerTest" archive="http://weblogs.java.net/blog/invalidname/archive/dimlayertest.jar" height="500" width="400">If you can see this, your browser doesn't support applets.  Really?</applet>

<p>So, here are a few screenshots, in case you'd rather not play with the applet.  First, a 200x200 dim box, just to show it works:</p>

<p><img alt="dimlayer-test-200-200.png" src="http://weblogs.java.net/blog/invalidname/archive/dimlayer-test-200-200.png" width="345" height="458" /></p>

<p>Next, I max out the horizontal dimension, but stay one pixel back from maxing out the vertical.</p>

<p><img alt="dimlayer-test-344-373.png" src="http://weblogs.java.net/blog/invalidname/archive/dimlayer-test-344-373.png" width="345" height="458" /></p>

<p>And finally, a dim box that is exactly the dimensions of the container:</p>

<p><img alt="dimlayer-test-344-374.png" src="http://weblogs.java.net/blog/invalidname/archive/dimlayer-test-344-374.png" width="345" height="459" /></p>

<p><b>Oops!</b>  So much for that approach.  Actually, I'm probably screwed anyways, for two reasons.  In the desklet, the "too big" dimensions seem to be a good 5 or 6 pixels in, which leaves a weird un-dimmed area.  Second, it seems the translucence may not be cross-platform.  Here's what happened when I tried it in Windows XP on Virtual PC (my Boot Camp seems hosed at the moment):</p>

<p><img alt="dimlayer-test-windows.png" src="http://weblogs.java.net/blog/invalidname/archive/dimlayer-test-windows.png" width="359" height="498" /></p>

<p>Yuck!  Ptui!  So much for alpha channels, Duke!</p>

<p>Anyways, time to punt.  It was a neat idea, but it doesn't work, I've spent too much time on it, and Josh and Cooper now have a simple "get me a dialog" approach that will suffice for the file chooser and the about HTML.  Enough of this wild layer chase...</p>

<p>Oh, for the record, here's source: it's only 150 lines, so it shouldn't be too painful to just in-line:</p>

<pre><code>
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.*;
import java.applet.*;

public class DimLayerTest extends Applet {

    JLayeredPane layeredPane;
    JComponent dimBox;
    JLabel iconLabel;
    JTextField widthField, heightField;
    JCheckBox showDimBoxCheckBox;

    public static void main (String[] arrrImAPirate) {
        JFrame f = new JFrame ("Dim Layer Test");
        f.getContentPane().add (new DimLayerTest());
        f.pack();
        f.setVisible(true);
    }

    public DimLayerTest () {
        doMyLayout();
    }

    private void doMyLayout() {
        setLayout (new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        
        // controls for the dim pane
        gbc.gridx=0;
        gbc.gridy=0;
        gbc.gridwidth=1;
        gbc.gridheight=1;
        gbc.weightx=1;
        gbc.weighty=1;
        gbc.anchor=GridBagConstraints.NORTH;
        gbc.fill=GridBagConstraints.BOTH;

        add (new JLabel ("Dim width:"), gbc);
        widthField = new JTextField ("0", 5);
        gbc.gridx=1;
        add (widthField, gbc);
        gbc.gridx=2;
        add (new JLabel ("Dim height:"), gbc);
        heightField = new JTextField ("0", 5 );
        gbc.gridx=3;
        add (heightField, gbc);

        gbc.gridx=1;
        gbc.gridy=1;
        gbc.gridwidth=4;
        showDimBoxCheckBox = new JCheckBox ("Show Dim Layer", false);
        add (showDimBoxCheckBox, gbc);

        // our layers
        java.net.URL imageURL =
            getClass().getClassLoader().getResource
            ("resources/Duke_library_javax_swing.gif");
        iconLabel = new JLabel (new ImageIcon (imageURL));
        dimBox = new JPanel();
        dimBox.setBackground (new Color (0, 0, 0, 128));
        layeredPane = new JLayeredPane();
        layeredPane.setPreferredSize (iconLabel.getPreferredSize());
        layeredPane.add (iconLabel, JLayeredPane.DEFAULT_LAYER);
        iconLabel.setBounds (0, 0,
                             iconLabel.getPreferredSize().width,
                             iconLabel.getPreferredSize().height);
        layeredPane.add (dimBox, JLayeredPane.MODAL_LAYER);
        dimBox.setOpaque (true);

        dimBox.setBounds (0, 0, 0, 0);
        dimBox.setVisible (false);

        gbc.gridx=0;
        gbc.gridy=10;
        gbc.gridwidth=4;
        gbc.gridheight=1;
        gbc.weightx=1;
        gbc.weighty=1;
        gbc.anchor=GridBagConstraints.NORTH;
        gbc.fill=GridBagConstraints.BOTH;

        add (layeredPane, gbc);

        // bottom row shows image size... also a row that stretches
        // to handle extra applet space
        gbc.gridy=20;
        gbc.anchor=GridBagConstraints.NORTHWEST;
        add (new JLabel ("Image is " + 
                         iconLabel.getSize().width + " x " +
                         iconLabel.getSize().height), 
             gbc);
        gbc.gridy=100;
        gbc.weighty=1000000;
        add (Box.createVerticalGlue(), gbc);


        resetDimBox();

        // wire up listeners to reset dim box any time text is typed
        // into fields or button is clicked
        showDimBoxCheckBox.addActionListener (new ActionListener() {
                public void actionPerformed (ActionEvent e) {
                    resetDimBox();
                }
            });

        DocumentListener textFieldListener = new DocumentListener() {
                public void insertUpdate (DocumentEvent e) {
                    resetDimBox();
                }
                public void removeUpdate (DocumentEvent e) {
                    resetDimBox();
                }
                public void changedUpdate (DocumentEvent e) {
                    resetDimBox();
                }
            };
        widthField.getDocument().addDocumentListener (textFieldListener);
        heightField.getDocument().addDocumentListener (textFieldListener);
    }

    
    
    // get settings from control widgets and reset bounds of dimBox
    private void resetDimBox() {
        int oldDimWidth = dimBox.getBounds().width;
        int oldDimHeight = dimBox.getBounds().height;
        int newDimWidth = -1;
        int newDimHeight = -1;
        try {
            newDimWidth = Integer.parseInt(widthField.getText());
        } catch (Exception e) {} // ignore garbage
        try {
            newDimHeight = Integer.parseInt(heightField.getText());
        } catch (Exception e) {} // ignore garbage
        boolean newDimVisible = showDimBoxCheckBox.isSelected();

        dimBox.setVisible (newDimVisible);
        dimBox.setBounds (0, 0,
                          ((newDimWidth > 0) ? newDimWidth : oldDimWidth),
                          ((newDimHeight > 0) ? newDimHeight : oldDimHeight));

        repaint();
    }


}
</code></pre>]]>

</content>
</entry>
<entry>
<title>The Leaning Tower of Tires</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/invalidname/archive/2007/03/the_leaning_tow.html" />
<modified>2007-03-21T20:29:47Z</modified>
<issued>2007-03-21T20:26:59Z</issued>
<id>tag:weblogs.java.net,2007:/blog/invalidname/50.6879</id>
<created>2007-03-21T20:26:59Z</created>
<summary type="text/plain">Largely unrelated and specious thoughts about Flash, Skee Ball, Blu-Ray, QuickTime and other mostly unrelated topics.  And maybe something about Java.</summary>
<author>
<name>invalidname</name>

<email>cadamson@oreilly.com</email>
</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/invalidname/">
<![CDATA[<p>
There's no point to any of this, it's just stuff on my mind at the moment.  Vanity blogging at its finest.
</p>

<p>
A few weekends ago, I was at my college pal <a href="http://en.wikipedia.org/wiki/Michael_Stemmle">Mike Stemmle</a>'s wedding, talking to fellow groomsman <a href="http://en.wikipedia.org/wiki/Hal_Barwood">Hal Barwood</a> about game development in Flash, where he seems to be having a grand time cranking out casual games for the web-based gamers.  I'd been planning on investigating Flash in the form of Flex -- given the inroads Flash has made in online video, I'm already way behind the curve in failing to embrace Flash in some form -- but he encouraged me to just blow the $400 and get the visual development tools and work with the real thing.  Probably a good idea.
</p>

<p>
One of the Flash games I mentioned was <a href="http://adisney.go.com/disneyvideos/animatedfilms/cars/us/games/games_luigi.html">Casa Della Tires</a>, a game based on the animated movie <i>Cars</i>, in which you move Guido, the forklift character, back and forth to catch and stack flying tires, then launch the stack to collect your points.  My point to Hal was that it perfectly points out the hazards of "doubling"-based scoring systems for games.  Specifically, your stack of tires scores you 100 points for the first tire, 200 for the second, 400 for the third, etc.  You also get one second of bonus time for each tire you toss.
</p>

<p>
How many points do you suppose you can get on a good day?  A couple good stacks and maybe you can get to a million?
</p>

<p>
Try 223 <i>billion</i>.  Enough to blow out the space reserved for the score label.
</p>

<p>
<a href="http://weblogs.java.net/blog/invalidname/archive/luigi-223-billion.png " border="0"><img alt="luigi-223-billion.png" src="http://weblogs.java.net/blog/invalidname/archive/luigi-223-billion.png" width="403" height="319" /></a>
</p>

<p>
How do you do this?  Exploit the doubles.  Forget about making nice stacks of 10 tires, and instead play the entire game to get a single stack of 30, enough to go to the top of the screen.  Once you have about 10-12, move to the left (where the tires come from), and stop moving - you won't be able to avoid piling the tires up to the top of the screen.  Boom: billions of points.  Because of the mathematical nature of the scoring system, you can accomplish in one massive throw what would take a week of shorter stacks.
</p>

<p>
The same thing is true of <a href="http://en.wikipedia.org/wiki/Skee_Ball">Skee Ball</a>.  My thinking there is that a decent Skee score starts around 300 -- every three balls, if you hit two 40's and a 20 (meaning your 40 missed), nine balls gets you a 300.  That's fine, and you get decent tickets for that.  But a lot of places now have a progressive jackpot that's often set at 500 points... very makable with a new twist, the "Skee Ball Lightning" feature that doubles point values at random (about 1 out of every 5 balls).  You'll probably never hit five 100's in a nine-ball game, but if you play enough games, you can probably hit two that get doubled, which gets you 400.  Hit these early in the game, and you can use safe shots to get your 500.  When one of my son's plushy toys was falling apart, I took $10 to the local Skee Ball joint and used this approach to hit the jackpot and get a new toy.
</p>

<p>
OK, forced Java analogy, but there's a bit of concept of the "jackpot" in technology buzz.  If each adoption of a technology gets two more people to adopt the same technology, the exponential growth can be breathtaking.  We've seen this in the last year with Flash for online video -- in the 18 months or so since YouTube hit the scene, Flash video has been popping up everywhere.  All the various developer chat sites (JavaPolis videos, even the <a href="http://blogs.sun.com/SDNChannel/">SDN Channel</a>) use it, and I increasingly see sites abandoning the usual media players (Real, Windows Media, and QuickTime) in favor of Flash (the <a href="http://www.adultswim.com/">Adult Swim Fix</a> is a particularly prominent example of this, having abandoned Windows Media for Flash).  Anyways, one site goes Flash for their video, others see it and they go Flash, others see those, etc.  And suddenly, Adobe has 223 billion points.  </p>

<p>
How did we manage to not accomplish this with Java, despite the 10-year head start?  After all, YouTube video is basically bastardized H.263, and even the all-Java JMF can play <i>that</i>.  I suspect the distribution/deployment story is a lot stronger than any of us appreciate or care to admit.
</p>

<p>Worth noting: Flash does nothing to advertise its presence.  There's no Adobe/Macromedia loading screen in modern Flash presentations, and you generally have to look at the page's source and search for <code>.swf</code> to verify if something is Flash.  Is it possible that the starburst "Java" logo when loading applets is a <i>bad</i> idea?  Or is it bad just because it takes so long to load the JVM and an applet that you need a loading screen?</p>

<p>
Speaking of video, I need to get in some more cycles on <a href="https://keaton.dev.java.net">Keaton</a>, the Java-to-QTKit wrapper, but it was a relief that enough of the stuff is in place that I could get significant code compiled, working, and checked in during a 30-minute lull while visiting the Java Posse's rented house at the Java Posse Roundup the other week.  I need to get Keaton going because there's more reason to think that QTKit is the future of media on the Mac.  The <a href="http://developer.apple.com/wwdc/sessions/">WWDC sessions list</a> came out this week, and it's worth noting that QTKit gets a session and a lab, while the other QuickTime variants -- the traditional procedural-C QuickTime API, QuickTime for Java, and QuickTime for Windows -- don't get mentioned at all.  I'm thinking that's a none-too-subtle hint about Apple's media direction for the next few years.  There's also a session about "AJAX Methodologies for QuickTime Development", which I think just calls attention to the fact that the QuickTime plug-in can be controlled with JavaScript... this seems like a somewhat cynical/desperate attempt to get some Ajax buzz, and given that the appeal of Ajax is that offers a better-than-flat-HTML experience, tying it to a plugin that's only supported on two platforms is probably not something that's got a lot of legs.
</p>

<p>
And then there's Blu-Ray.  Which I rather infamously <a href="http://www.oreillynet.com/onjava/blog/2006/05/bluray_is_pissing_me_off_again.html">hated</a> at last year's JavaOne (oh look, I'm the number five result when you <a href="http://www.google.com/search?ie=utf-8&oe=utf-8&q=javaone%20blu-ray">Google for javaone and blu-ray</a>... I'm surprised I haven't gotten corporate hate mail).  The funny thing is, despite what I saw as a miserable performance last year, Blu-Ray is back in a <i>big</i> way at JavaOne 2007, combined with Interactive TV and basically getting their own mini-track on Thursday, and a <a href="http://java.sun.com/javaone/sf/javatvday.jsp">special page on the JavaOne site</a>.  I just hope they think to tailor this year's presentations to developers and not to content authors, because there are a lot more of the former than the latter at JavaOne.  Blu-Ray has already ruined the PlayStation 3; don't be messing up JavaOne too (oh, I'm getting comments for <i>that</i>...).</p>]]>

</content>
</entry>
<entry>
<title>Safety Last!</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/invalidname/archive/2007/02/safety_last.html" />
<modified>2007-02-27T20:40:47Z</modified>
<issued>2007-02-27T20:40:26Z</issued>
<id>tag:weblogs.java.net,2007:/blog/invalidname/50.6688</id>
<created>2007-02-27T20:40:26Z</created>
<summary type="text/plain">In which I kick off a new Java-QuickTime wrapper project, and kill off an old one.</summary>
<author>
<name>invalidname</name>

<email>cadamson@oreilly.com</email>
</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/invalidname/">
<![CDATA[<p>I think I've been talking up QuickTime and Java in ways that seem to have confused people.  Just the other week, the <a href="http://www.javaposse.com">Java Posse</a> talked about "that stuff that Chris Adamson did", and I'm like "oh crap, did they just say I wrote QuickTime for Java?"</p>

<h4>The Freshman</h4>

<p>Soooo... let's reset.  Let's go way back.  Way way back.  We're talking "first season of <i>The Simpsons</i>" back.  1990, when Apple released QuickTime 1.0, a System Extension providing dynamic media capabilities to Macs running System 7 (and, to a lesser degree, to those on 6.0.8).  Like most stuff at the time, this framework was, and continues to be, written in and called by procedural-C.</p>

<p><i>The term "QuickTime" is also associated with the file format and with provided applications such as the "QuickTime Player", but for the purposes of this blog, we're only interested in the multimedia framework.</i></p>

<p>During the 90's, Apple launched a couple of companies in collaboration with IBM.  One of them was <a href="http://en.wikipedia.org/wiki/Kaleida_Labs">Kaleida Labs</a>, which created an object-oriented, garbage-collected computing platform.  Unfortunately, instead of creating Java, they created ScriptX.  And I can tell by your puzzled reactions that you've never heard of it.  In fact, according to Owen Linzmayer's <i>Apple Confidential 2.0</i>, the Kaleida misadventure resulted in only two pieces of software that could be used in the Classic Mac OS: some Unicode text classes, and <a href="http://developer.apple.com/quicktime/qtjava/">QuickTime for Java</a>.

<h4>The General</h4>

<p>QuickTime for Java provided something that the original, ever-expanding QuickTime library didn't: an object-oriented interface.  This made it fairly appealing in the late 1990's, when for a time it seemed like everybody was going to rewrite their applications in Java.  Apple was apparently worried that existing QuickTime developers would not only change languages, but possibly media frameworks as well.  There's a "Summary of QuickTime for Java" -- I cited it in my QTJ book, but it has disappeared from Apple's site in the intervening years -- that basically spells out Apple's motivation as wanting to continue to provide access to QuickTime, even if developers didn't use C anymore.  It even had gentle introductions to Java concepts like object-orientation and garbage collection, while assuming prior knowledge of hard-core QuickTime concepts like reference movies and updating resources.  In other words "we'll help you with Java, if you must go that way, but please keep using QuickTime".</p>

<p>The result was that Java developers had, on Mac and Windows anyways, a powerful (if hard-to-use and poorly-documented) media framework, the only one that ever gave Java developers significant creative capabilities like editing.</p>

<p>Problem is, QTJ was a pretty massive effort -- by class count, it is about as large as Java 1.1 -- and that made maintenance difficult.  Furthermore, the mass defection to Java as a desktop platform didn't happen (or happened and was quickly reversed), so application developers ended up continuing to write native Mac and Windows apps and use the native libraries.  In time, Apple lost interest in QTJ.  They managed to break it in 2003 when they moved their Mac OS X Java implementation from Carbon to Cocoa, and fixed it with a radically new version six months later, and that's about the last time they put in a lot of work on QTJ.</p>

<h4>Our Hospitality</h4>

<p>A lot of people still like QTJ, and have wanted to do more with it.  In 2006, I started the <a href="https://lloyd.dev.java.net/">Lloyd</a> project.  The plan was to do what Apple wasn't doing: continue QTJ development, by writing open-source Java wrappers to procedural-C API's that hadn't been exposed as QTJ classes.  I started working on some metadata stuff that was introduced in QuickTime 7.  I also wanted to provide an on-screen preview component for video cameras, a feature that had been in earlier versions of QTJ but not after the big breakage of 2003, particularly given that an <a href="http://lists.apple.com/archives/QuickTime-java/2005/Nov/msg00036.html">all-Java method of doing so</a> was posted to the <code>quicktime-java</code> list.  I showed off both of these at JavaOne 2006.  And I really didn't do much else with it -- I never even attempted to get the native code working as a Windows DLL -- because I was really slammed editing both java.net and ONJava, and trying to do some programming on the side. </p>

<p>You see, at that time, I was also working on a QTJ application for <a href="http://www.veldhiezen.com/">Veldhiezen Group</a>, who were looking for a simple "capture and go" type application.  Their chief interest was an interesting feature, the ability to compress at capture time, rather than capturing uncompressed and then do a separate compression step.  This necessitated working on the capture preview component and working through a lot of fascinating bugs, including handling changes to the camera settings (if you're expecting pixels in one format, and the format changes, you'll either render garbage or blow out a pixel buffer), dealing with some undocumented threading craziness on windows that was causing deadlocks, catching a bug that mangled the captured audio, etc.  My plan was to put what I'd learned about capture previews back into Lloyd.</p>

<p>But in getting help from Apple, they weren't crazy about the idea.  At first I thought it was that they thought I was drawing too heavily on not-for-public-consumption code, but it was more than that.  They were concerned about leading too many people to base their apps on QTJ because if you hadn't noticed the lack of interest in QTJ over the previous three years, or its heavy dependence on deprecated native libraries like QuickDraw, the point was obvious: QTJ is no longer being actively developed, and depending on a heading-towards-obsolescence library is a Bad Idea.</p>

<h4 >Sherlock, Jr.</h4 >

<p>"OK," I'm thinking, "QTJ is breathing its last, and the existing alternatives <a href="http://www.oreillynet.com/onjava/blog/2006/12/rebooting_java_media_act_ii_de.html">all suck</a>, so now what are we supposed to do?"</p>

<p>It turns out that I had <a href="http://www.oreillynet.com/pub/a/mac/2005/06/28/quicktime.html">taken a look at QTKit</a>, the new Cocoa-friendly, object-oriented API for media programming on the Mac.  Initially, it seemed at most a pleasant diversion, but Apple has been talking it up more and more in the last year or so.  For example, their <a href="http://developer.apple.com/leopard/overview/">Leopard Overview</a> notes that QTKit will be the <i>only</i> way to write 64-bit QuickTime applications... the straight-C API will remain 32-bit only.</p>

<p>Well, that's interesting, I thought.  And it got me thinking... there's almost 20 years of legacy code in QuickTime, some of which surely supports features that are either deprecated (the old Image Compression Manager that can't handle bi-directional codecs like H.264) or just quietly elided in Apple marketing (anyone remember wired sprites?).  Someday, Apple will want to get rid of all that stuff, but without breaking anybody's apps, or QuickTime itself.  So what if they created a simpler wrapper framework, got most people to move over to that, and then changed the framework so instead of wrapping QuickTime, it would be a concrete implementation of its features?  Total conjecture, but I think QTKit might be part of a massive, decade-ish-long plan to migrate QuickTime over to Cocoa, eventually abandoning the legacy code instead of modernizing it.  Obviously, if that's the case, then there are interesting implications (what becomes of QuickTime for Windows or QTJ?  how much of the existing functionality will developers demand be migrated to QTKit?), and it'll be worth watching.</p>

<h4 >Feet First</h4 >

<p>But at any rate, there's this modern, object-oriented media API, the apparent future of Apple's media API's... and you can't call it from Java. Well, that sounds like a straightforward to-do.  How hard could it be to write some JNI code to map Java objects to Objective-C objects?</p>

<p>As it turns out, pretty hard if you don't have a comfort level with Objective-C.  But at least I've got the ball rolling... enough to put some code out there in the <a href="https://keaton.dev.java.net/">Keaton</a> project.  Keaton is a Java wrapper to QTKit, in pretty much the same way and for the same reasons that QTJ existed to allow Java apps to use QuickTime.</p>

<p>Don't get your hopes up yet; I've only barely started.  I've made it far enough to know that it works and is practical.  Specifically, I have two classes with one or two meaningful methods each, just enough to allow you to create a <code>QTMovie</code> object from a <code>java.net.URL</code> and render it with a <code>QTMovieViewComponent</code> AWT object.  This is what the <a href="https://keaton.dev.java.net/source/browse/keaton/trunk/code/java/org/jvnet/keaton/TestQTMovieViewComponent.java?rev=8&view=markup"><code>TestQTMovieViewComponent</code></a> class does:</p>

<pre><code>
    System.out.println ("Creating movie for URL: " + u);
    QTMovie movie = new QTMovie (u);
    System.out.println ("Created movie");

    // set movie on the view
    qtmvc.setMovie (movie);
    System.out.println ("Set movie on view");
</code></pre>

<p>Here's what the test app looks like, with movies loaded into both its windows:</p>

<p><img alt="keaton-test-02-27-07.png" src="http://weblogs.java.net/blog/invalidname/archive/keaton-test-02-27-07.png" width="671" height="458" /></p>

<p>The code is extremely primitive at this point, with lots of logging messages and no Obj-C memory management whatsoever.  I also crashed trying to open some multi-GB DV files.  But the idea works, the whole thing builds with Ant (the <code>.jnilib</code> is even a "universal binary"), and I'm pretty confident that the rest of the QTKit API can be wrapped pretty much with the basic ideas in these classes.  Now it's just a matter of taking the time to do so.</p>

<h4>Go West</h4 >

<p>But what does it accomplish?  After all, Keaton will only run on Mac, since that's the only platform QTKit exists on.  Well, for me, it's an opportunity to get deeper into QTKit and broaden my understanding of media frameworks in general.  It might also be useful for developers putting together media apps who need a Mac solution... lots of times, we're forced to use an "isolation layer" approach, in which you put up an API with interfaces for the functionality you need on all platforms, and then back that up with platform-specific implementations you load at runtime (I think <a href="https://ion.dev.java.net/">ION</a> does this, using both JMF and QTJ and whatever else it can find).  It's not an ideal solution, but people have been waiting 10 years for an ideal solution to Java multimedia, and it's obviously not coming, so we need to do what we can with what we've got.</p>

<p>OK, so there's my brain-dump about what I've been playing with media-wise.  Thanks for indulging me.  Check back in a few months and I might have something worth trying out.</p>]]>

</content>
</entry>
<entry>
<title>Five things (yes, another)</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/invalidname/archive/2007/01/five_things_yes.html" />
<modified>2007-01-06T13:33:36Z</modified>
<issued>2007-01-06T13:13:10Z</issued>
<id>tag:weblogs.java.net,2007:/blog/invalidname/50.6273</id>
<created>2007-01-06T13:13:10Z</created>
<summary type="text/plain">Vanity, thy name is the &quot;five things about me&quot; tagging game.</summary>
<author>
<name>invalidname</name>

<email>cadamson@oreilly.com</email>
</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/invalidname/">
<![CDATA[<p>Vanity, thy name is the "five things you wouldn't know about me" tagging game.  But Joshua <a href="http://weblogs.java.net/blog/joshy/archive/2007/01/tag_im_it.html">thinks</a> I'm due.  I will try to make this interesting for the passing observer... not easy when blogging is already part of my job description</p>

<ol>
   <li><p><b>One of my freshman roommates was <a href="http://www.paypal.com">PayPal</a> co-founder <a href="http://en.wikipedia.org/wiki/Peter_Thiel">Peter Thiel</a> - </b> We weren't very close and haven't spoken in 20 years, so it's pretty much just an interesting coincidence.  Still, it's funny we both consider ourselves "libertarians" today, because we rarely saw eye-to-eye on political matters back then.</p></li>
   <li><p>Speaking of freshman year <b>I threw a copy of <i>Dune</i> out my freshman dorm window - </b> I had a sudden epiphany that it was the Bible according to Frank Herbert, and we have too many bibles as it is.  Still, recent years have made me more receptive to things like the <a href="http://en.wikipedia.org/wiki/Litany_against_fear">litany against fear</a> ("I will not fear.  Fear is the mind killer, etc."), so maybe I'll give it another shot someday.  Still, don't tell <a href="http://tim.oreilly.com/">Tim</a> (he likes <a href="http://tim.oreilly.com/herbert/">Herbert</a> a <i>lot</i>).</p></li>
   <li><p><b>That's not a double chin or a cleft chin, it's a scar - </b> When I was 5 or 6, I went sledding face first into either Karen Rynne's boot or the toboggan she was towing behind her.  Either way, I shattered my jaw and it had to be wired back together.  Ow, but not the worst "ow" I've ever managed.</p></li>
   <li><p><b><a href="http://weblogs.java.net/blog/joshy/">Joshua Marinacci</a>, <a href="http://weblogs.java.net/blog/mdi">Michael Ivey</a>, and  <a href="http://www.oreillynet.com/pub/au/2413">Robert Cooper</a> and I all worked together at the same company - </b>   Josh left, but Cooper, Ivey and I were also at its post-merger successor for a short while before they laid off all the engineers.  For legal reasons (management threatened to sue me when I blogged about the layoff), I consistently refer to the firms only as "Worthless Piece of Crap Wireless Company No. 1" and "Worthless Piece of Crap Wireless Company No. 2".  Both companies have long since ceased to exist in any meaningful form.</p></li>
   <li><p><b>I'm also <a href="http://annotatedalchemist.libsyn.com">The Annotated Alchemist</a></b></p></li>
</ol>
<p>OK, hope that was duly unexpected.  I'd like to push this meme out to non-programming types, but all my college friends in entertainment and medicine don't blog.  Still, I'll try to mix it up a little:  <a href="http://weblogs.java.net/blog/mdi">Michael Ivey</a>, <a href="http://www.spankaroo.com/">Dave Hyatt</a>, <a href="http://hornik.typepad.com/">Dave Hornik</a>, <a href="http://tammyandtom.blogspot.com/">Tammy Frederick</a>,  and <a href="http://mkb_cbr.livejournal.com/">Mike Brodhead</a>, you are now on the clock.]]>

</content>
</entry>
<entry>
<title>Apple&apos;s 2006 JavaOne BoF</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/invalidname/archive/2006/05/apples_2006_jav.html" />
<modified>2006-05-19T01:14:16Z</modified>
<issued>2006-05-19T00:41:00Z</issued>
<id>tag:weblogs.java.net,2006:/blog/invalidname/50.4836</id>
<created>2006-05-19T00:41:00Z</created>
<summary type="text/plain">Apple offers Mustang b82 for PowerPC and Intel, shows SWT coexisting with AWT and Swing, and takes a look at Aerith.</summary>
<author>
<name>invalidname</name>

<email>cadamson@oreilly.com</email>
</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/invalidname/">
<![CDATA[<p>It wasn't easy staying up for a 10:30 BoF from Apple, but it's a tradition, so Daniel, Josh, Cooper and I hung out at Moscone until the wee hours.</p>
<p>It was worth it.</p>
<p>Apple's Alan Samuel set out to break some widely-held misconceptions, by making two interesting releases.  The first misconception was that since Apple had released a Mustang developer preview for Intel Macs, that it had already turned its back on PowerPC.  This was dispelled by the announcement of Developer Preview 2, which supports both Intel and PPC.</p>
<p>The other misconception was that Apple was not supportive of SWT.  At this point, Alan welcomed engineer Scott Kovatch, who showed off a demo of a new compatbility library that allows SWT widgets to coexist with AWT and Swing widgets.  In his example, an SWT text field shared a window with a Swing JTree and some AWT widget I don't recall.</p>
<p>They marked the occasion by clearing the bug in Ecilpse's Bugzilla... well, they put a comment into Bugzilla, but forgot to change the status from <code>NEW</code> to <code>FIXED</code>, so a few hundred developers tracking the bug got an e-mail about the new comment, and presumably will get a more complete update later.</p>
<p>Both of these announcements were mirrored in a java-dev mailing list entry <a href="http://lists.apple.com/archives/Java-dev/2006/May/msg00300.html">Ann: Java SE 6 for PPC and Intel and SWT Compatibilty Libraries now available!</a>, so those not at JavaOne could join in the fun too.</p>
<p>In a remarkably impressive demo, Scott showed the <a href="http://aerith.dev.java.net/">Aerith</a> demo from Tuesday's general session, running in the pre-release Mustang for Mac.  While a little pokey, it maintained all of the lavish JOGL-powered graphics, seamlessly rendering in the Swing environment, in all of Aerith's OSX-inspired 3D reflective goodness.</p>
<p>A  <a href="http://developer.apple.com/tools/sharkoptimize.html">Shark</a> demo was planned, but time ran out.</p>
<p>Late night, but well worth it.</p>]]>

</content>
</entry>
<entry>
<title>Phishing for JavaOne attendees</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/invalidname/archive/2006/05/phishing_for_ja.html" />
<modified>2006-05-16T22:40:02Z</modified>
<issued>2006-05-16T22:39:54Z</issued>
<id>tag:weblogs.java.net,2006:/blog/invalidname/50.4778</id>
<created>2006-05-16T22:39:54Z</created>
<summary type="text/plain">Be careful what wireless network you join at javaOne.  Think twice about sending a password by way of &quot;Free Internet Access&quot;</summary>
<author>
<name>invalidname</name>

<email>cadamson@oreilly.com</email>
</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/invalidname/">
<![CDATA[<p>I thought the "fake wifi network so we can steal your passwords" schtick was played out two JavaOnes ago, nevertheless, here's what the air looked like in the Tuesday morning general session:</p>
<p><img alt="fake-wifi.png" src="http://weblogs.java.net/blog/invalidname/archive/fake-wifi.png" width="280" height="332" /></p>
<p>Sigh.  Who are these bottom-feeders, and how did they get into JavaOne?</p>]]>

</content>
</entry>
<entry>
<title>Come for the power, stay for the community</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/invalidname/archive/2006/05/come_for_the_po.html" />
<modified>2006-05-16T14:35:34Z</modified>
<issued>2006-05-16T14:35:25Z</issued>
<id>tag:weblogs.java.net,2006:/blog/invalidname/50.4759</id>
<created>2006-05-16T14:35:25Z</created>
<summary type="text/plain">What the java.net booth has that most booths and sessions don&apos;t: sofas, mini-talks, and a power-strip.</summary>
<author>
<name>invalidname</name>

<email>cadamson@oreilly.com</email>
</author>
<dc:subject>JavaOne</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/invalidname/">
<![CDATA[<p>I spent part of yesterday afternoon at the java.net booth, helping set up for <a href="https://jnpodcasts.dev.java.net/">podcasting</a> the <a href="http://wiki.java.net/bin/view/Javaone/CommunityCorner#MiniTalksSched">mini-talks</a>, which start today at 11.</p>
<p>The booth arrangement is <i>really nice</i> this year: on one side, we have the kiosks for signage, literature, and computers, which allow community leads and project owners to show their stuff and meet with people.  At the opposite side is the screen, speakers and podium for the mini talks, with a backdrop behind the screen so the light from nearby booths doesn't distract you.  In front of the podium is seating for about 16-20.</p>
<p>And in between we have a pair of comfy sofas for java.net members to hang out in and enjoy the mini-talks from the back row.  The sofas have a coffee table for your drinks/snacks/laptop, and on top of the table we have the rarest of all things at JavaOne: <i>a power strip</i>.  Yes, you can relax and recharge in the booth... literally... while you meet other community members and get the 20-minute info dumps that are the mini-talks.</p>
<p>I did an interview with java.net Community Manager Marla Parker while the booth was still under construction, which you can hear as <a href="https://jnpodcasts.dev.java.net/servlets/NewsItemView?newsItemID=3703">our latest podcast</a>.</p>
<p>So do come by.  Booth 532.  Under the big orange "java.net" banner.  Just listen for the sound of community and innovation.</p>]]>

</content>
</entry>
<entry>
<title>A Snowy Day in Cleveland</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/invalidname/archive/2006/02/a_snowy_day_in_1.html" />
<modified>2006-02-28T13:22:49Z</modified>
<issued>2006-02-27T22:07:32Z</issued>
<id>tag:weblogs.java.net,2006:/blog/invalidname/50.4209</id>
<created>2006-02-27T22:07:32Z</created>
<summary type="text/plain">A personal tragedy, and a note of deepest appreciation.</summary>
<author>
<name>invalidname</name>

<email>cadamson@oreilly.com</email>
</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/invalidname/">
<![CDATA[<p>It's snowing in Cleveland today.  A cloudy, gray snow that hoses your visibility and slows down traffic.</p>
<p>I drove through this snow today, to the funeral of Elena Steinberg.  Elena was the six-year-old daughter of Daniel Steinberg, our editor-in-chief and the first editor of java.net.  She died suddenly last Wednesday.</p>
<p>I don't want to focus on their family's heartbreak.  Instead, I want the java.net community to understand how much Daniel and his family mean to us.</p>
<p>To me, Elena was the voice in the background that would pop in when Daniel and I were voice-chatting about the site.  We'd be planning, scheming, or kvetching about something, and I'd hear this "daaaaaa-dee?" in the background.  On the surface, it meant that someone wanted lunch, or permission to do something... but it also meant that Daniel's family was a constant, important part of his work.  If you recall the daily blogs of his tenure, you'll remember he was constantly talking about what his girls were doing, and the kinds of thoughts it brought to mind.</p>
<p>I wasn't going to blog about this... I'm just not sure it's appropriate... but seeing hundreds of people in the church made me appreciate how much the Steinberg family is involved with their many communities: school, church, family, and work.  Author James Duncan Davidson was there.  So was Apple Java engineer Scott Kovatch.  And the former head of O'Reilly's Online Publishing Group, Bruce Stewart. <i>(update: I've since learned that O'Reilly's Nancy Abila, Mike Loukides, and Sarah Kim were also in attendance, as was java.net author Jonathan Simon)</i>  And that community involvement made me think.</p>
<p>Daniel was one of the key movers in the launch of java.net a few years ago, and has been instrumental in making this community succeed.  Maybe arguing hypotheticals is bunk, but I honestly don't believe that this site would even be here had he not been O'Reilly's top person on the project.  He is a voice for not just this community, but for the idea and the ideals of an open-source community: what it can do, what it should do.  Think it's easy?  Look at all the failed "build it and they will come" community sites that were launched over the last few years.  There's more to it than throwing up a source-control server and a web page.</p>
<p>It is to Sun's credit that they will bring on as partners people who say things that Sun doesn't want to hear, but needs to hear.  Daniel has had to say a lot of those things.  It's not easy.  You get insulted, you get attacked, and when you don't win, you get blamed by people who you probably agree with.  Personally, I haven't been fighting nearly enough of these battles to support him.  He's had to take a lot of the heat himself, and I feel terrible about that.  Everyone at Sun and Collab, you're now on notice: I am the new "bad cop".  Daniel can retire.</p>
<p>While continuing as our editor-in-chief, Daniel has been working on some new projects.  If you're a podcast listener, you know him as the producer, writer, and voice of O'Reilly Network's <a href="http://www.oreillynet.com/future/">Distributing the Future</a> podcast.  You probably didn't, however, know that he used to be a radio DJ.  Listen to the voice and you can hear it.  He's also writing one of the few books the world really needs, <i>Head First Calculus</i>.  Learning Calculus is one of the two things I've insisted that my children will have to do when they're teenagers (the other is learning to drive stick-shift).  When work resumes on that, you can follow the progress on his <a href="http://extremeteaching.wordpress.com/">Extreme Teaching</a> blog.</p>
<p>Daniel has done so much for our java.net community, and for me personally.  He helped cover my work on the sites when we were in the hospital for three weeks with my son's third heart surgery.  I'm taking some of his work until he can return, and I don't care how long it takes.  Stuff will get done.</p>
<p>It's still snowing in Cleveland.  In California, millions of bits are passing through the java.net servers.  It's supposed to snow again tomorrow, and the site will continue on too.  Projects will get started, code will be checked in and out, and I'll pull together a new front page.  Most of this will go on as it always has.</p>
<p>But some things can never be the same again.</p>]]>

</content>
</entry>
<entry>
<title>Apple&apos;s JavaOne BoF</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/invalidname/archive/2005/07/apples_javaone.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-07-08T12:41:22Z</issued>
<id>tag:weblogs.java.net,2005:/blog/invalidname/50.2896</id>
<created>2005-07-08T12:41:22Z</created>
<summary type="text/plain">Apple&apos;s last-minute BoF&apos;s at JavaOne were surprisingly generous with details about how the Intel transition will (and won&apos;t) affect Mac Java programmers.  Plus, making the &quot;A-ha&quot; video with your iSight.</summary>
<author>
<name>invalidname</name>

<email>cadamson@oreilly.com</email>
</author>
<dc:subject>Community: Mac Java Community</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/invalidname/">
<![CDATA[<p>Apple offered two surprise BoF's at JavaOne - a "surprise" because they hadn't previously been announced or expected and just appeared in the addendum and corrections to the JavaOne show schedule.  Still, about a hundred developers managed to find their way over to the Marriott to see the show.</p>

<p>I got there too late to see the formal introductions on the first presentation, which was well into describing the affects of the Intel transition when I arrived.  Also, if there was an NDA warning, I missed it, though the second BoF wasn't NDA and it would be impossible to enforce an NDA at these offsite BoFs anyways, so I don't seriously think Apple would say anything they didn't want to share.</p>

<p>The message about the Intel transition is, by and large, <i>it just works</i>.  Of course, as a Java programmer, you'd expect this -- your code only sees the JVM, not the architecture underneath.  The gotcha, of course, is that JNI native code needs to be recompiled, and you could have Java-side endianness hassles, depending on how you interact with JNI.</p>

<p>A little more interesting was the discussion of the various virtual machines for Mac OS X.  Buried in this was the implicit announcement that <i>1.3.1 on OS X is end-of-life'd</i>, as it won't be available on Intel-based Macs.  If you depend on this Carbon-based JVM, it's time to work out any issues you have with 1.4.2 (or the nascent 5.0).  The speakers also presented some performance comparisons of two Hotspot compilers: the "C1" that's currently available, and "C2" which apparently will only be available on MacIntel, not PowerPC.  C2 is more aggressive in compiling Java bytecode into native code so it can run faster than C1, but depending on the choices it makes about what to compile and when, it may be slower than C1.</p>

<p>Personally, I'm still adjusting to the thought that the register-challenged x86 can so soundly trounce PowerPC to make the transition necessary, but I guess PowerPC really does have feet of clay.</p>

<p>They noted that the current game-plan gives them six VM's to support (and they didn't seem happy about that prospect):</p>

<table border="1">
  <thead>
    <tr>
      <td bgcolor="orange">PowerPC JVM's</td>
     <td bgcolor="orange">Intel JVM's</td>
    </tr>
  </thead>
  <tbody>
    <tr><td>1.3.1</td><td>1.4.2</td></tr>
    <tr><td>1.4.2</td><td>5.0 Hotspot C1</td></tr>
    <tr><td>5.0 Hotspot C1</td><td>5.0 Hotspot C2</td></tr>
  </tbody>
</table>

<p>At the end of this BoF, they also showed how to set up XCode to work with the recently-released J2SE 5.0 instead of the default 1.4.2</p>

<p>In the Q&A, several attendees questioned... berated, actually... Apple's decision not to back-port J2SE 5.0 to Panther or earlier versions of Mac OS X.  The Apple guys replied that they're always "forward looking" and that using the newest version of the OS lets them use the latest native SDK's to deliver a better JVM.  Not mentioned was the fact that this has long been Apple's Java policy:  Java 1.2 was never made available on the "classic" Mac OS, 1.4.2 was Panther-or-better, etc.  So IMHO, you may not like it, but at least don't be surprised.</p>

<p>Part 2 was a show and tell.  The demo I remember best was the <a href="http://developer.apple.com/documentation/Java/Reference/1.4.2/appledoc/api/com/apple/eawt/CocoaComponent.html">CocoaComponent</a> demo, which allows you to put native graphics into your Mac Java application in a reasonably straightforward manner.  The demo showed various Quartz Composer compositions running in a Swing GUI.  Surely the most amusing of these was the "Aha Video", which grabbed video from an iSight, dropped the frame rate, and used an effect to convert the video to white with black outlines, effectively aping the classic "Take On Me" music video with a live source (playing the song as an MP3 helped the effect too).  The demo is <a href="http://developer.apple.com/samplecode/QCCocoaComponent/QCCocoaComponent.html">available on ADC</a>, as is <a href="http://developer.apple.com/samplecode/QDCocoaComponent/QDCocoaComponent.html">another CocoaComponent demo</a> which grabs from your capture device into an AWT window... something that the QuickTime for Java community has been begging to have back after it was removed from QTJ in the 2003 deprecatastrophe.</p>

<p>Surely I've forgotten stuff.  Hopefully someone else who attended can point out other items of interest in the talkbacks below...</p>]]>

</content>
</entry>
<entry>
<title>The Power Game</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/invalidname/archive/2005/06/the_power_game.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-06-27T20:34:47Z</issued>
<id>tag:weblogs.java.net,2005:/blog/invalidname/50.2712</id>
<created>2005-06-27T20:34:47Z</created>
<summary type="text/plain">JavaOne.  15,000 developers.  15,000 laptops.  And about 30 spare power outlets.</summary>
<author>
<name>invalidname</name>

<email>cadamson@oreilly.com</email>
</author>
<dc:subject>JavaOne</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/invalidname/">
<![CDATA[<p>JavaOne is underway, with a lenghty Monday morning general session laying out the future of the Java SE and Java EE platforms.  I took dutiful notes, for use in a show recap that will appear on <a href="http://www.onjava.com/">ONJava</a> Wednesday night.  When it was over, my battery had about a 21% charge.</p>

<p>That's when it hit me:  <b>there are no power stips in the public areas</b></p>

<p>Last year's JavaOne was generous with the access to power - my routine was to lounge by the video games atop Moscone South, plug in, and recharge.</p>

<p>Not so this year.  I've already developed an eagle eye for spotting spare outlets: hey, there's a strip poking out from under that table... hey, there's a free outlet on the strip powering those XBoxes... hey, if I unplugged this SunRay, do you think anyone would notice?</p>

<p>Unless the situation is particularly better in the session rooms, we're going to have a whole bunch of dead batteries and unhappy campers early this afternoon.</p>

<p>I'm writing from the press room, which has a few strips hidden under the tables - battery now at 47% - but that's not a solution to everyone else who mingles in public areas.  I'm thinking very seriously about walking up to CompUSA and buying a power strip to lug around this week so I can share what few outlets I find with others.</p>

<p>BTW, if you find a good source of recharge power, don't hoard! Please post it to the talkbacks!</p>]]>

</content>
</entry>
<entry>
<title>Getting the free disk space</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/invalidname/archive/2005/06/getting_the_fre.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-06-04T03:46:37Z</issued>
<id>tag:weblogs.java.net,2005:/blog/invalidname/50.2539</id>
<created>2005-06-04T03:46:37Z</created>
<summary type="text/plain">One of Java&apos;s longest-standing, most absurd deficiencies finally... and I do mean finally... gets fixed.</summary>
<author>
<name>invalidname</name>

<email>cadamson@oreilly.com</email>
</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/invalidname/">
<![CDATA[<p>IM's between me and Cooper a few weeks back:</p>
<table border="0">
<tr>
<td valign="top">Cooper:</td>
<td valign="top">Stupid question nobody seems to know... Do you know how to find out the free space available on a filesystem from java?</td>
</tr>
<tr>
<td valign="top">Me:</td>
<td valign="top">ah ha ha ha ha ha ha ha ha ha ha ha ha ha</td>
</tr>
<tr>
<td valign="top">Cooper:</td>
<td valign="top">I take it you have seen that before?</td>
</tr>
<tr>
<td valign="top">Cooper:</td>
<td valign="top">:-=</td>
</tr>
<tr>
<td valign="top">Me:</td>
<td valign="top">I'm looking up the RFE for you</td>
</tr>
<tr>
<td valign="top">Me:</td>
<td valign="top"> suffice to say, for now, you're Runtime.exec()'ing a du and scraping stdin.</td>
</tr>
<tr>
<td valign="top">Cooper:</td>
<td valign="top">Well, that will be a very cross platformy thing now won't it?</td>
</tr>
<tr>
<td valign="top">Me:</td>
<td valign="top">ah ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha</td>
</tr>
</table>

<p>Well, I guess I can take the "ha " out of my clipboard now, because the Sun bug-bot sent me an e-mail to say that <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4057701">Bug 4057701 (Need way to find free disk space)</a> has been closed as fixed.</p>

<p>The bug report shows it as being fixed in <code>mustang(b39)</code>, and thanks to the <a href="https://mustang.dev.java.net/">mustang project on java.net</a>, you can check it out for yourself.  And I literally mean <i>you</i>, because I'm on a Mac and thus can't build Mustang.</p>

<p>Still, it's a huge relief that after all this time, this embarrassing oversight/omission is finally being resolved.  And by "finally", it's worth nothing that Thursday would have marked eight years to the day after the bug was filed.</p>]]>

</content>
</entry>
<entry>
<title>New Platforms, No Java</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/invalidname/archive/2005/05/new_platforms_n_1.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-05-27T02:37:39Z</issued>
<id>tag:weblogs.java.net,2005:/blog/invalidname/50.2479</id>
<created>2005-05-27T02:37:39Z</created>
<summary type="text/plain">Three new platforms were announced last week.  Each will move tens of millions of units.  And in all likelihood, none of them will support Java.</summary>
<author>
<name>invalidname</name>

<email>cadamson@oreilly.com</email>
</author>
<dc:subject>J2SE</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/invalidname/">
<![CDATA[<p>For a long time, J2SE supporters like myself have said that the big win of J2SE is not only that you "run everywhere" today, but that future Java-capable platforms could pick up and run your software on day one.  This would be a great reason to write J2SE applications, and a great reason for platforms to build in Java support.</p>
<p>Well, three new platforms made their public debut last week:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Xbox_360">Microsoft XBox 360</a></li>
<li><a href="http://en.wikipedia.org/wiki/Nintendo_Revolution">Nintendo Revolution</a></li>
<li><a href="http://en.wikipedia.org/wiki/PlayStation_3">Sony PlayStation 3</a></li>
</ul>
<p>And it's very likely that Java won't be on any of them.</p>
<p>These platforms will sell tens of millions of units world-wide.  Indeed, Microsoft says it <a href="http://www.digitalentertainmentnews.com/feature.php?story_id=9314">aims to reach one <strong>billion</strong> people</a> with XBox Live.  Any way you look at it, this is a huge, huge market to miss out on.</p>
<p>Pessimism?  Sure, and grounded in experience.  After all, <a href="http://java.sun.com/features/2001/06/sony.html">Java for PlayStation 2 was promised and demo'ed</a> at JavaOne 2001, yet it never shipped.  Last year, the JavaOne keynote showed Java on the <a href="http://en.wikipedia.org/wiki/The_Phantom_%28game_system%29">Infinium Phantom</a> a vaporware console so loathed by the gaming community that Sun would probably be harmed by a well-known association with it.</p>
<p>Moreover, where are the apps that would make it worth it for the consoles to support Java?  They largely don't exist.  Granted, <a href="http://www.puzzlepirates.com/">Puzzle Pirates</a> is great.  We all love Puzzle Pirates.  But there needs to be a thousand applications like it to create an end-user <i>need</i> for Java, and we're about 999 applications short.</p>
<p>To channel <a href="http://weblogs.java.net/blog/editors/archives/2005/05/client_apps.html">Daniel's blog</a> a little bit: how can it be that Apple can get the computer press (yes, us included) to  practically wet themselves over <a href="http://www.apple.com/macosx/features/dashboard/">a collection of calendars, stickies, stock charts and other mini-apps</a>?  Where is the J2SE community, which could do the same thing on a potentially infinite number of devices?  Sadly, it seems we're all more interested in a pointless, self-destructive holy war over IDE's than in shipping anything anyone would ever use.</p>
<p>All of these platforms will have broadband network connections, and are talking about features like instant messaging, voice, and video chat.  Who's providing those apps, not to mention the media browsers, streaming audio clients, personal organizers, etc.?  Not us, apparently.</p>
<p>"Run everywhere" isn't very everywhere, is it?  Some days it's just "Windows and maybe Linux or Mac."  If J2SE isn't worth running on set-top boxes and game consoles, and if it's always behind or half-baked on Mac and Linux, is it ultimately just a "me too" way to write Windows applications?</p>]]>

</content>
</entry>
<entry>
<title>Java Media without Mediocrity</title>
<link rel="alternate" type="text/html" href="http://weblogs.java.net/blog/invalidname/archive/2005/04/java_media_with.html" />
<modified>2008-01-02T17:42:16Z</modified>
<issued>2005-04-21T13:52:18Z</issued>
<id>tag:weblogs.java.net,2005:/blog/invalidname/50.2325</id>
<created>2005-04-21T13:52:18Z</created>
<summary type="text/plain">If there is a future for Java Media, it probably involves MPEG-4 and probably doesn&apos;t involve JMF.</summary>
<author>
<name>invalidname</name>

<email>cadamson@oreilly.com</email>
</author>
<dc:subject>J2SE</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://weblogs.java.net/blog/invalidname/">
<![CDATA[<p>In <a href="http://weblogs.java.net/blog/mason/archive/2005/04/jmf_wherefor_ar.html">JMF, wherefor art thou?</a>, Mason Glaves wrote of his frustration with the status of <a href="http://java.sun.com/products/java-media/jmf/">Java Media Framework</a>.  Hung up on unfixed bugs and the lack of rival implementations of the spec, he writes:</p>

<blockquote>
At this point <b>Sun really needs to consider taking action</b>.  Either they need to begin active development on the RI again, or they need to come out, officially, and <b>tell the world that they have dropped support for JMF's Reference Implementation</b>.  They could sit on the code, or present it to the Open Source community for further development.  
</blockquote>

<p>I admire the open-mindedness of Mason's blog &#8212; the simple reaction would be to say "start working on it again", but Mason realizes that there would also be some upside to an explicit abandonment of JMF.  But please oblige me as I take another step back to try to get some perspective.</p>

<p>Why are we even doing media in Java?</p>

<p>There are two ways to attack this question:
   <ol>
     <li>We're already doing Java, so why do we need media?</li>
     <li>We're already doing media, so why do we need to do it in Java?</li>
   </ol>
</p>

<p>Everyone in these kinds of discussions seems to be a Java programmer, so they look at it from POV 1: they assume that the choice of Java has been made, and then media ends up being something you typically want sooner or later.  Heck, we've done this in <i>Swing Hacks</i>: we assume that if you're delivering a polished and/or cool desktop application, that you may need to incorporate sound for various reasons, and we do some stuff with JavaSound, JMF, and QuickTime for Java.</p>

<p>But I think this POV is a trap.  How can you really assume Java when, almost 10 years in, very few people are writing and delivering J2SE applications to end-users?  (and don't you dare jump to the talkbacks and type "of course Java on the desktop matters - I use Eclipse every day"; that just proves my point of J2SE irrelevance and developer myopia.)  Maybe that was the right mindset back in 1997, when all sorts of desktop apps were being furiously ported to Java, and a "build it and they will come" mentality made sense.  But it's not true today.</p>

<p>Interesting illustration of this: JMF'ers have been clamoring for an upgrade of JMF's Flash support, since it only handles Flash 2.  A <a href="http://archives.java.sun.com/cgi-bin/wa?A2=ind0210&L=jmf-interest&F=&S=&P=12811">Sun response</a> from 2002 is atypically aboveboard in spelling out that:
   <ul>
     <li>Macromedia wrote the original JMF Flash support</li>
     <li>They aren't inclined to do commit further resources to update it</li>
     <li>Sun is not inclined to update it either, and is unsure of its legal ability to do so anyways</li>
   </ul>
In other words, this is a direct repudiation of "build it and they will come," from the maker of one of the most critical internet media formats.
</p>

<p>And if Sun won't support it either, then we might as well just give up.  This is the road that Mason, and everyone else who's used JMF, has travelled.</p>

<p>But what about Plan B?  Assume media, and then get to Java?  How do we do that?</p>

<p>By being cross-platform.  That's the Java value-proposition that's always mattered.  That's why Sun, to their credit, is so determined to keep Java from forking and to enforce compatibility.</p>

<p>But then again, there's always been a cross-platform version of JMF... if cross-platform media matters, then why hasn't that taken off?  Well, there are some technical reasons.  For one thing, <a href="http://java.sun.com/products/java-media/jmf/2.1.1/formats.html">its list of supported formats</a> sucks.  As user <code>zander</code> said in a talkback to Mason: <i>right now you really have to look for a move to actually play on the darn thing</i>.</p>

<p>The funny thing is, JMF's very open, very extensible architecture should make it easy to add support for more formats and more codecs.  It doesn't have a "favorite son" format, and treats all its <code>Player</code>s and <code>Processor</code>s equally</p>

<p>And I think that may be the key problem.  Mediocrity through equality.</p>

<p>QuickTime has a favorite format, and so does Windows Media.  These API's see the world through the eyes of their favorite son formats.  For example, when you open an MP3 in QuickTime, it ceases to be an MP3, and becomes a <code>Movie</code> with an audio track of MPEG audio.  The ID3 tags are stripped from the front of the stream and become user data items.</p>

<p>Is that a bad thing?  No, it's a good thing.  It's the only way QuickTime can have an editing API &#8212; something utterly missing from JMF (despite the fact that JMF has a capture API... and what's the point of that if I can't edit what I capture?!).  Import from popular formats, export to popular formats, but have a preferred format, something rich, robust, and widely supported.</p>

<p>There's one really good choice for such a format today: <a href="http://en.wikipedia.org/wiki/MPEG-4">MPEG-4</a>.  It's an open, if patent- and license-encumbered, standard, and it's fabulously capable, with support for world-class audio, video, and even interactivity.  The latter has been a focus of IBM, whose <a href="http://www.research.ibm.com/mpeg4/Projects/index.htm">MPEG-4 Toolkit</a> offers not only an all-Java MPEG-4 video player, but also supports 2D graphics and interactivity via the <a href="http://en.wikipedia.org/wiki/Synchronized_Multimedia_Integration_Language">SMIL</a>-like XMT-&Omega; markup, and has tools to compile the markup into its binary form.  This is <b>very</b> useful to MPEG-4 developers, is frequently mentioned on the <a href="http://lists.mpegif.org/mailman/listinfo/mp4-tech">MP4-Tech</a> list and would be great if there weren't a <a href="https://secure.alphaworks.ibm.com/awlr.nsf/cl?readform&n=tk4mpeg4">big ol' license fee</a> associated with it.</p>

<p>So, is this worth doing?  I try not to spend other people's money &#8212; I'm a libertarian after all &#8212; so let's consider the possible self-interest to Sun or other parties:</p>

<ul>
   <li><i>Great MPEG-4 support might help legitimize desktop Java</i>.  Many of the things that desktop java was built to do have been done with web applications instead.  But I wouldn't want to try to manage my media collection or do any serious media work with a web app, even with flavor-of-the-month <a href="http://en.wikipedia.org/wiki/AJAX">AJAX</a> or equivalent DHTML cheese.  Done right in Java, this works on Windows, Mac, and Linux from day one (plus the emerging J2SE-on-the-device space, as <a href="http://weblogs.java.net/blog/tkosan/archive/2005/04/one_small_chang_1.html">recently noted by Ted Kosan</a>).</li>
   <li><i>If you're going to support anything new, support MPEG-4</i>.  iPods play MP3 and AAC, both products of MPEG specs.  The Sony PSP plays MPEG-4 videos off its memory card.  DVD and direct broadcast satellite are moving to the compelling <a href="http://en.wikipedia.org/wiki/H.264">H.264</a> codec.  Media is still fragmented, but MPEG-4 makes most people happy.  Java-based (<i>and Java-branded!</i>) tools help people use this media.</p>
</ul>

<p>A well-thought out approach to MPEG-4 might mean leaving JMF behind: in JMF, there's no object to represent the <i>thing</i> being played or processed (like a <code>Movie</code> in QuickTime for Java), just a <code>DataSource</code> that represents where its media comes from (or a <code>DataSink</code> that represents where it goes).  That's probably not a good metaphor for supporting editing, interacting with the variables of an MPEG-4 scene, manipulating metadata, etc.</p>

<p>This isn't necessarily a magic bullet: such an entry would be coming very late to the MPEG-4 party, would compete with QuickTime's embrace of MPEG-4 and Windows Media's attempts to make MPEG-4 irrelevant, and I still can't say with any certainty that there's enough value in cross-platform MPEG-4 support to pay for all the MPEG-4 license fees, to say nothing of the engineering.  Maybe it's something that could be explored by say, doing an open-source port of MPEG-4 reference implementations to Java and seeing how it performs and if it merits further work.</p>

<p>But I do think that JMF is a dead-end, and that if there's a future to Java Media, it's because media people will want something that only Java can provide, not because "Java people" want media.</p>]]>

</content>
</entry>

</feed>