JasperReports in Action update

My apologies for the lack of any updates on this front. Things have been crazy busy with the move and the new job and this just dropped off my radar for reasons I'll now share. It is with mixed feelings that I can say that the book has been killed. I'm mostly relieved about it but it's still a little sad. To understand why it was killed, you need to know a bit about its history. I was brought on the book about 1.5 years after it started. That's right 18 months. The publisher wasn't too happy with the state of things so I was brought in to help. Eventually because of some political stuff I won't get into here, I was bumped to primary author and a new coauthor brought on board. That author dropped off because of overcomitment with work issues. Throughout all this the publisher was getting increasingly nervous about the book's viability. While myself and my editor believed there is a decent market for the book, the publisher kept asking us to get a feel for its marketability. My own interest in the project was waning since I never really signed on to be the primary author anyway and I was getting nervous about the publisher. We might convince him now to let us finish the book, but what if he decided to pull the plug just before it goes to print?

So with all that swirling around, I had a number of conversations with my editor (and she with the publisher) and decided that no one was passionate enough about the book to take the risk to finish the work only to have it killed at the last minute. So it was mutually decided to kill the project. So while it's sad to have put so much work on the project only to have it killed, it was an enormous (and ultimately unwanted) load off my back.

I still maintain the ownership of the manuscript (the parts I wrote at least) so I can release some of it. While I feel like I own most if not all of the current text, some of it comes from "editing" (basically rewriting as it turns out) the text. Still, though, in the interests of not upsetting the apple cart, so to speak, I probably won't be releasing those portions of the manuscript. However, there are a few chapters that are completely mine so I'll try to release those soon. Primarily, I'm thinking of the chapter on iReport here. These are rough, unedited first drafts so they likely won't be as pretty as a published book, but hopefully they'll be helpful.

So that's the short version of a long and tortured tale. My apologies to those waiting anxiously for its release but it's just not going to happen.

Is this a bug or am I just dumb?

You know it's been too long since you've blogged when you can't remember how to login. Since my post in January, however, I've sold my house in Denver, sold my cars, packed up the wife and kids and moved to Brooklyn. I accepted a full-time, permanent position in Manhattan almost 3 months ago and I've been terribly busy transitioning jobs and cities. Like most bloggers, I've been meaning to get back in the saddle for a while now but, you know how it is... Anyway! I don't normally spawn external processes from Java so I'm sure I'm missing some subtle points to this apparently fine art. While running tests to make sure that these processes correctly execute and return the expected data, I noticed that one call to a certain script file would hang intermittently. If I ran the script manully in a shell window, it would execute and terminate in less than a second. But from Java it would sit there for minutes before I finally killed. At first I thought maybe it was a bug in this utility I'm executing from the script. But since it runs fine in cmd.exe, that couldn't be it. So I eventually make my way to the Bug Parade where I find this entry.

Now to save you a little time, here's the skinny: When using Process.waitFor() sometimes it will block indefinitely until you read the data off the two InputStreams, i.e., the Process's stdout and stderr. Now, according to Sun engineers, this is not a bug despite the fact that the documentation makes no mention of this particular "feature." Now the astute observer might notice that this bug was filed and closed in 1999. So I guess my main question is, why isn't this better documented if Sun decided this was acceptable behavior 8 years ago?

So, is this really (still) a bug for am I just dumb?

gosling updates

It's been way too long since I've blogged but I do have an update that might be of interest. I finally carved out enough time to get support built in to gosling for using dependency resolution using maven repositories. At the moment that is accessed through the Dependencies class. The call is a pretty simple call to make but it does require that you pass in a Dependency object and a FileSet to add the dependency path to. I'm going to add convenience methods on Project to access all this so that you needn't worry about the plumbing. It's still largely experimental but the unit test passes and that's a good sign. My ultimate hope is that this mechanism can be used to add plugins to your build without having to download them manually. Adding things to $ANT_HOME/lib has always irked me and just seems a little clunky. Maven manages this pretty well as far as I can tell so it shouldn't be too bad. So what's next for gosling? I want to finish building out the most common tasks for building systems. For example, I use uptodate quite a bit in various ant settings. I also need to work on support for publishing artifacts via gosling to maven repositories. I would also like to clean up APIs a little.  There's still more XML-oriented cruft in there than I'd like.  I'm getting close enough to usability that I might just stamp it 1.0 once things like this are rounded out. Once 1.0 is done the biggest item on my plate is what I'm calling at the moment "profiles."

This isn't anything terribly exotic but the one profile that seems to be most asked about would be a maven-like profile where project structure is defaulted and enforced along with a build lifecycle that users of this profile would just hook into. This could also mean more focused profiles such as web application oriented profiles or ones more geared to full JEE development.  Since it's just Java, this will largely be done through inheritance and likely will use event notifications. I still have to work through that particular design. So that's what's on tap for gosling. I just pushed version 0.3 out to https://gosling.dev.java.net.  If you haven't tried gosling out yet, please do give it a try and provide some feedback on the lists.