Received an email today that started with:
Congratulations! Your “Birds of a Feather“ submission BOF-2946 entitled “ Trails In Depth “ was so compelling that the JavaOne Program Committee has decided to accept your proposal…
Woo hoo! What‘s kind of interesting is that I proposed two sessions, my basic “Rad that ain‘t bad” session that introduces Trails and this more in depth session. I figured the first was a shoe in and just added the other for good measure. It was a surprise to me that they rejected the first one and kept this one. I wonder what would have happened if I had only pitched one session?
Well, in any event this is huge for me personally and great for Trails. See you all at JavaOne!( Feb 01 2006, 11:52:25 AM EST ) Permalink Comments 
As usual, I‘ve been very remiss in blogging about Trails progress. I guess it‘s a good thing. There‘s so much going on with Trails I can hardly find time to blog about it! But I‘ll try to rectify that briefly.
This has been on my to-do list for some time, and I‘m please to report it‘s finally done. We have basic support for Embedded (what used to be called Hibernate components). I kind of like the way it turned out. I create a fieldset and then render editors for each property of the embedded object. You can see it in action by creating a Person object in the simple demo application that comes with Trails.
The source code is here.
We have an early version of role based security working, and it‘s even documented! This feature has been mostly implemented by Eduardo Piva, our Trails Brazilian coder extraordinaire. I like how it has turned out. We have used the lovely &nbpsp; trinitycombination of technologies that is in use throughout Trails, so it has resulted in very changes to existing code. We‘ve again used an existing framework, Acegi, to do a lot of heavy lifting and avoided doing work that‘s been done.
One of the coolest things about security is that we‘re using Trails to build it. We have some default User and Role objects, and so we can get admin screens for them for free :) Using Trails to build Trails… kind of like compiling the compiler… I dig it!( Jan 27 2006, 10:51:03 AM EST ) Permalink Comments 
Alberto Corona, a Trails user and contributor, has taken it upon himself to create some nice looking logos for Trails. You can see a list of them here. Jump on the mailing list and tell us which one you like best. Way to go, Alberto!( Jan 23 2006, 11:00:03 AM EST ) Permalink Comments 
Dislaimer: This post isn‘t really about Trails, so you can quit reading now if that‘s why you‘re here ;)
At the current job I work at, our HR admin sends out a “Thought For the Day”. Usually I don‘t bother to read these, but a good friend of mine sent one to me when he announced his departure to pursue another opportunity. Here it was:
Do you know what the greatest test is? Do you still get excited about what you do when you get up in the morning?
I‘ve been failing this test for quite awhile at my day job. My new year‘s resolution is to change that. I‘ve been a developer/architect on a Struts/Hibernate/Spring application for 2 years and change. It‘s been a great project and I‘ve learned a lot, and there was a time when it passed the test. But I‘ve been ready to move on to a new challenge for quite some time.
But what kind of challenge? Well, that‘s what I‘m trying to figure out. There are a couple of things I do know, though.
I uses to entertain myself when I worked at a startup by comparing the mission statement for my company with those I could generate using the Dilbert Random Mission Statement Generator. However, as I‘ve gone along in my career I‘ve come up with one of my own and found it very helpful in trying to determine what is a good fit for me. Here it is:
To help teams of people deliver real business value by developing software.
Sounds cheesy right? Feel free to make fun, but I‘m actually serious here. I like to break it down into pieces to explain it:
And the other thing I know are the 2 things I‘m most excited about workwise. They are in order for a reason, and the order may surprise you ;)
So where does all of this lead? There are 2 options I can think of right now:
Well, if you‘ve bothered to read this far you either have too much spare time or are a glutton for punishment ;) I‘ve mostly just been writing this to clarify my own thoughts, but feel free to comment if you like.( Jan 02 2006, 01:00:12 PM EST ) Permalink Comments 
I meant to announce this earlier, but I‘ve been so busy with Trails and the dayjob that I plumb forgot. I will be presenting Trails at TheServerSide Java Symposium 2006. I did a BOF session last year and that was fun, but this year I‘ll be an actual speaker. This all came about as a result of the IndyJUG presentation, interestingly enough. There I got a chance to meet Joe Ottinger in person and rib him about “how come Geert is in but not me” :) He emailed back the next day and said there was an available timeslot for me to present on Trails. Now if I can just get the employer (whoever that may be by then) to cover my travel, I‘ll be set.
I just checked out the TSSJS website and it looks like I will be on Thursday at 11:30. Not a bad timeslot, it‘s always good to be on the first day before brain overload has set in :)( Dec 20 2005, 05:09:44 PM EST ) Permalink Comments 
Too much news and not enough time, so I‘ll cover everything very quickly…
I had a great time presenting on Trails at IndyJUG There was a nice turnout (30 people, whereas they usually average 18-20 they said). It was a great audience, lots of good questions and good discussion afterwards. I also got to meet Joe Ottinger, who is Editor of the TheServerSide. He suggested I do an article, which I will probably take him up on. He also said he‘d check out whether there is a slot available for me to present at TSSJS. There‘s no travel budget left, unfortunately, so I‘ll need to pay my own way if I do it. But it would still be a great opportunity.
So it looks like we will have i18N support in Trails sooner rather than later! Eduardo Piva, one of our newest Trails developers, is taking the lead on building internationalization into Trails. He says he‘s really close to having things working. This is something people ask for a lot, so it will be a great feature to have. To me this is a great sign that a real community is starting to form, and major features are starting to get implemented by other people.
I got a very nice note from someone on the JavaOne conference committee suggesting I submit a presentation proposal on Trails. I was more than happy to do so. No promises but I‘m optimistic!
Made some progress putting together some thoughts and code for security. We‘re going to tackle role based security first and we‘ll be using Acegi to provide authentication. I hope to have some proof of concept stuff working soon.
Well, that‘s it for now. Back to coding!( Dec 01 2005, 08:17:23 PM EST ) Permalink Comments 
The Trails tour of the midwest continues. This week I‘ll be appearing for one night only in fabulous Indianapolis, IN at IndyJUG. Here are the details. Be there or be elsewhere.( Nov 27 2005, 11:32:02 PM EST ) Permalink Comments 
Well, I‘ve been announcing it everywhere I can so I ought to announce it here too. Trails .8 hit the streets today (yesterday technically) and my latest java.net articleis available on newstands everywhere (ok maybe just on the web). This article explains in much greater detail how to use Trails, and explains things like customization and validation that you need to build a real application
Trails .8 has been awhile in the making, mostly due to laziness and/or busy-ness on my part. Some of the new features in it are:
Some of the next features I‘ll be targeting for .9 are:
I‘m hoping after .9 to really start nailing things down for 1.0. I still want to at least be starting in on 1.0 betas this year. So we got our work cut out for us :)( Nov 04 2005, 09:03:10 PM EST ) Permalink Comments 
I‘ve been playing around with the Tacos components and have really been impressed. I managed to get a simple AJAX Trails example quite easily. I hope to have to it live online here soon, but it is already checked into CVS for those who are interested. Basically, getting AJAX working was as simple as:
The only gotchas I ran into were:
I got a really nice email yesterday from Eberhard Wolf. He said he had recently done an article for a pretty popular German Java publication and was kind enough to send me a copy. Mein Deutsch is nicht sehr gut, but babelfish did a decent enough job that I was able to read it. It‘s a great article, very balanced about the pros and cons of Trails when compared with Rails, I thought. I‘ll definitely link to it if it comes out on the web. He also had a nice blog entry which I hadn‘t seen, and he also did a conference session at JAOO which mentioned Trails. I try to keep tabs pretty well on what people are saying about Trails, but all this was stuff I knew nothing about. And it made my day bigtime. Thanks, Eberhard!
When I ran his blog entry through babelfish I got this gem which had me and my podmates rolling:
Who with Tapestry, Hibernate and jump yourself is versed, application can completely adapt and at will extend.
Henceforth, I will refer to the Spring framework as “Jump Yourself” :)( Oct 19 2005, 12:35:01 PM EDT ) Permalink Comments 
Had a great time presenting at COJUGon Tuesday. There were about 20-25 people there, I‘m guessing. This time I did the whole presentation with completely live code. The only hitch was when Eclipse was acting uncooperative and had to be restarted. I thought the presentation went very well, I got good feedback and had as much fun during this one as I have at any so far. There were a lot of great questions at the end too.
As usual, showing Trails to more people helps me find things I‘d like to improve. At one point I had an audience member ask “So what happens if I delete a Category that a Recipe is using“. Well, if you are using a DB with foreign keys (like HSQLDB), you get a big lovely error screen. Much as I do like Tapestry error reporting, in this case it is not the way to go. I really need to check for references on remove. I think it is possible to do this “automagically“. I just need to check for any associations that point back at the current object‘s type. I can probably do this at startup time and add this to the class descriptors somehow, a list of referrer types perhaps. Then I can query before remove and make sure no one is pointing at this object before removing. The question is, do I do this all the time or let the user control it somehow? My inclination is that it should be on by default.
The other topic that came up a bit was unit testing. I‘m a huge believer in test first, but I haven‘t made it easy enough to develop Trails applications that way. I need to think about how best to do this. I looked a little bit at Hibernate XML persistence (new in 3.0) today. Unfortunately it requires adding a “node” attribute everywhere in your mappings, with no way to do it with annotations that I could see. I think I really want to look at XStream. Integrating XML test data produced/consumed via XStream with the Spring transaction rollback test cases may give me what I‘m looking for here.( Oct 15 2005, 12:42:50 AM EDT ) Permalink Comments 
Just a quick update. I‘ll presenting Trails at COJUG on my birthday, October 11th. If anyone is anywhere near Columbus, OH, drop by, and don‘t forget to bake me a cake.( Oct 06 2005, 11:39:21 PM EDT ) Permalink Comments 
This is something I think about a lot. Recently a couple of developments have made me think about it more. The first thing was Matt Raible‘s post about where to host AppFuse. AppFuse and Trails are both currently at java.net. But I too am wondering if my project is starting to outgrow it. Here‘s what I need to more effectively host Trails:
I‘ve yet to find somewhere that has everything in this list. So self hosting is probably the best way to go, but I don‘t really have the resources to do it.
In addition to Matt‘s post, the other thing that really got me thinking is the release of JBoss Seam. It too is a reponse to Rails, similar in some ways but mostly quite different than Trails. But what got my attention most was:
So this all makes me think: Does Trails need a corporate sugardaddy? I wonder how much faster things could progress. If you‘re reading this and you or your company wish to fund Trails, you may so signify by backing up a dumptruck filled with cash into my driveway. I‘ll be listening for the “beep beep beep”...( Sep 22 2005, 11:22:06 PM EDT ) Permalink Comments 
I ended up using Trails to a small demo project for a client recently. I was actually planning to use Rails as an excuse to learn it, but ended up not being use it due to a key requirement not being there yet. I need to upload Excel spreadsheets, and even after asking some real Ruby gurus it doesn‘t seem like there is an easy way to do this. I‘m sure it will be addressed, but for now it really highlighted the advantages of working with a more mature platform. There‘s an open source library to do darn near anything easily available in Java.
My experience using Trails was that it was really fun to develop with. I was able to get something running very quickly and customizing the pages to add the extra functionality I needed, such as uploading the Spreadsheets, worked great. Part of the pleasant experience was due to the new features Howard has added to Tapestry 4. The way listener methods work now is really intuitive and lets you write nice clean code. The only painful part of the whole process was using the standard Java IO APIs. Converting Readers to Streams to other Streams, etc, etc. I have to say this is where using a less rigid language would have been nice.
But overall, the project convinced me to keep moving on Trails as fast as I can. I‘m going to be trying to do a .8 release here in the next week or 2. I‘m going to start work on another java.net article describing all the features of Trails I didn‘t get too in the first one (customization, validation, more relationships). Stay tuned.( Sep 20 2005, 09:28:52 PM EDT ) Permalink Comments 
Been awhile since I checked in and since I blogged so I figure I‘m way overdue. I was on a way badly needed vacation last week, and before that I‘ve spent a little time playing with Ruby on Rails. I feel like my curiosity is satisfied for now and I‘ve learned a lot, but now I‘m ready to turn my attention back to Trails.
I just checked in a pretty major refactoring to the Trails edit components. Previously I had a component that was essentially a big switch statement based on the type of the property. I took a totally different approach, based partially on some conversations with HLS. I now have an EditorBlockPage which houses a block for each type of editor, date, number, drop down, etc, etc. It seems a little clunky to have to make a separate page for this, but this is kind of a necessity based on how Tapestry Block components work. Unfortunately, you can‘t just create a new component at run time, so Blocks are the way to do what I need to to.
Next, I have a new service responsible for resolving the block from the property descriptor. In the normal cases it will still do so based on the type of the property, but it doesn‘t have to. This will make it possible to add your own editors in a fleximizable™ way.
I need to put together an example of how this all works. My plan is to add a new attribute to the PropertyDescriptor called richText and then configure the service to use a FCKEditor component for any richText properties. Should be nifty, stay tuned.
Ooh, and I totally forgot, but I also changed the components to use a CSS driven layout for the form instead of a table. I want to keep moving towards semantic html as much as possible.( Sep 09 2005, 12:22:52 AM EDT ) Permalink Comments