I'll be doing a presentation on Stripes October 10th at the Kansas City Java Users Group. See details here.
Monday, September 17, 2007
Wednesday, September 12, 2007
Requirements Exceeding Web Capabilities
Let me start off with the fact that I like HTML. I like JavaScript. I like CSS. I'm rather proud of my abilities in combining these technologies to make some really interactive sites. The problem is that I keep seeing requirements come down that make using these age old and proven technologies extremely difficult. So there's prototype, scriptaculous, JQuery, Dojo, GWT; I could go on and on. And to a fault these libraries do ease the pain. Well, some of them. Some of them actually cause me more pain.
I'm leading a project now and I spoke with one of my developers and asked him if he thought this would make a really great Desktop application. He agreed. Unfortunately, it's not what the client wants. In fact, Its not what any client wants these days. Its all about the DubDubDub. Enter Flex and Silverlight.
I don't dislike Flex and I know it has been around for a year or so and it is going open source, yada yada and I've not even glanced at Silverlight so I won't bother commenting on it aside from saying it locks you into the .NET world. And looking at Air, linux is once again an afterthought for the flash guys.
It seems to me that web developers are sitting in a very difficult era in web development where clients want the bells and whistles of a true rich client application that runs in a web browser but aren't willing to commit to new technologies (Flex, etc) that actually make these applications possible. What's a developer to do?
Posted by
Gregg Bolinger
at
9:07 AM
0
comments
Monday, September 10, 2007
Java Forums
I'm in search of a new stomping ground. I've been a member at JavaRanch for 6 years and a staff member for about 4 but I'm needing to part ways and I'm looking for a new community to be a part of and help if I can. I know about Sun's forums and Javalobby's forums but I'm not too impressed with either community. JavaRanch is full of really nice folks and I'm looking for something similar. Any suggestions?
Posted by
Gregg Bolinger
at
8:34 AM
4
comments
Friday, September 07, 2007
DZone Aggregated on Javablogs?
Does anyone else think that DZone should not be aggregated on Javablogs? I find it pretty annoying that on Thursday I jump to a blog entry from Javablogs to the author's site and then on Friday I see the same blog entry on Javablogs but this time I'm jumped to DZone.
Look, I like DZone. I prefer it to Digg for my technology related information. And I have them subscribed in my Google Reader. It would be one thing if DZone published their own content and every now and again thought a blog was worth linking. I've done that. It happens. But that's not how they operate. They are another version of Javablogs and shouldn't be listed on Javablogs.
Posted by
Gregg Bolinger
at
9:25 AM
0
comments
Wednesday, September 05, 2007
Invalid Property Binding Feedback
Matt Raible blogged today about why Struts 2 sucks. At the same time he concluded that Stripes sucks as well. Why? Because neither framework handle invalid property binding feedback properly. Well, let's discuss what might be proper and let's talk about Stripes because I love Stripes. I want Stripes to be the best it can be and we can find ways to improve it, let's do that.
Stripes doesn't use OGNL. When Tim designed Stripes he used OGNL in the beginning and later found out that he could write something a bit smaller and faster that was specific for Stripes and remove another dependency from the project. I think that is great. One less JAR I need to fetch.
One of the many nice things about Stripes (specifically over Struts) is the ability to create pages without wiring up the actions on the back end. with Struts (this could be different in Struts 2, someone please correct me) you had to have your form beans, validation, XML all correct and complete before you could even view your JSP. With Stripes, if a binding resource is missing it's ignored. Is this a flaw? I don't believe so.
When you submit the form or when the page requires binding, which typically isn't on view, Stripes will tell you what you've missed. It's in the debug log, not on screen. So if you had a form that required a first name and a last name. In your action bean you have two strings, firstName and lastName. On the JSP you fat finger lastName to lkastName, the form will display just fine. This is what I would want. I want to see my form. When I submit the form, this is what I get in the debug:
DEBUG Could not bind property with name [lkastName] to bean of type: FormTestActionBean : Bean class com.app.web.action.FormTestActionBean does not contain a property called 'lkastName'. As a result the following expression could not be evaluated: lkastName
And now I know what I need to fix. I'm not 100% sure that Matt views this as a flaw or if maybe he doesn't understand that Stripes does this. From his post I am led to believe that Matt wants immediate feedback if there are binding issues, even prior to submitting the form. I don't agree that this should be an issue. What do you think?
Posted by
Gregg Bolinger
at
1:04 PM
5
comments
Labels: java stripes, web applications
Java Desktop Jobs
After reviewing Filthy Rich Clients I got all excited about Desktop Java again. It did get me wondering though if there are jobs out there for Swing folks. I'm not looking for one but I am curious what the market is like in this time of Ajax and Flex. Does anyone have any stats or information regarding this?
Posted by
Gregg Bolinger
at
10:36 AM
1 comments
Tuesday, September 04, 2007
Book Review: Filthy Rich Clients

This review will be in two parts. I was contacted about reviewing Filthy Rich Clients by Chet Haase and Romain Guy and at the same time asked to review Safari's "Rough Cuts" subscription. So first, let's get the not so good out of the way.
Safari's "Rough Cuts" is similar to Manning's MEAP (Manning Early Access Program). If you aren't familiar with either one it's basically a way to read a book as chapters are made available online. The difference, as far as I can tell, between MEAP and Rough Cuts is that chapters released through MEAP are complete whereas chapters released through Rough Cuts often times are incomplete. That isn't to say that reading the final draft of a book versus the Rough Cut version is significantly different but there were things missing like diagrams that are referred to in the text. I may be in the minority here but I actually find them useful in most cases and when a book is talking about a diagram its nice to be able to see it. Add that to my dislike of Safari's interface for reading books online and I give it a thumbs down. I'd rather just read the book when it is complete than have incomplete chapters made available.
And now on to some good news. FRC is a great book. The community has needed a book like this for a long time and I can't think of any better folks to write this kind of book than Chet and Romain. I've been following their blogs for a long time and am a big fan of all the cool things Romain has done with Swing.
FRC is a book about "Developing Animated and Graphical Effects for Desktop Java Applications". Yes, that is on the cover but I couldn't think of a better way to describe this book. FRC gives some much needed insight into the inner workings of Swing, AWT, and Java2D and how they all interact. Sure, you can scour the web and locate a lot of articles and blogs that talk about this but its nice to finally have this in one place. But don't worry, its not that deep. Its just enough to help you understand when things start getting cool later on.
The book does assume a basic understanding of desktop development with Java. If you are new to Swing you might want to get a few basics down before delving into FRC. The book reads very well, even going between the two authors, which you can easily tell who wrote what. If its technical it was probably Chet. If it was pretty it was probably Romain. Not to say that Romain isn't technical in his own right.
There are plenty of code fragments in the book to help convey the author's points. In fact, there is a lot. More than I expected. On a sad note, even though all the examples are available on the book's web site they are Netbeans projects. I download a few and tried to compile them with Ant from the command line but they always complained about Netbeans dependencies. Granted, I didn't research this much so the problem may have easily been resolved.
The book is fun and results are immediate. I've already started trying to come up with a side project for myself just to try out a lot of the techniques described in FRC. I'd recommend this book to anyone looking to spruce up their existing desktop applications or design something entirely new and original. Great work Chet and Romain!!
Posted by
Gregg Bolinger
at
6:57 PM
8
comments
Labels: book reviews, desktop, Filthy Rich Clients, java, Swing
Monday, December 18, 2006
Proxy Apache Httpd and Tomcat
I wrote a small FAQ on how to proxy Apache Httpd and Tomcat. You can find it here
Feel free to correct any mistakes you find or just let me know and I will fix them.
Posted by
Gregg Bolinger
at
12:21 AM
1 comments
Wednesday, August 02, 2006
Freespire: Coming to you live...
I installed Freespire tonight on my Dell Gen1 XPS Laptop. ATI Radeon 9800 and Linksys wireless, which have been my headache with every other distro, worked out of the box. Video is at max rez with Opengl. How refreshing.
My only complaint at the moment is the startup time for the OS. Very slow. Probably takes 5 times longer to boot than XP which I am dual booting. Other than that, I'm perfectly happy with it, so far. Ubuntu has some stiff comp now.
Posted by
Gregg Bolinger
at
9:52 PM
0
comments
Tuesday, August 01, 2006
Book Review: AJAX and PHP: Building Responsive Web Applications
I’m a big fan of PHP (though a Java developer by trade) and although I don’t buy into all the hype surrounding AJAX I do appreciate what it can do for a web application when used appropriately. So I was really excited to review “AJAX and PHP: Building Responsive Web Applications”.
What I liked most about this book was that there was no fluff. AJAX is what it is and I felt the authors realize this and wasted no time getting right into it. There is the typical regurgitated information that all tech books can’t seem to ignore in chapter one but luckily not much. In fact, chapter one has you writing your very first AJAX enabled app.
The remaining chapters handle one application after another showing you several different ways you can utilize AJAX in your PHP web applications. Chapter seven, which shows how to implement a real time charting application using SVG, is debatably the most useless chapter in my opinion; however, it is something different that you don’t see similar books covering. And it’s a decent way to avoid using something like an Applet or Flash for similar functionality.
Probably my biggest complaint about the book in general is the authors’ use of XSL for a couple of the examples. This is easily excusable given the rest of the book though. The book does assume a basic understanding of PHP and Javascript but that shouldn’t scare off any newcomers to any of these technologies since you can simply copy and paste and run the code to see the outcome. The appendix has all the instructions for setting up the various technologies used in this book to get the reader going.
All in all I think this is a great introduction to AJAX and since AJAX is server agnostic all the techniques in the book can be applied to the server technology of choice whether its PHP, Java, or even .NET.
Posted by
Gregg Bolinger
at
3:56 PM
0
comments
Thursday, July 13, 2006
Elegant Image Loading
On my current project I had to display some images associated with a story. We have a servlet that uses ImageMagick and JMagick to dynamically load an image from a database and do various things on the fly like resizing, cropping, etc depending on the params passed in. This servlet is mapped to a variation of the JPG image extension.
When I designed the page and tested it, I noticed that because there might be 12 images going through this process on the page, it appeared that the page loaded very slowly. It also would display those nice little "there's an image getting ready to display here" place holders until the image was finally loaded. This was just annoying and it made for a bad user experience, imho.
To resolve this and make it appear that the images were loading in the background, I put in the following code (click on the image for a larger preview):
What I did here was for each image in the imageList I created a DIV that is not visible when the page loads. Next, I placed the following code in the window.onload event (click on the image for a larger preview):
What this does is creates a new IMG object on the page for each image in the imageList. When an image has completed loading the file given in the SRC attribute, it's onload event is fired. When this happens I use the Scriptaculous Appear function to allow the image to fade in.
When the page loads, you can't see the empy place holder boxes and it appears the page has completed loading. After which you start to see the images fade in, which is a very elegant effect. If the images are cached, they just begin to fade in that much faster.
One other thing I did which I didn't supply the code for was I placed a transparent div over the entire table with a message in the middle saying Images Loading. As soon as the first img.onload event is fired, I Fade that div out. The effect is very nice.
Posted by
Gregg Bolinger
at
1:49 AM
0
comments
Wednesday, July 12, 2006
Giving JSF Another Shot - Part Deux
A while back I blogged about Giving JSF Another Shot. Well, I did. I even had the opportunity to use it at my new job. And it failed, miserably.
I spent more time hacking components, hunting for working components, and coding around all the issues surrounding it than I did actually getting any work done. This is by no means a slam on any one implementation mind you, but the specification in general. Sure, maybe 1.2 is fixing those issues. Sure, maybe facelets fixes those issues. Sure, maybe I'll win the lotery. I just don't personally have any more time to devote to it.
I know I haven't blogged in a while, and to start back with something negative isn't always the best approach. But what can I say? I'm opinionated. I have happier thoughts to blog about in the near future.
Posted by
Gregg Bolinger
at
11:22 PM
0
comments
Monday, May 15, 2006
IntelliJ IDEA and Multiple Projects Views
I love IntelliJ IDEA. But nothing is perfect. And although IDEA comes as close to perfect as anything else, IMHO, there is something I wish I could do, but can't. Sometimes while working on a project I'll also need to work on an API or supporting project at the same time. Currently, I have to have two copies of IDEA open to do this.
I'd like IDEA to support multi project views of some sort. What do you think?
Posted by
Gregg Bolinger
at
10:50 AM
3
comments
Monday, May 08, 2006
Giving JSF Another Shot
Leaving my opinions on other web frameworks aside, I am going to give JSF another shot. JSF, to me, is one of those technologies that reared its head as the next best thing. And at first glance it was nice. There was the big promise of tool support. I still have yet to see one I really like. But I don't typically like tools that write all my code for me anyway. If I did, I'd use .NET.
After a while though, I started to see the short-comings of JSF. There are issues with JSF and JSP and how the component tree is slapped together. There is the whole back button issue. No true Post back checking ability. But I think my biggest problem with JSF isn't the specification's bugs and/or failures. It's the way it was thrown at me. Sun said, "Here is the next standard" and a lot of the community said "Okay". Interestingly, I think the Struts maintainers adopting JSF for Shale is more likely to push it as a standard than Sun bullying it on me, but only because of Strut's reputation. I've looked at Shale. It still has a ways to go. Config file are really out of control. But that is another story.
With JSF 1.2 lingering around the corner and with projects like Facelets, I think JSF deserves another hard look. MyFaces has really come a long way and the inclusion of ADF Faces components are really going to give that project a super sweet component set.
JSF's role as the new standard for Java based web applications remains still to be seen, even after all this time. And a standard should be determined by the technologies adoption in the community, not by the entity that created said technology.
Posted by
Gregg Bolinger
at
8:26 PM
1 comments
Monday, January 30, 2006
Checking Multiple GMail Accounts
I decided recently that I wanted a better way to manage all the mailing lists that I belong to. I thought that a good way to do this would be to create a seperate GMail account for each list. I like doing it this way so far but there is still the issue of having to login to each account everytime I want to check for new messages.
I know about the Firefox plugin for checking multiple GMail accounts however, I don't like the dependency on having FF open. I also considered running Thunderbird and adding each GMail account as a POP account, but that ties me down to my computer. I am really looking for something more like the GMail notifier but that will check more than one GMail account. Anyone know of anything?
Posted by
Gregg Bolinger
at
9:48 PM
9
comments
Friday, January 27, 2006
Book Review: Beginning Python
I could write about how Apress has a knack for publishing great books by great authors. I could write about how “Beginning Python…” is one of my favorite books so far, and not just on Python. I could write about how Magnus Lie Hetland does a wonderful job of introducing the reader to the Python language. I could write about how “Beginning Python…” is one of the few books that actually delves into as many possible uses for the Python language from simple lists and string manipulation to GUI’s to web development. Believe it or not, with all the great content in this book, the best is yet to come.
Starting with Chapter 20 “Beginning Python…” takes the reader through ten (10) complete projects start to finish including two versions of a file sharing application (version two adds a GUI) and a small game. The best way to showcase the power of a language is to show it in action. Magnus does just that with these project chapters. And it makes the book fun. It makes Python fun. It makes learning fun.
For anyone wanting to learn Python or for a Python developer that wants to expand their knowledge and increase their productivity and find new uses for a great language, “Beginning Python…” is a must have. It’s definitely one of my top five (5) favorite programming books.
Posted by
Gregg Bolinger
at
9:30 AM
0
comments
Tuesday, January 24, 2006
Chuck Norris Fact of the Day
#7. Chuck Norris does not hunt because the word hunting implies the probability of failure. Chuck Norris goes killing.
Chuck Norris Facts
Posted by
Gregg Bolinger
at
3:03 PM
2
comments
Wednesday, January 18, 2006
Javaranch Journal: January Edition
The January edition of the Javaranch Journal has been published with some excellent articles. Be sure to check it out.
Posted by
Gregg Bolinger
at
4:08 PM
0
comments
Tuesday, January 17, 2006
I say Tapestry. You Say Wicket.
Tomato Tomato, Potato Potato...Well, probably not. But they aren't apples and oranges either. It seems like everytime I bring up Tapestry, someone brings up Wicket. I looked at Wicket back in its infancy; version 1.0. It looked neat and I did some very light testing with it. And then I dropped it and hadn't really looked at it since.
Since it keeps popping up in conversation I decided that tonight I would start looking at it again. I didn't see any significant changes since I used it last. The documentation has improved but it still seems the downloadable examples are still the only way to see how an entire app is really put together. I've decided that I might put my Tapestry/JSF tutorial on hold until I can possibly explain Wicket well enough to include it in the same tutorial. Kill 3 birds with 1 stone I suppose.
The hardest aspect of Wicket that I can't seem to wrap my head around yet is the use of the IModel interface and it's pluthra of implementations. The documentation does a descent job of explaining what the IModel is, but not so good and explaining when to use which and why. The examples in the documentation are about 2-3 lines long and don't mean much to me. And the framework's use of inner classes seems a bit, well, overused. Most of the time I think this is for simplicity and the ability to create less seperate files when writing how-to articles. Specifically, classes that extend Form always seem to be inner classes as well as anonymous methods for listeners. This is my favorite though.
This is code from a series of tutorials by R.J. Lorimer. This doesn't scream simple to me, especially as the site grows and becomes more and more complex. That's not to say this is at the fault of Wicket. I am betting R.J. did this for the simplicity of the tutorial, but at first glance, it's a bit confusing.
Anyway, I plan to keep chugging away for the next couple of days, possibly into the weekend when I have a chance. And then I will decide what direction my article/tutorial on these similar frameworks might be. As always, any input along the way is greatly appreciated.
Posted by
Gregg Bolinger
at
10:52 PM
2
comments
Monday, January 16, 2006
Should I Write A Tapestry to JSF Comparison Tutorial?
I frriend of mine has requested that I take my JSF Tutorial I wrote a while back and create the same exact tutorial in Tapestry but showing both the JSF and Tapestry code side by side as I go along. I'd prefer not to make a "which is better" assumption on my own but rather let the reader decide for themselves which technology they prefer. I think we all know what I like. And I'd like to keep that opinion as much out of the tutorial as possible to give both a fighting chance.
Is this something that anyone else would be interested in or would I be wasting my time? I know there are a lot of good Tapestry tutorials out there, just not any that I know of that show both the JSF and Tapestry code side by side. Let me know.
Posted by
Gregg Bolinger
at
7:17 PM
3
comments
