Skills update...

topic posted Tue, May 10, 2005 - 11:53 PM by  Brian
Well, I have officially begun a little side project to get up to date on some technology changes that have happened since I last poked my head up from tribe. The fun thing about the beginning of a startup is that you can pretty much choose whatever technology you want to get a job done. When tribe started, they needed to get something going fast so I chose to use technologies that I had been using/creating at the time. At that point, MVC had pretty much become a mainstream idea, and not using it for your web application was a well known bad idea. Since then, the biggest advance in the state of the Java art has been the proliferation of Inversion of Control frameworks.

At the time we started, Spring was still in its infancy and the now defunct Avalon project at Apache was the IoC platform that I had heard of but never worked with. Inversion of Control is a pretty abstract idea, and Avalon did not do much to make it a more penetrable concept. But the idea is basically that your application is much easier to test and maintain if it is not responsible for managing object lifecycles and other cross-cutting concerns such as security. The IoC people strive to create a framework that you can ask for objects, and the framework itself is responsible for assembling those objects and managing them based on declarative conifigurations specified by the developer. This is, in some sense, what the redwood framework that I have been explaining does - albeit in a far more primitive way. Redwood provides a method for applications to declaratively wire application objects together, as well as providing security credentials for those objects without forcing the application objects themselves to know about these concerns.

Spring has since come along and risen to prominence in the Java community. Spring is very abstract and may be dropped into any Java application and be of some use. I am now curious whether I may be able to put it to use in Redwood, and ultimately to replace Redwood completely. Spring provides a more complete inversion of control implementation, has a huge and thriving community of developers behind it, and does in some way provide much of the goals that I had initially strived for when coding Redwood and Tribe.

So in pursuit of answers to these burning questions, I have begun a project at home to build a (non-web-based) comic book tracking application. Korin has thousands of comic books, so I should have ample test data. At tribe, we use the following software stack and products

Tomcat
Torque
Turbine
Redwood
MySQL
CVS
Roundup (for bug tracking)

At home, my goal is to not use any of these. I am not going web based right off the bat, so I won't have a Tomcat replacement right away. But in the interest of mixing up I will have:

Hibernate
Spring
Acegi
Subversion
Trak (if I can get it working. I tried this once before: sanfrancisco.tribe.net/thread...32b5739 )

What I said before was that the beginning of startups if fun because you can choose to work with whatever tools you want. But we are way past the beginning of tribe. I am not in my 3rd year at this job, and 3 years is an awfully long time in the Java (and technology) world. So it is time for a skills update. I will let you all know how it goes.
posted by:
Brian
SF Bay Area
  • Re: Skills update...

    Thu, May 12, 2005 - 8:39 PM
    In a matter of only a couple nights of work, I have managed to set up the following environment and gotten things working:

    1) Downloaded the source code for Postgres and quickly got it compiled and running quickly, thanks in no small part to a HOWTO that Liz W wrote for the Apple Developer Connection site. Thanks Liz!

    2) Played around with creating tables on Postgres.

    3) Downloaded and coded a couple or rudimentary application objects, and persisted the state of said objects to the database using Postgres. I was particularly relieved to see that the Hibernate guys are using formal objects (not natives) to represent numeric columns in the database. This makes representing a NULL value a pretty obvious thing to do.

    All in all, the coding has been very straightforward and the tutorials complete. I can see right off the bat how these things would be applied to create some reasonably complex business logic. And it is nice to be "starting over" again - it feels like it has been years since I just jumped into a new project. Hm... having just entered my third year of employment with tribe, I guess it *has* been a long time since I jumped into a new project...
    • Unsu...
       

      Re: Skills update...

      Mon, May 16, 2005 - 11:16 AM
      Cool stuff, Brian -- and I'm glad the article helped. Learning new tech is the funnest.
  • Re: Skills update...

    Thu, May 19, 2005 - 11:22 AM
    Sweet. It takes a big man to try out knives after he's gotten really good with guns.
    • Re: Skills update...

      Fri, May 20, 2005 - 1:06 AM
      Not so big a man when you consider that you probably got your weapons backwards.

      It doesn't take much digging to realize that the new tools out there really do have some compelling features that are built in from the start. I think the most interesting thing about embracing OS projects like Spring and Hibernate is that they go far deeper into dealing with an abstraction than a business environment will typically allow you too. So the fact is that as I look at the the combination of Spring and Hibernate I see that they cover most of the architectural concerns that Redwood does ( sanfrancisco.tribe.net/thread...cba88fd ) but they do it in a way that I never would have considered building in an environment where business pressures weighed so heavily. The result is that Redwood has achieved, in very primitive ways, features such as entity wiring, inversion of control (w.r.t. authorization and bean creation from the tree), transaction management, and a couple others. The problem is that Redwood did it in a monolithic way that makes the code difficult to unit test, and hard to read and maintain. The new frameworks set out to solve these problems first and foremost - better living through abstraction. Such abstractions can be achieved in a business environment, but undoubtedly what would happen (and has in our case) is that exception cases would come up and shortcuts would be taken.

      This is the same thing that is going on with KHTML and Safari right now ( news.com.com/Open-source...5703819.html ). The KHTML guys are striving for purity, the Apple guys are serving a different master - the end user and the Apple delivery schedule.
  • Re: Skills update...

    Fri, May 20, 2005 - 1:06 AM
    Today I spent the better part of the evening playing around with Trac.
    Notable accomplishments were that I got the source code browsing to work
    and I got the authentication to work. Now anyone may visit my Trac
    installation and enter new issues, but only I can log in and change things
    around.

    My favorite feature so far is the Search tab. Trac has access to not only
    your entire project wiki and trouble tickets, but it also has access to all
    of your SVN checkin comments. The Search spans all three of those datasets
    and gives you back results that point back to each of those elements. I only
    wish that I had a larger dataset to search across here. I hope that in time
    I will.

    Another favorite feature is the fact that project changes (from the Timeline
    tab) are served up via RSS. So now I have this terribly geeky RSS feed at
    the bottom of my tribe profile that shows the most recent activity to happen
    on my Comic Book Project. Also, when I start adding in milestone dates
    they will be accessible via iCal! One thing I have to say is that these guys
    are really on the ball with regard to standards compliance!
  • Re: Skills update...

    Fri, June 3, 2005 - 2:06 AM
    Ever wondered how to get a simple Velocity template to render from within the Spring MVC framework? I have, so that is what I did and here are the results: daflink.net/cgi-bin/trac...ityHelloWorld

    What I can say as I continue to plod through my little home project here is that Spring is completely preoccupied with being maximally flexible, which is a good thing. It allows for plenty of creativity on the part of the developer and the application architect, and of course it also makes the automated unit testing easier.

    I am also really stoked about Trac. It continues to be a great tool for accumulating the knowledge that I am gaining here, and is providing a very effective means for me to bite off work in small (evening-sized) chunks. If think of something that I should look into while doing something else, just create a new ticket to push that idea on the stack. I am also quite fond of the timeline feature ( daflink.net/cgi-bin/trac.cgi/timeline ) which provides a great snapshot of the things that I have accomplished to date.
    • Re: Skills update...

      Sun, December 18, 2005 - 1:47 PM
      The skills update is now starting to become apparent in the world of Tribe.net. We are now slowly migrating our O/R mapping layer into Hibernate, and things are going ok. It is pretty clear that migrating to hibernate when you already have a large legacy data schema is tricky to say the least. Add to that the fact that you have 5 developers tweaking the mappings, none of whom have worked with Hibernate before and you start to get some weird breakages in code. Hibernate is pretty cool though.

      We are also beginning to use Spring a bit in our application, but really have quite a long way to go before we become a "Spring shop". Turbine is quite heavily bound in to our world at his point, and I don't see that changing any time soon.

      Finally, much to my chagrin, we were unable to migrate to Trac at Tribe. I still think it is the best use of a wiki I have yet seen - because it is integrated into 2 other ubiquitous tools: bug tracking and version control. However, after 2 and a half years working with a set of tools (CVS for version control, roundup for bug tracking), those things become an essential part of your job and migrating to a new tool often comes with more risk and headache than is justified. With software components we can gradually migrate, and shoulder the burden of several months of having a split personality. With project management tools, it's all or nothing...