Thursday, April 17, 2003

Struts Course Updates

We are going to update our Struts course and offer it in a 5 day format with some addition sections on CRUD.

Best Struts Course
Best Struts Training

Tuesday, April 15, 2003

Java Freedom Conference: Great Fun! Strong Opinions

We had a lively roundtble discussion with James Duncan Davidson, Erik Hatcher, Bruce Tate, Macijec Zawadski, Stuart Halloway, I and more. James compared selecting a software methodology to sex that has to be the funniest moment of the whole show. The great thing about the roundtable discussion is we started debating a bit. Someone would say something, and someone else would chime in and say the exact opposite. There would be a pause and gasp and then on to the next rebuttal. This was the liveliest round table that I have seen. Bruce Tate is a real salt of the earth type guy, and I enjoy his views on software development. It is a real pleasure talking to him. Macijec Zawadski is quite the software rebel; he likes to challenge the norm. Stuart is a really good speaker; very polished. James Duncan Davidson is awesome. I really enjoyed Erik's talk on Extreme XDoclet. Erik rocks! We all went to dinner and saw "Anger Management". If you are going to go to one conference this year go to a Complete Programmer Network conference. It is 100% stuff you can use when you get back to work. This conference series is simply the best software development conferences on the market.


Monday, April 14, 2003

WebSphere certification and getting up to speed with WebSphere 5.0

I've decided to get IBM WebSphere certified, and get up to speed with the new features of WebSphere (v5.0). It is something that I have been thinking about for a while. I was hoping writing it down might help. BTW I am a big WSAD fan not to mention Eclispe.

Here is my reading list to get started:

  1. WebSphere Application Server V5 for iSeries: Installation, Configuration and Administration

  2. WebSphere V5.0 Applications: Ensuring High Performance and Scalability

  3. WebSphere Version 5 Web Services Handbook

  4. IBM WebSphere Application Server V5.0 System Management and Configuration: WebSphere Handbook Series

  5. Testing Container Managed Persistence EJBs with the Table and Data Source Creator in WebSphere Studio Application Developer 5.0








I came up with the above list by searching for "redbook websphere v5" at WebSphere Developer Domain Library. Please let me know if you can think of other ideas.... pass them forward.

I thought I would rate and write a review for each item. Then I will spend some more time figuring out which certification I should take first, i.e., possible WebSphere certifications. I might stick to the developer certifications or not.

Java Freedom Conference

The Java Freedom Conference in Philly was fun. I tried out three new presentations, and one tried and true presentation. Two of the new presentations (Principles and Practices of Effective Developers and Bending Struts to fit your needs) were rated very high. The presentations that did well represent the highest ratings I recieved since I've been presenting for complete programmer network (I am getting better at it), and the third new presentation (Struts Primer) got horrible ratings (my standards are high... it did okay, but not really well).

Score card....
Java Tools for Extreme Programming did well
Principles and Practices of Effective Developers very good
Struts Primer session average
Bending Struts very good


The problem with the Struts Primer session was that I tried to fit too much material in too little time, and I did not gear it to a starter audience as promised in the abstract. It could be broken out into several presentations (Intro to Struts, Validation Framework and Tiles), but I tried to fit it all into one. Most people felt the material was too advanced. It seems people with Struts experience thought it was great, but those without Struts background thought it was too much (some suggested making it a longer session or splitting it).

The Principles and Practices of Effective Developers session was based on some of the ideas right from this blog. It is nice to verbalize these ideas and actually get good reviews from the thoughts. This is the first purely non-technical, all process/methodology/idealogy presentation that I have ever done, and people actually liked it.

I asked several times how many people were implementing custom tags. I was surprised how many people were not using custom tags at all. I find custom tags are useful and easy to learn. Hmmmm.... It seemed like a lot of folks use EJB despite the bad press. Maybe a session on doing custom tags would make sense for a future Complete Programmer Network. I like asking people what they do.

I think I am going to split the Struts Primer into three presentations (at some point in the future) as follows: Struts Primer, Mastering Struts Tiles, and Mastering Validation Framework. I also want to create a session on Mastering Custom Tags.

I want to retire Java Tools for Extreme Programming session, because I have given it about 12 times last year. Frankly, I am tired of giving the session.

Saturday, April 12, 2003

Java Freedom Conference

Java Freedom Conference


I've written this example for Extending the Struts Framework for the Java Freedom Conference in Philly. I've been asked to post the source for the case study. If you want the source to the sample code, email me.

Case Study Source Code and Slides

Here is the title and abstract for the talk.

Title: Extending Struts: Bending Struts to fit your needs Abstract: Okay you think you have mastered Struts, but you wish it could just do this one special thing? This session shows you how to go beyond the Struts basics to extend the framework to fit you needs. Struts was designed to be extensible. Learn how to extend it. Advance Struts topics about extending the framework using Struts plugins, and extending the Action Servlet, Custom Actions, the RequestProcessor, and more. This is an advanced topic that assumes previous knowledge of Struts.

Wednesday, April 09, 2003

EJB CMP CMR Performance and WebLogic

I get asked about the performance of CMP and how to avoid frequent loads from the database (per transaction). There are a few tricks. One is you need to setup an extent of an Entity bean as Read-Only if you want really good browsing performance. Second if you need both good browsing performance and occasional access to write to to the beans then you probably want to setup cache-between-transactions in the vendor specific ejb deployment descriptor. Third, never access an entity bean directly if you don't have either of the two setup, instead try to group as many operatoins as you can by using a session facade that groups many operations on a few entity beans if possible (given you design). This is all for now. Of course, I could flush this all out a lot more.... Perhaps I will at a future date.

Broken links for EJB QL Tutorial

All the links are broke for my EJB QL tutorial. It looks like IBM changed the links.

Here are the correct links for anyone who is looking.


Part 1
http://www-106.ibm.com/developerworks/edu/ws-dw-wscomp-i.html

Part 2
http://www-106.ibm.com/developerworks/edu/ws-dw-wscomp2-i.html

Part 3 (CMR and intro EJB QL)
http://www-106.ibm.com/developerworks/edu/ws-dw-wscomp3-i.html

Part 4 (Advanced EJB QL.... every keyword)
http://www-106.ibm.com/developerworks/edu/ws-dw-wscomp4-i.html

Part 5 XDoclet and EJB
http://java-tools.eblox.com/index.php?ResinCMPCMRXDocletTutorial

Presentations for Software Freedom Conference

I finished my presentation on extending the Struts framework using Plug-ins, CustomConfig Objects, and a Custom Request Processor. I built a great case study based on some of the work I did with EJB and Struts in a previous life. I a really proud of the results of the case study. It was a fun project to work on. I eventually want to build a cache of struts extentions that make dealing with EJB in a web application easier.

I am presenting this weekend in Philly on the following topics:

Title: Principles and Practices of Effective Developers

Abstract: Regardless of methodology or technology there are certain universal practices and principles of effective developers. Covers how to use these principles and practices to make effective decisions on methodology, technology selection and dealing with management, other developers and customers.

This is my first presentation on a non-Technical topic. I've done private workshops on this, but never in this public a forum. I hope it goes well. The workshops were really well recieved.


3) Title: Extending Struts: Bending Struts to fit your needs

Abstract: Okay you think you have mastered Struts, but you wish it could just do this one special thing? This session shows you how to go beyond the Struts basics to extend the framework to fit you needs. Struts was designed to be extensible. Learn how to extend it. Advance Struts topics about extending the framework using Struts plugins, and extending the Action Servlet, Custom Actions, the RequestProcessor, and more. This is an advanced topic that assumes previous knowledge of Struts.


Title: Struts 1.1 Feature primer
Abstract: Okay so you have been using Struts for a while, and you want to try some of the new features like Tiles, ValidatorFramework, or you are new to Struts and you want to learn the basics plus some new Struts 1.1 features. This is an entry level introduction to Struts and some of the new features. This assumes some knowlege of Web applications, JSPs and custom tags.

Wednesday, April 02, 2003

Blogger Pro

Blogger Pro


I've just upgraded to Blogger Pro. I now have RSS capability.

Powered by Blogger Pro™

My RSS feed is here:
http://rickhightower.blogspot.com/rss/rickhightower.xml

Tuesday, April 01, 2003

CTO Forum: Whisky tasting and Jazz

CTO Forum: Whisky tasting and Jazz



I just learned a lot about Whisky tasting. A Whisky expert in full Scottish garb, gave a little seminar on the different types of whisky. I now have a favorite whisky. Before I just stuck to gin and beer.

Pair programming



After the whisky tasting, I had a great conversation with William Shelton and Marcus Leef on pair programming and XP. Both Marcus and William were at the Whisky tasting and Jazz session. They both are students at MIT in the Sloan School of Management. Quite an interesting perspective they both had.

CTO Forum Product Reviews

CTO Forum



Lunch conversations


I am at CTO Forum. When I went to lunch today, I accidentally sat next to John Udell and Jean Paoli. I say accidentally because I had no idea what they looked like. I did recognize both of their names. I was looking for a good place to eat and ended up hearing about France's Microtel, Blogs and XML (bonus). I also had a good conversation with Jason Bloomberg and Ronald Schmelzler from zapThink about BPEL and the next steps in Web Services. I swear some of the best "sessions" at conferences are informal conversations.

Product reviews for InfoWorld


I pitched my idea for a software development column to Mark Jones, the executive news editor. I want to write about development process, skills management, software frameworks etc. I think they are going to pass for now. :(

Mark mentioned that they are looking for articles for their test center. The articles are product reviews.


I told Mark that I would love to write product reviews. I would really like to write product reviews for WebLogic 8.1 (and BEA new development env.; soon to be released), and/or IBM WebSphere 5.0 and WSAD. I have a lot of experience with WebLogic (up through 7.0), and have recently wrote a tutorial for IBM on the IBM WebSphere SDK for Web Services (WSDK). The IBM WSDK for WS is built on top of WebSphere 5.0 so I already have a head start. I have also done a fair bit of writing about JSP, JMS, Struts, XML, Custom Tags, etc (not to mentioned my tutorial on EJB 2.0 CMP CMR which shows up number one on google and is ported to several EJB containers).

Mark said that I had to put the types of products I wanted to review in my blog, and the CTO of InfoWorld (a.k.a. Chad Dickerson) would read it. Hmmm.... sounds like I need to start syndicating my blog. It is time to upgrade to blogspot pro (good I could really use the spell checker). In addition to the above two already mentioned, I would like to do product reviews for Struts 1.1, XDoclet 1.2, JUnit, Eclipse, NetBeans, Maven etc. I wonder if they will review opensource development tools and frameworks as well. Hmmm.... I guess I could ask.

Link to list of my publications
Link to my website
Link to my Achievements

Monday, March 10, 2003

Some of the biggest problems in software development have nothing to do with technology or process.
Communication.....

(just a half a thought)

Friday, March 07, 2003

I found this in my archive of blog entries that I never posted. Here it is.


Going to JavaOne 2002



My journey started with less than two hours sleep. I was working on a project late Saturday night finished midnight, and then was too wired to sleep till 2 AM. Then I was up at 4 AM getting ready to leave by 4:30 AM. The project was supposed to be small around 8 hours of work thirty hours later and just before JavaOne I was done. Of course, this is not the way to start a journey, but seems typical. I could have finished the project early on Saturday but decided to spend the time with my family during the day.

I was catching a ride with my brother in law who works at the airport… no use spending the extra money on a cab. I am much more frugal after the Internet boom ended.

The plane ride was non-eventful. I had to fly to a hub then off to SF. I feel asleep whenever I could. It was in this state of semi-consciousness that I made my trip to JavaOne. I enjoy this state. I am most creative when I am forcing myself to stay conscience long enough to catch the next plan ride.

At the hub, I decided to get some Starbucks. This was a mistake. It caused me have to go through security checkpoint again. The line was much longer than I expected. Most people would worry. I quit worrying years ago when it almost killed me—now I do my best and go with the flow. Do your best and try to relax is my motto. The line moved fast and I got the plane while it was still boarding—guzzling my vente mocha all the way.

Drinking the mocha was a big mistake that I would soon regret. On the first leg of the trip I was able to sleep. Now I was fully loaded with enough sugar and caffeine to prevent any remote chance of sleep, but I was too tired to do anything productive—too many late nights were taking their toll. I tried to force sleep. It did not work.

Once I got to SFO, it was time to make it on over to the hotel. I was a bit early. I got there and I could not check in yet. I checked my bag and it was off to memory lane.

I worked in SF during the Internet boom. I worked in the media gulch district, which consisted of old sewing factories and warehouses that were converted into office space. The media gulch district was front and center during the any-lame-idea-can-get-venture-funding days of the Internet boom.

I was only half paying attention to where the hotel shuttle was going during the trip over from SFO. Now as I made it over to Moscone, I realized that I was much further than led to believe from our travel coordinator. Granted I was walking distance from Moscone, but I was told that I was right next to it. I was right next to Union Square. Pretty far if you are supposed to carry over stuff that was sent for the booth.

Oh well, I checked my luggage to the hotel and I am off to gallivant SF. As I am walking along my old haunts, I realize I only vaguely remember a lot of what I must have walked past most every day when I worked here three years ago—is this sleep deprivation or am I stupid.. I was not gone long enough for things to change this much. I remembered things wrong. Now I am hungry and it is lunch time…I am going to find Rickenbaukers and get one of those famous steak sandwiches and look at old Harleys. But, where is Rickenbaukers….after walking around for a while my memory started to coalesce. It is as if my feet knew the way (or my stomach I am not sure which). I finally get to Rickenbaukers only to find out that it is closed on Sunday. Oh what horror….
Then I remember that I did the same thing the last time I was at JavaOne—two years before. Its funny how history repeats itself.

After not finding Rickenbaukers, I decided to eat at this SouthWest Mexican food chain restaurant. I am from the south west, and it is a big mistake to eat at chain mexican restaurants!—it only leads to disappointment.

I then register. And then go hunt for the booth. I don’t have a map so finding it was hard until I borrowed someone’s map only to find I was just about standing next to it

I get to the appointment (meeting at the booth to go over the schedule) early. Leave a note, and decide to crash on the bean bag chairs where I write this nice little story. Still too tired to be productive and too wired to sleep!
I found this in my archive of blog entries that I never posted. Here it is.


Going to JavaOne 2002



My journey started with less than two hours sleep. I was working on a project late Saturday night finished midnight, and then was too wired to sleep till 2 AM. Then I was up at 4 AM getting ready to leave by 4:30 AM. The project was supposed to be small around 8 hours of work thirty hours later and just before JavaOne I was done. Of course, this is not the way to start a journey, but seems typical. I could have finished the project early on Saturday but decided to spend the time with my family during the day.

I was catching a ride with my brother in law who works at the airport… no use spending the extra money on a cab. I am much more frugal after the Internet boom ended.

The plane ride was non-eventful. I had to fly to a hub then off to SF. I feel asleep whenever I could. It was in this state of semi-consciousness that I made my trip to JavaOne. I enjoy this state. I am most creative when I am forcing myself to stay conscience long enough to catch the next plan ride.

At the hub, I decided to get some Starbucks. This was a mistake. It caused me have to go through security checkpoint again. The line was much longer than I expected. Most people would worry. I quit worrying years ago when it almost killed me—now I do my best and go with the flow. Do your best and try to relax is my motto. The line moved fast and I got the plane while it was still boarding—guzzling my vente mocha all the way.

Drinking the mocha was a big mistake that I would soon regret. On the first leg of the trip I was able to sleep. Now I was fully loaded with enough sugar and caffeine to prevent any remote chance of sleep, but I was too tired to do anything productive—too many late nights were taking their toll. I tried to force sleep. It did not work.

Once I got to SFO, it was time to make it on over to the hotel. I was a bit early. I got there and I could not check in yet. I checked my bag and it was off to memory lane.

I worked in SF during the Internet boom. I worked in the media gulch district, which consisted of old sewing factories and warehouses that were converted into office space. The media gulch district was front and center during the any-lame-idea-can-get-venture-funding days of the Internet boom.

I was only half paying attention to where the hotel shuttle was going during the trip over from SFO. Now as I made it over to Moscone, I realized that I was much further than led to believe from our travel coordinator. Granted I was walking distance from Moscone, but I was told that I was right next to it. I was right next to Union Square. Pretty far if you are supposed to carry over stuff that was sent for the booth.

Oh well, I checked my luggage to the hotel and I am off to gallivant SF. As I am walking along my old haunts, I realize I only vaguely remember a lot of what I must have walked past most every day when I worked here three years ago—is this sleep deprivation or am I stupid.. I was not gone long enough for things to change this much. I remembered things wrong. Now I am hungry and it is lunch time…I am going to find Rickenbaukers and get one of those famous steak sandwiches and look at old Harleys. But, where is Rickenbaukers….after walking around for a while my memory started to coalesce. It is as if my feet knew the way (or my stomach I am not sure which). I finally get to Rickenbaukers only to find out that it is closed on Sunday. Oh what horror….
Then I remember that I did the same thing the last time I was at JavaOne—two years before. Its funny how history repeats itself.

After not finding Rickenbaukers, I decided to eat at this SouthWest Mexican food chain restaurant. I am from the south west, and it is a big mistake to eat at chain mexican restaurants!—it only leads to disappointment.

I then register. And then go hunt for the booth. I don’t have a map so finding it was hard until I borrowed someone’s map only to find I was just about standing next to it

I get to the appointment (meeting at the booth to go over the schedule) early. Leave a note, and decide to crash on the bean bag chairs where I write this nice little story. Still too tired to be productive and too wired to sleep!

Upgrade Your Staff

I wrote down my feeling about skill management and other stuff at the start of 2002. I found this stuff while I was sifting through a wounded laptop that I am replacing.
I thought I would share it.



Upgrade your staff



The dot boom went dot bust. According to Business week 2.0, this bust is a temporary thing due to wild speculation. They cite a study that compares the Internet speculation to the early speculation for railroads and canals in merry old England. The railroad and canals had periods of wild speculation, then a bust, then a long sustained growth cycle.

I remember the bad old days of the dot boom, when you could not get Java developers. The qualification for some places seemed to be a heart beat. A heart-beat developer could make close to six figures and get a hefty supply (about a gazillion) stock options. Finding talented developer during the glory days of the dot boom was tough to say the least.

I left a good job and went chasing the dot com dream. I was given a lot of stock options (about a gazillion—and no I am not a heart beat developer), which turned out to be worthless. I eventually wised up and moved back home, Tucson AZ. I gave up on the two-hour commute and the twelve-hour days.

The funny thing about most of these dot boom shops was that everyone seemed to be a little bit lost. Actually, it started with the management and trickled down to developers. Developer developed software on Internet time, which typically meant painting yourself into a corner. They worked crazy hours and often got nowhere.

The time ended, most shops can go beyond heart-beat developers. Perhaps it is time to upgrade your staff. I know that sounds pretty harsh. Before you judge me, consider there are some humane ways to upgrade your staff.

You could motivate your staff to transcend their current skill level. I think a combination of training, mentoring, pair programming, certification, study grouping and brown bag lunching has a way to motivate your staff to excel.. Remember, individuals will set and achieve goals, but your job as the Alpha Geek is to help motivate others to achieve goals. Your leadership can turn a ho-hum staff into a force to be reckoned with.

Ask yourself this, has every member of your team read the Design Patterns by Gamma et al. If not, why not! If your team is doing EJBs, have they read Mastering EJB by Ed Roman et al at a minimum or EJB Design Patterns and Idioms by Floyd Mariscuea for the more advance.. If your team members are not motivated to transcend their current skill level than they are bound to make costly mistakes. You must encourage this.

This is a two part series. The next part I will define the terms Alpha-Geek, brown bags lunches, mentoring, pair programming, certification, study groups etc.
I wrote down my feeling about skill management and other stuff at the start of 2002. I found this stuff while I was sifting through a wounded laptop that I am replacing.
I thought I would share it.



Upgrade your staff



The dot boom went dot bust. According to Business week 2.0, this bust is a temporary thing due to wild speculation. They cite a study that compares the Internet speculation to the early speculation for railroads and canals in merry old England. The railroad and canals had periods of wild speculation, then a bust, then a long sustained growth cycle.

I remember the bad old days of the dot boom, when you could not get Java developers. The qualification for some places seemed to be a heart beat. A heart-beat developer could make close to six figures and get a hefty supply (about a gazillion) stock options. Finding talented developer during the glory days of the dot boom was tough to say the least.

I left a good job and went chasing the dot com dream. I was given a lot of stock options (about a gazillion—and no I am not a heart beat developer), which turned out to be worthless. I eventually wised up and moved back home, Tucson AZ. I gave up on the two-hour commute and the twelve-hour days.

The funny thing about most of these dot boom shops was that everyone seemed to be a little bit lost. Actually, it started with the management and trickled down to developers. Developer developed software on Internet time, which typically meant painting yourself into a corner. They worked crazy hours and often got nowhere.

The time ended, most shops can go beyond heart-beat developers. Perhaps it is time to upgrade your staff. I know that sounds pretty harsh. Before you judge me, consider there are some humane ways to upgrade your staff.

You could motivate your staff to transcend their current skill level. I think a combination of training, mentoring, pair programming, certification, study grouping and brown bag lunching has a way to motivate your staff to excel.. Remember, individuals will set and achieve goals, but your job as the Alpha Geek is to help motivate others to achieve goals. Your leadership can turn a ho-hum staff into a force to be reckoned with.

Ask yourself this, has every member of your team read the Design Patterns by Gamma et al. If not, why not! If your team is doing EJBs, have they read Mastering EJB by Ed Roman et al at a minimum or EJB Design Patterns and Idioms by Floyd Mariscuea for the more advance.. If your team members are not motivated to transcend their current skill level than they are bound to make costly mistakes. You must encourage this.

This is a two part series. The next part I will define the terms Alpha-Geek, brown bags lunches, mentoring, pair programming, certification, study groups etc.

I wrote down my feeling about last year's JavaOne (March 2002), but I never shared them with anybody. Well my laptop is flaking out, and I am moving over a bunch of files and I read this, and thought I would share it.

JavaWon?


This year’s JavaOne (2002) was good. The technical session were, well, technical and for the most part the marketing spiels were kept to the exhibit hall. This is good. Developers will come to these. Attendance was lower than two years ago when I went, but that is expected. JavaOne is not the mosh pit that it used to be, but the mood was hopeful and upbeat.

I’ve been a fan of Java for a long time. It is a great language, which became a great platform for developing server-side code and I hear other stuff too (I’ve been known to do some Swing development on occasion). I like Java. I use Java. I am firmly in the Java camp at this time and for the past six years or so.

However, the keynotes were a little over the top. And, before I go into a long diatribe about Sun and Scott McNeally, let me say the following. Sun, IBM, et al did an excellent job of providing real choice in the market place.

I do not miss the days when in order to upgrade my first Java IDE (J++) I had to upgrade my operating system to Windows NT 4.0. The real ironic part of this IDE OS upgrade fiasco was that it was for Java and Java is suppose to be cross platform yet the IDE would not work on a later version of the same platform (boo hiss). By the way, I am a big Netbeans fan who is going to try out Eclispe. I like having the Java platform. I like having the choice of best of breed tools.

Apparently it is not enough to like Java and use it. According to Scott McNeally we must become “Java disciples”. Yes he said this in a keynote. I prefer not to mix politics at the office and tend not to be fanatical and dogmatic about technology.

I agree with Sun. Java is a platform. I have the deepest respect and admiration for Scott McNeally, but I don’t agree with him about discipleship. Java is not a religion. Scott McNeally is not a savior. And, Bill Gates is not the anti-savior. Perhaps in the Java Religion it is Jedi McNeally. I can’t decide if Bill Gates is the Borg or Darth Geek in McNeallyism.

First, if you are an IT decision maker, I will not trust you if you are dogmatic about a technology. The best way for Java to win is to continue to be the best technology. IT managers and business folks want the best ROI, i.e., the biggest bang for the buck not a bunch of dogmatic Sun worshippers.

McNeally referred to JavaOne as JavaWon. This may be true. But, the key to winning is not to quit fighting and not to be overconfident. Java is winning, but the battle is not over yet. Scott, the “great monopoly” likes it when companies get over confident.

Yes. I am sure you can spout statistics. Let me spout the past. I was an OS/2 zealot. I was using OS/2 to do Windows 3.1 development at time when Windows 3.1 seemed to crash every twenty minutes (at least for Windows developers). I used OS/2 Window on Windows (WOW) to restart Windows sessions when they died. I really like OS/2. I thought Windows NT was doomed to failure, and OS/2 would rein the supreme OS. I even went to OS/2 user group meetings. Well we all know what happened. Windows NT reined supreme and my IT manager rammed Windows NT down our throats.

Think about the fate of OS/2, Netscape, Novell, WordPerfect, Paradox, Lotus 123 and a long list of former market leaders. Now think about Windows NT/2000, Explorer, MS-Word, Access, Excel and more. To win against .Net is going to take a lot more than dogmatic disciples. Novell, OS/2, WordPerfect, Paradox had dogmatic disciples—it was not enough. It is too early to say Java won. The battle has just begun.

Java is going to have to remain the best technology for getting the job done. It is going to need billions of dollars in research and development and a real commitment (money) from the partner companies. I hope the seven-year head start will give Java some advantage. Java won in the past because companies like BEA, IBM, Sun, Oracle and more got together and competed against the great monopoly.

I am not saying that these companies have not made a major investment in Java. I am just saying that now is not the time to rest on their laurels. There is an 800-pound gorilla heading their way! (Fast forward March 2003, looks like they are doing a good job!)

And, the reality is .Net is very likely going to be a factor. It will attract developers. (Fast forward Mach 2003, not as many as I thought) Microsoft is throwing everything they got into the fray. The Java and .Net battle will benefit one technology. The real winner of this battle will be web services, the lingua franca for B2B and EAI.

One of the messages of this year’s JavaOne is that web services will become part of J2EE. SOAP, ebXML, UDDI, and more will all be supported by J2EE! The upcoming great development platform war will advance the cause of web services like no single platform could do alone. Let me repeat: The real winner of the great platform war will be web services!

If it is not, I hope web services will at least allow me to bridge between my Java applications and .Net applications written by Scott McNeally’s prodigal-sons, the .Net disciples—the Sith.

Given Microsoft’s past track record, might explain Scott’s demeanor. Granted, Microsoft bashing is a time-honored tradition at JavaOne. Typically, Scott does his fair share. In the past he seemed more upbeat about it. Now he seems more serious.


I wrote down my feeling about last year's JavaOne (March 2002), but I never shared them with anybody. Well my laptop is flaking out, and I am moving over a bunch of files and I read this, and thought I would share it.

JavaWon?


This year’s JavaOne (2002) was good. The technical session were, well, technical and for the most part the marketing spiels were kept to the exhibit hall. This is good. Developers will come to these. Attendance was lower than two years ago when I went, but that is expected. JavaOne is not the mosh pit that it used to be, but the mood was hopeful and upbeat.

I’ve been a fan of Java for a long time. It is a great language, which became a great platform for developing server-side code and I hear other stuff too (I’ve been known to do some Swing development on occasion). I like Java. I use Java. I am firmly in the Java camp at this time and for the past six years or so.

However, the keynotes were a little over the top. And, before I go into a long diatribe about Sun and Scott McNeally, let me say the following. Sun, IBM, et al did an excellent job of providing real choice in the market place.

I do not miss the days when in order to upgrade my first Java IDE (J++) I had to upgrade my operating system to Windows NT 4.0. The real ironic part of this IDE OS upgrade fiasco was that it was for Java and Java is suppose to be cross platform yet the IDE would not work on a later version of the same platform (boo hiss). By the way, I am a big Netbeans fan who is going to try out Eclispe. I like having the Java platform. I like having the choice of best of breed tools.

Apparently it is not enough to like Java and use it. According to Scott McNeally we must become “Java disciples”. Yes he said this in a keynote. I prefer not to mix politics at the office and tend not to be fanatical and dogmatic about technology.

I agree with Sun. Java is a platform. I have the deepest respect and admiration for Scott McNeally, but I don’t agree with him about discipleship. Java is not a religion. Scott McNeally is not a savior. And, Bill Gates is not the anti-savior. Perhaps in the Java Religion it is Jedi McNeally. I can’t decide if Bill Gates is the Borg or Darth Geek in McNeallyism.

First, if you are an IT decision maker, I will not trust you if you are dogmatic about a technology. The best way for Java to win is to continue to be the best technology. IT managers and business folks want the best ROI, i.e., the biggest bang for the buck not a bunch of dogmatic Sun worshippers.

McNeally referred to JavaOne as JavaWon. This may be true. But, the key to winning is not to quit fighting and not to be overconfident. Java is winning, but the battle is not over yet. Scott, the “great monopoly” likes it when companies get over confident.

Yes. I am sure you can spout statistics. Let me spout the past. I was an OS/2 zealot. I was using OS/2 to do Windows 3.1 development at time when Windows 3.1 seemed to crash every twenty minutes (at least for Windows developers). I used OS/2 Window on Windows (WOW) to restart Windows sessions when they died. I really like OS/2. I thought Windows NT was doomed to failure, and OS/2 would rein the supreme OS. I even went to OS/2 user group meetings. Well we all know what happened. Windows NT reined supreme and my IT manager rammed Windows NT down our throats.

Think about the fate of OS/2, Netscape, Novell, WordPerfect, Paradox, Lotus 123 and a long list of former market leaders. Now think about Windows NT/2000, Explorer, MS-Word, Access, Excel and more. To win against .Net is going to take a lot more than dogmatic disciples. Novell, OS/2, WordPerfect, Paradox had dogmatic disciples—it was not enough. It is too early to say Java won. The battle has just begun.

Java is going to have to remain the best technology for getting the job done. It is going to need billions of dollars in research and development and a real commitment (money) from the partner companies. I hope the seven-year head start will give Java some advantage. Java won in the past because companies like BEA, IBM, Sun, Oracle and more got together and competed against the great monopoly.

I am not saying that these companies have not made a major investment in Java. I am just saying that now is not the time to rest on their laurels. There is an 800-pound gorilla heading their way! (Fast forward March 2003, looks like they are doing a good job!)

And, the reality is .Net is very likely going to be a factor. It will attract developers. (Fast forward Mach 2003, not as many as I thought) Microsoft is throwing everything they got into the fray. The Java and .Net battle will benefit one technology. The real winner of this battle will be web services, the lingua franca for B2B and EAI.

One of the messages of this year’s JavaOne is that web services will become part of J2EE. SOAP, ebXML, UDDI, and more will all be supported by J2EE! The upcoming great development platform war will advance the cause of web services like no single platform could do alone. Let me repeat: The real winner of the great platform war will be web services!

If it is not, I hope web services will at least allow me to bridge between my Java applications and .Net applications written by Scott McNeally’s prodigal-sons, the .Net disciples—the Sith.

Given Microsoft’s past track record, might explain Scott’s demeanor. Granted, Microsoft bashing is a time-honored tradition at JavaOne. Typically, Scott does his fair share. In the past he seemed more upbeat about it. Now he seems more serious.

I saw two more of the tutorials that we worked on were recently released as follows:
Introduction to creating a Web service from a Java class , and Creating a Web service from a Stateless Session Bean.

These are both part of the WS series we worked on for IBM.

I saw two more of the tutorials that we worked on were recently released as follows:
Introduction to creating a Web service from a Java class , and Creating a Web service from a Stateless Session Bean.

These are both part of the WS series we worked on for IBM.

Tuesday, February 25, 2003

Web services tutorial

Web services tutorial


The Web services Tutorial on IBM WebSphere SDK for Web services V5.0 (WSDK) was just released.
WSDK Tutorial

The tutorial series focuses on JSR 101, JSR 109, J2EE, Web Services Interoperability Organization (WS-I), UDDI, Web services security (WS-Security) specification and more.

1) Introduction to Web services and the WSDK
Jacob Weintraub; Rick Hightower; Kyle Gabhart; Peter Schmitz; David Fraser
February 2003



This tutorial is the first part of an eight part tutorial series. The tutorial series introduces you to Web services concepts and technology, demonstrates how to practically apply them using the IBM WebSphere SDK for Web services V5.0 (WSDK), and explores the current state of Web services technology.

2) Introduction to Web services and the WSDK



XML Web services fundamentals
Downloading, installing, and running IBM WebSphere SDK for Web Services (WSDK)
SOAP, WSDL, and UDDI Primer
WSDK features and tools

3) Creating a Web service from a Java class



Introduction to JAX-RPC
Exposing a Java class as a Web service
Lab: Creating a Web service from a simple Java class
WSDK and JSR109 Components
Lab: Creating a Web service from Java class with complex types


4) Creating a Web service from a Stateless Session Bean (EJB)



Introduction to JSR109 and EJB
Exposing EJB as Web services
Lab: Creating a Web service from an EJB
Using EJBs as Web service clients
Lab: Creating a Web service EJB client
Describing Web Services: WSDL

5) Describing Web services with WSDL



WSDL Architecture (including messaging and encoding styles)
Mapping between WSDL and Java programming language
Digging in Deeper with WSDL and WSDL4j
Using the WSDK's WSDL2Java tool
Lab: Describing Web services

6) Publishing your Services: UDDI



The UDDI Publish API
Publish Process: Interface definition, implementation, WSDL generation, service publishing
Setting up the WSDK UDDI registry
Publishing services to the registry
Lab: Publishing Web services


7) Discovering Web services: UDDI



Digging in deeper with UDDI and UDDI4j
The UDDI Query API
The discovery process: Lookup, interface generation, and implementation
The WSDK, service discovery, and service invocation
Lab: Discovering Web services

8) Securing Web services



HTTP, HTTPS, and SSL3
Digital encryption and XML digital signatures
WS-Security
Securing a SOAP payload
Working with IBM XML Security Suite
Lab: Secure Web services


I've been checking out my buddies blog.... Erik Hatcher Blog Gee.... Why didn't they ask me to go kyaking? I wouldn't have gone, but hey it is the thought that counts. My last extreme sport was snow boarding. Okay okay.... it was not very extreme.... I never left the bunny slope, and I still hurt.




Thursday, February 20, 2003

George sent me the patent number of the patent that we authored.

6,510,550

Wednesday, February 19, 2003

I am still a Java fan. I think .Net competition is making Java better.

JDK 1.5 is Java's answers to cool C# language features
Java Server Faces is Java's answers to the ASP.Net cool event model
IBM WSAD (and others) is Java's answer to Visual Studio .Net
Apache Axis and IBM WSDK is Java's answer to ASP.Net web services.


Tuesday, February 18, 2003

It's a boy! I just found out today that my wife and I are having a baby boy!
Lucas Richard Hightower is on the way.

Monday, February 17, 2003

I am speaking for the Complete Programmer Network series in Philly on April 11-13th and St. Louis on May
30-June 1st on the following sessions:


1) Title: J2EE development with XDoclet and Ant

Abstract: Covers developing J2EE components with XDoclet. XDoclet can drastically speed J2EE development by generating component support files by embedding meta data in what looks like JavaDoc tags of the component implementation. Demonstrates developing Custom Tags, Entity Beans, Session Beans, and Struts Actions with the assistance of XDoclet combined with Ant.


2) Title: Principles and Practices of Effective Developers

Abstract: Regardless of methodology or technology there are certain universal practices and principles of effective developers. Covers how to use these principles and practices to make effective decisions on methodology, technology selection and dealing with management, other developers and customers.


3) Title: Extending Struts: Bending Struts to fit your needs

Abstract: Okay you think you have mastered Struts, but you wish it could just do this one special thing? This session shows you how to go beyond the Struts basics to extend the framework to fit you needs. Struts was designed to be extensible. Learn how to extend it. Advance Struts topics about extending the framework using Struts plugins, and extending the Action Servlet, Custom Actions, the RequestProcessor, and more. This is an advanced topic that assumes previous knowledge of Struts.

4) Title: Advanced Struts:
Abstract: These are advanced topics that assumes previous knowledge of
Struts.
Advance Struts
* Uploading files with Struts Forms
* Defining your own custom tags using Struts
* Generating Struts config with XDoclet and Ant
* Using BeanUtils, and PropertyUtils
* Using Velocity instead of JSP for views
* Using JSTL instead of Struts tags for views
* Unit testing Struts Actions with Cactus
* Unit testing Struts based Custom Tags with Cactus
I am speaking at TheServerSide.com Sypmposium in June in Boston.

Java Web Services Update: IBM WSDK
Rick HighTower

Covers features, APIs and tools delivered with IBM's new Web Services Development Kit. IBM is really showing leadership wrt to Web Services, and new WSDK is way ahead of the curve in delivering on the vision of Web Services for Java developers. The new version of IBM's WSDK is going to release this year before the show. Specifically the WSDK is including features associated with JSR 109 and JSR 101 and additional work done by IBM wrt WSI. This session will cover those features with examples and follow up material.


J2EE development with XDoclet and Ant
Rick HighTower

Covers developing J2EE components with XDoclet. XDoclet can drastically speed J2EE development by generating component support files by embedding meta data in what looks like JavaDoc tags of the component implementation. Demonstrates developing Custom Tags, Entity Beans, Session Beans, and Struts Actions with the assistance of XDoclet combined with Ant.

They listed me as follows:

Rick Hightower. Author, Java Tools to Extreme Programming, Mastering Tomcat co-aurhor.
Presenting: Java Web Services Update: IBM WSDK and J2EE development with XDoclet and Ant

Opps... I am not the co author of Mastering Tomcat. I did author about 1/5 of the book Mastering Tomcat (2 large chapters). One of the presentations is based on the XDoclet material I created for the book. The other presentation is based on the IBM WSDK tutorials I contributed for.

I've been talking about this mysterious project for a while. I never gave it a name because it was top secret or so I thought. "LPc Tech Team Selected to author IBM developerWorks Web Services Tutorial Series" was on our website for the last month. I did not realize that it was public on our website since 1.17.03. The project that I was burning the midnight oil was the tutorials for the WSDK 5.0. I worked on the tutorial with Kyle Gabhart, David Fraser, Jacob Weintrub, Rawn Shah (editor of IBM developerWorks), Simon Nash (CTO of IBM Technology), Peter ? and quite a few others. It was a blast of a project to work on. And it was fun working with the newest and latest Web services tools from IBM. Download the WSDK 5 now!. They have really simplified Web service development a lot.


BTW WSDK stands for IBM WebSphere SDK for Web Services (WSDK) Version 5.0.

"WSDK 5.0 is designed to address the needs of experienced Java programmers who want to quickly learn how Web services can be created using existing Java components and achieve seamless integration with disparate systems. The WSDK combines the industry-leading expertise of IBM in Web services with the power and functionality of the IBM WebSphere Application Server 5.0 to offer a low-risk, affordable entry to Web services. Future versions will implement new Web services features in support of profiles and scenarios defined by the Web Services Interoperability Organization (WS-I.org)."

"Supporting the latest specifications for Web services including WS-Security, SOAP, WSDL, and UDDI, WSDK 5.0 can help you build and test Web services that can be optionally integrated with other legacy services using IBM WebSphere Studio V5.0, and deployed on industry-leading IBM WebSphere Application Server V5.0."

Thursday, February 06, 2003

I met with Andy Barton and Nicholas Lesiecki for lunch. We ate at Gavi's. Andy and Nick are from eBlox (ebloX) and they have really tuned the eXtreme Programming for doing contract work and outsourcing of projects. Nick has a book coming out on aspectJ. I can't wait to get a copy.

I am trying to get them to do some project together. I hope they can work with us. They are a real asset to any team.

Too Extreme?


What is in a name? Too Extreme



I like everything about eXtreme Programming except the name. Why?

Here is how extreme is defined at dictionary.com:


extreme
adj.


  1. Most remote in any direction; outermost or farthest: the extreme edge of the field.

  2. Being in or attaining the greatest or highest degree; very intense: extreme pleasure; extreme pain.

  3. Extending far beyond the norm: an extreme conservative. See Synonyms at excessive.

  4. Of the greatest severity; drastic: took extreme measures to conserve fuel.

  5. Sports.
    Very dangerous or difficult: extreme rafting.
    Participating or tending to participate in a very dangerous or difficult sport: an extreme skier.

  6. Archaic. Final; last.





Went Kent Beck coined the term eXtreme Programming I think he meant the second definition as in very intense. However when most people think of extreme (thanks in a large part to Mountain Dew commercials) they think of third (beyond the norm) and the fifth (very dangerous or difficult).



The name eXtreme Programming is probably one of the reasons it is so well known (the name is powerful),
yet at times the biggest problem with adoption is sometimes the very name that made the movement popular.
eXtreme Programming is about quality not reckless danger and unwarranted risk. eXtreme Programming
is about an intense customer-centric, safe, and risk averse development.



I see shops that are in real pain. Yet management wont give eXtreme Programming a second thought
because in their mind it is associated with reckless, risky, sloppy development.
Nothing could be further from the truth, but how do you convince people of this


Tuesday, February 04, 2003

I did so well on the stuff I was suppose to do that they gave me a lot more stuff to do. Everything they gave me to do was already due (late). Jacob and I have been burning the midnight oil getting this project out the door. I worked all last night till 5 AM on the project, then this 9:30 AM Jacob had more stuff for me to do. I just finished (3:00 PM). I think I'll say hello to the wife and kids. Then work on the pile of paperwork (expense reports) that have been festering. LOL :o)

Sunday, February 02, 2003

Ahhhhhhhhhhhhh..... Two days late, but finally done. Not too shabby.... What is the difference between Friday COB and Sunday PM? Usually none, but there were folks waiting for it on the weekend. This project being part of a larger project. I was close.



When I thought the project needed just one more hour.... it took 9! Three hours of that on an International call. (A bit of long distance pair programming... more like pair debugging). Ahhh.... the joys of development.



Tired? Yes

Happy? Yes

Satisfied? Yes

Burnt out? Nothing a nice dinner with friends would not solve

Friday, January 31, 2003

Definition of a software developer with schedule problems....

Level 1 Schedule starts to slip.... what the hell I'll give up exercise (this is the easiest for me to give up).
Level 2 Schedule starts to slip... I'll give up some sleep... 8 hours a day is a waste of time anyway.
Level 3 Schedule starts to slip... I'll give up taking a full hour lunch... Cheetos and Root Beer is enough.
Level 4 Schedule starts to slip... I'll give up personal grooming... Who has got time for friends anyway.

Everyone knows when you unhealthy, sleep deprived, malnurished that you can develop so much faster. Ugh!

Is it too late to become a fire fighter?

Wednesday, January 29, 2003

David Fraser is one of the smartest developers I have ever worked with.
He can figure stuff out. He tries, tries and tries until he gets it.
He has not met an app server he could not configure. They all bend to his will.

Friday, January 10, 2003

Not so Extreme


What if Extreme Programming was not extreme?


Effective Development Principles and Practices for all Methodologies




What if you could take the key principles and ideas from Extreme Programming and package them so that they could be more applicable to any type of process. As a consultant, I cannot always pick the process that the team has chosen. And, quite often there is a lot of resistance to the idea of Extreme Programming but not the ideas of Extreme Programming (read that again). Often times companies have already picked their process and best practices. Can you impact what is in place without causing massive political disruption? Extreme Programming causes much more resistance then it should. Can you seperate the idea of Extreme Programming from the ideas of Extreme Programming? Can you soften the tone of Extreme Programming so that it is not so "in your face different" than the accepted school of thought?




I think you can. According to dictionary.com a principle is "a basic truth, law, or assumption". Since Extreme Programming is based on principles for effective development, then these basic truths must apply to other methodologies and processes. Let's start by renaming this to Principles and Practices of Effective Developers. Then let's soften it to make it more palatable to people who would otherwise have a natural aversion to Extreme Programming. Since this paper is based on XP principles and for that matter agile programming assume all ideas are really variations of ideas presented by Kent Beck, Scott Ambler, Martin Fowler and the rest.




To begin, let's make the following assumption: The Ultimate goal in any software project is to deliver working software in a timely manner. The software should meet the customer’s needs and expectations (at least their needs).


There are many other ancillary goals to achieve this ultimate goal. In addition to many goals, there are many ways to meet those goals. To meet these goals you need to make some key decisions as follows:





  • "Reckless" coding vs. very disciplined

  • No design vs. Paralysis Analysis
    • When is it Paralysis Analysis?
    • Should all projects be treated equal?
    • Pace Maker Embedded Software vs. Online Catalog


  • Use a Lightweight methodology or heavier weight?
    • Ad Hoc vs. RUP or SCRUM or FDD or XP
    • How do you identify what is heavy weight?

  • Code-centric process vs. Document Centric
  • How much design and documentation is enough?



For example: To what level you will design the project up front. The level of detail you put into the design has a relationship to how much feedback you can get back from your customer, and how catastrophic failure would be. For example, if you are writing embedded software for a pace maker, you cannot expect a trial and error approach. The specification, design and testing will all have to be very rigid. On the other hand, an online catalog is a lot less rigid. Often customers don’t know what they want until they can work with a working version, and you expect several iterations of changes (your process should reflect this).


Notice that the most of the choices above are degrees on a continuim. This is nice since they can be adjusted according the project, management style, corporate culture, etc. How do we adjust these? Are there principles to tell us?



The decisions above are not taken lightly. They are different depending on makeup of your team, corporate culture, and type of project you are working on. It is easy to advoacte a rigid process or methodology, but this will not work. Every methodology has its strengths and weaknesses, and no methodology (unchanged) fits every combination of project, corporate culture and team.


Purists and Evangelist be damned, there is no one size process and methodology that fits every organization, corporate culture and project. However, there are principles, values and practices applicable to all projects and are key to making decisions listed above. At times (as a consultant or even an employee), you do not always have the power to change the companies software process.




Now we agree on the goals. What are the things we value the most to reach those goals. Here are the 5 main values lifted mostly from Kent Beck with one stolen from Scott Ambler:



5 values of an Effective Developer



  • Communication

    • Customer Centric, Stories (Use Cases, Feature Descriptions)
    • Shared Knowledge (Pair Programming), Task Estimation
    • Iteration Planning, Design sessions

  • Simplicity

    • Choose simplest thing that will work
    • Choose the simplest design, technology, algorithm, technique

  • Feedback

    • Small iterations, frequent deliveries
    • Pair programming/constant code review
    • Continuous integration, automated unit tests

  • Courage

    • Courage to refactor, estimate, throw away bad code
    • Automated testing breeds courage to change code

  • Humility

    • Trust, Constructive confrontation, Don’t underestimate peers
    • Value others skills: manager, project manager, customer, marketing
    • Arrogance: “Pointy hair boss”, “Dumb customers”, “Unrealistic Project manager”.
    • Senior vs. Junior; Cowboys okay (white hats only); Respect Individuality and Strengths of team members




Communication
:
It should be no surprise that communication should be valued. Any team larger than one needs effective communication. (Even a team that has one developer is larger than one: the customer makes two.) Let's cover some common forms of communication for an effective developer. Stories (Use Cases, Feature Descriptions, User Stories etc.): Have the customer help with the Stories. User Story become major milestones for completion; they communicate to the team the progress of the project. Customer Centric: Let the customer drive through user stories, iteration planning, feature requirements, etc. Prioritize user stories by doing the ones that provide the most business value first (customer picks). Shared Knowledge (Pair Programming, Knowledge Management): Working together is faster than working alone. Code is not reusable unless others know how to reuse it. Task Estimation: Estimate based on past performance. Be honest and task estimation gets easier as the project progresses. Iteration Planning: Refine Stories and estimate tasks for this iteration: work with the customer to do this. Stories are excellent goals for an iteration. If the story is too big, split into two or more stories. Or if the story can not be split split the story parts into two iterations. Design sessions: Design can be done during implementation if it helps you understand problem domain or during Iteration Planning if it helps plan the iteration. Design helps the team communicate ideas quickly. Design until you can proceed with code. Feedback: Feedback is very important. It is hard to judge where a project is and how much progress you are making without feedback. No feedback is like not having a compass. Small iterations, frequent deliveries: This shows that certain features of the system work, complete with unit tests that pass. Also the sooner the user (or marketing) can provide feedback, the more likely the project will stay on track.




Let it go; Don't be dogmatic

I don't see castrophic differences between Use Case Scenarios as compared to User Stories. Use Case Scenarios are much more detailed and are a bit more organized but the goal is very similar to User Stories. Both are used to break the project into milestones and are used to divide a project up into iterations (one for the Unified Process the other for Extreme Programming). From now on, I will refer to this concept as a User Story. Don't be dogmatic about Extreme Programming, RUP or any methodology. You have a better chance of improving your process gradually then you do by taking a dogmatic stance. For Example saying: "Use Cases suck. It is too complex. Let's just do User Stories" will not do much good in a RUP shop. Nothing can stop progress faster than making such a statement. Prefer gradualism. Most of principles of an Effective Developer can be flown under the radar with full support from management. Focus on gradual improvement not arguing or taking dogmatic stances. I agree that it is not as fun, but it is sure more productive.




7 Principles of an Effective Developer








  1. Software is the primary Goal

    • Enabling secondary effort is secondary goal; Use before Reuse
    • Business value before elegance

  2. Provide Rapid Feedback

    • fast feedback = ability to respond;
    • allow customers to steer process (if no customers then customer representative, I.e., marketing)

  3. Assume Simplicity

    • every problem is simple until proven otherwise
    • != skipping design step; design should focus on current iteration only!
    • counter-intuitive to common thought on software design, reuse
    • Do not abuse technology, frameworks or design patterns


  4. Make Incremental Changes

    • Do a little at a time; biggest bang for the buck:
    • Website: refactor most hit pages first

  5. Embrace Change

    • Customer changes mind; Customers steer

  6. Do Quality Work

    • Developers Prefer Quality work; Customer steers

  7. Travel Light

    • Eliminate every process that does not aid in your primary goal
    • Minimalist






A working system that provides business value is the ultimate goal. The ability to provide more features, extend, and reuse is an important secondary goal: never cloud your primary goal! Don’t add code features until you need them. Don’t apply design patterns until you have to. In fact, the early application of Design Patterns is epedemic in many big design up front shops. This can slow development down to a crawl. (P.S. I believe in the utility of Design Patterns; just not how they get abused.)


Assume simplicity. Do not clutter the architecture with unneeded features. Try the simplest way first. Objects can be replaced. Concentrate on interfaces and collaboration not perfection or purity. The customer does not care if you used the latest buzzword technology or not. Their emphasis is on business value.


Make incremental changes. Avoid sweeping changes in architecture. If changes are needed, focus on providing the most business value. Test the water before diving in.


Complex systems are difficult to specify. Customers don’t know what they really want until they see what they don’t want. Embrace this. Don’t fight it. Let them drive what features are the most important and what gets done first. Projects that are 50% done but are useful to customers are better than projects that are “100% done” but nothing like the customer needs or wants.


Customers hate shoddy work. Developers hate delivering shoddy work. It feels good to deliver a solid system. Nothing breaks morale faster than delivering garbage.


Travel light by eliminating every process and task that does not aid the ultimate goal. Review your process often and improve on it. Evolve it.


12 Practices of an Effective Developer




  1. Planning game: Do iterative development. Finish a story per iteration. If the story is too long, split it up. Try to keep the iterations short. Base task estimation on past experience of similar tasks. Calculate each developers task factor in ideal days. Add a factor for each developers estimation bias. Train developers to get closer and closer to ideal days. Developers should never excluded from planning (otherwise no buy in and no valuable input).

  2. Small Release: The smaller the release; the sooner you get the feedback. Feedback is through customer using what you have completed.

  3. Simple Designs : As simple as the project will allow. Add complexity only when needed through refactoring. Don’t try to guess reusable areas too early. Design until you understand the domain enough to build an iteration. Refine your design each iteration.

  4. Automated Testing : A feature does not exist unless there is a test that proves it works. Try to catch most bugs before they hit QA. Then QA will allow less bugs to filter through to the customer. Every bug found gets a test case that can force it; then it is fixed.

  5. Continuous Integration: Build, deploy and test in the integration environment often. The build does not work until all of the automated testing passes.

  6. Refactoring : When you embrace change, you realize that it is harder to predict what the final set of features will be added or needed (Conversely, what you deliver will be what the customer needs). Thus many architecture decisions can and should be delayed. This delay allows you to write a working system sooner; and allows you to gain additional insight into the problem domain. Since the tests are setup before the code is written, refactoring is facilitated. Refactoring is usually triggered when adding a new feature to the system breaks the systems coherent design, I.e., when the code starts to stink.

  7. Shared Knowledge : It is hard to reuse a piece of code you do not know exists. Sometimes the least effective way to share knowledge is through meetings and documentation. It is often easier to understand how a piece of code works by looking at a unit test case, reading an ad hoc description in WIKI, or pair programming than by looking at API docs. Pair programming is when two developers work on a task together after each task you switch partners. At first glance to many managers, this seems ineffective. However, it saves in duplication of efforts: reinventing the wheel. Less code to invent equates to less code to maintain and a simplified code base. The typical experience with many projects is vast acceleration of efforts and the production of a quality code base. You cannot reuse code if you do not know it exists. You cannot reuse code if you don’t know how to use it. The spread of project knowledge (domain and technology) by pair programming is viral and it is exponetially more effective than meetings. This is the main point folks miss about pair programming. The viral spread of knowledge. The other points about pair programming are secondary in my opinion.

  8. Team Ownership: Team ownership is the teams collective ownership of the project. This allows project flexibility as any developer can be assigned to any piece of the system. This often requires that each developer be versant in many aspect of development, which generally improves morale but puts a heavy burden on the skill sets needed and training. This can be alleviated through shared knowledge: particularly through pair programming. Management should also be willing to train employees. (2 weeks of training per quarter; budgets allowing)

  9. 40-hour week: How effective are you if you work 80 hours in one week? How effective are you if you do this several weeks in a row? What happens with the quality of the project? Occasional sprints are okay. But software development is a marathon race. Go home. Come back refreshed.

  10. On-site customer representative: The customer representative, which can be the customer or marketing or someone else who advocates the customer interests effectively, needs to be active in the project. This is especially the case during the planning game.

  11. Common Vision: You need to cultivate a common vision of the project with your customer. What does the project need to do? What is the vernacular of the domain? Are you using the customer-speak when you design and code the system?

  12. Coding Standard: Variety is the spice of life; except for software development. Agree on a coding standard and enforce it. Be flexible; don’t get into the bracket wars (see humility value). This transcends naming conventions and digs into other metrics, e.g., average lines of code, how to handle exceptions, and the like.



    I am not done yet. But this is a good start an outline of where I want to go.

    Random Thought: If you think pair programming 100% of the time is a waste of resources. How about pair programming 25% or 10%?
    TODO: Discuss XP's design per iteration vs. UP's elaborate design per iteration?

Thursday, January 09, 2003


I find that consultants at times have a hard time mentoring. The goals are a lot different. The mentors goal is to make himself obsolete, i.e., the company he is working for eventually does not need him. The contractors goal is to get more contracts. Contractors have this nasty way of multiplying. This is not to say that contractors are bad. They are not.

Tuesday, December 31, 2002

I just had a great vacation. I was in a ski lodge in Colorado (Powderhorn). I learned how to snow board (sort of).



The first day of vacation, me and the kids went sledding. This is quite a treat if you come from Tucson AZ like we do.




The first day of sledding, we hit a tree. Ouch. Actually the sled spun around, and I hit the tree breaking the kids fall on my rib cage.




The second day of sledding. I decided to sit this day out (mostly). I spent my time carrying my daughter's sled up the hill for her.
Then giving her a starter push. Then running down the hill. Repeat.




My oldest son is big enough to carry his own, and my youngest son is not old enough to sled.




I did go down the hill once more. Some kids setup a jump. My goal was to avoid the jump at all cost.
My glasses fogged up (zero visibility) and my sled ended up going backwards most of the way down the hill.
Needless to say.... I did not avoid the jump. I caught big air, and landed on my rump (really hard).




I wish I had video tapes of the two sledding accidents. They must have been funny to watch.




A few days later, I took snow boarding lessons. I fell on the same injured rump many times.
It was fun and I stuck with it longer than I wanted to stick with it. I used the reasoning that I paid for snow
boarding lessons and I am going to use them no matter what.




Adam Carr and Missy Carr (my sister) went with us. Our kids took skiiing lessons together. They did really well.
Adam is a software security guru at HP. Adam was amazed at how well the kids did after two days of skiing lessons.




I spent a good portion of my time playing cards, drinking hot choclate, and generally having a good time.
I am healing, and I am ready for a new year of Java development. Rested and ready to go... just a little sore.




Friday, December 06, 2002

I've got this strange email message from Rational..... Here it is for your enjoyment....

A Tour Through the RUP Plug-In for XP Webinar- Register now!
************************************************************************
FREE WEBINAR: RUP and XP: A Tour Through the RUP Plug-In for XP

Date: December 11, 2002 and February 19, 2003
Time: 4 PM - 5 PM ET

**GUEST SPEAKER: Robert Martin of Object Mentor

Register at:
http://www.rational.com/events/webinars/details.jsp?EVENTID=2087
eXtreme Programming (XP) is a software development method that allows
small to medium teams, in the right circumstances, to work effectively
with low ceremony, producing high-quality software. This Webinar,
developed and presented by Rational and Object Mentor, a leading XP
consulting company, explores the new RUP Plug-In for XP. We look at the
features of the Plug-In, the benefits it delivers for teams wishing to
employ XP, and how it fits in within the complete RUP platform.

This Webinar will help you to:
* identify the key principles and benefits of XP,
* determine if XP is appropriate for your project(s),
* and understand how the RUP Plug-In architecture allows you to
configure your process for your project.

Yada yada yada
...

We look forward to having you join us.
The Rational Team

I think this is a strong testament to the popularity of XP. In the post boom era, the focus will be more on RESULTS than on "ceremony" for the sake of "ceremony". Is this amazing? I find it so. Maybe this will once and for all end the XP vs. RUP/UP debate. I doubt it. My opinion has always been that your team should study several methodologies and then adopt the one that best fits the organization and corporate culture (not to mention the application and customers). My feelling is that even if you adopt UP, you should adopt some of the XP practices and principles.

(If you want to learn more about this topic, I suggest Scott Amber's book Agile Modeling.)

The biggest problem I see is the dogmatic attitude of many XP and RUP practitioners. Hopefully this seminar will meet somewhere in the middle.


I've got this strange email message from Rational..... Here it is for your enjoyment....

A Tour Through the RUP Plug-In for XP Webinar- Register now!
************************************************************************
FREE WEBINAR: RUP and XP: A Tour Through the RUP Plug-In for XP

Date: December 11, 2002 and February 19, 2003
Time: 4 PM - 5 PM ET

**GUEST SPEAKER: Robert Martin of Object Mentor

Register at:
http://www.rational.com/events/webinars/details.jsp?EVENTID=2087
eXtreme Programming (XP) is a software development method that allows
small to medium teams, in the right circumstances, to work effectively
with low ceremony, producing high-quality software. This Webinar,
developed and presented by Rational and Object Mentor, a leading XP
consulting company, explores the new RUP Plug-In for XP. We look at the
features of the Plug-In, the benefits it delivers for teams wishing to
employ XP, and how it fits in within the complete RUP platform.

This Webinar will help you to:
* identify the key principles and benefits of XP,
* determine if XP is appropriate for your project(s),
* and understand how the RUP Plug-In architecture allows you to
configure your process for your project.

Yada yada yada
...

We look forward to having you join us.
The Rational Team

I think this is a strong testament to the popularity of XP. In the post boom era, the focus will be more on RESULTS than on "ceremony" for the sake of "ceremony". Is this amazing? I find it so. Maybe this will once and for all end the XP vs. RUP/UP debate. I doubt it. My opinion has always been that your team should study several methodologies and then adopt the one that best fits the organization and corporate culture (not to mention the application and customers). My feelling is that even if you adopt UP, you should adopt some of the XP practices and principles.

(If you want to learn more about this topic, I suggest Scott Amber's book Agile Modeling.)

The biggest problem I see is the dogmatic attitude of many XP and RUP practitioners. Hopefully this seminar will meet somewhere in the middle.


Monday, November 25, 2002

I've worked with a few frameworks for doing web services. I really, really like Apache Axis.
I've worked with a few frameworks for doing web services. I really, really like Apache Axis.

Friday, November 22, 2002

> A good review of an interesting book:
> http://slashdot.org/article.pl?sid=02/11/13/1550230


I was reading through some of the slashdot posts. The part I find funny about the whole XP debate is that is often not the case of RUP vs. XP. More likely (in my travels anyway)... it is XP vs. nothing.... Or XP vs. Anarchy. In this case, XP always wins. A bar glass could win against complete anarchy.

I enjoy teamwork. I enjoy bouncing ideas off of colleagues. I enjoy learning from them as well as sharing new ways of thinking with them. I enjoy working a full day programming instead of contemplating navel lint in a big muckyedy muck meetings. Most of all, I enjoy writing high quality code!

XP is not for everyone. It is not for every organization. But it is the way I prefer to work. Given the choice, I rather have RUP than Anarchy. RUP/UP is good. XP requires a real good team so by default it has a lot of success.

XP does not mean there will be no design. XP does not mean there will be no planning. In fact, XP (done right) is very structured and focused.

I was thinking the other day.... I don't like .Net, but I really like C#. Has anyone ported C# to the Java Virtual Machine? I think I would use it. (at least try it)
I pulled an allnighter last night. I was making good progress on this project, and I did not want to stop. I am too old for this. Actually, it was not going to be an allnighter until I ran into some things that did not work the way we planned. It seemed better to make the delivery date than to sleep. Plus, this has been one of those projects where nothing works like it should. I took a good chunk of yesterday just researching the technology and architecture.... you know regrouping... licking my wounds. This gave me the raw data to figure out problems that use to stump me. Now I laugh at those problems.... HAH!

Thursday, November 21, 2002

Hey I got this email note from BrainBench about my XML test score.
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Great Test Score!

Hi Richard,

Congrats on the nice score you got on our XML beta test. Actually, it's a great score considering there have been a lot of attempts so far and you scored in the top 10!

We need to incorporate feedback from this beta test into the test. I thought I'd inquire with you to see if you might be interested. I know you've got the knowledge, the question is....do you have the interest?

Based on your knowledge, feedback from the test and the item results from the beta test, you will recommend changes in the questions, the choices and difficulty level changes. For reviewing and incorporating the feedback, the pay is $400! Based on your work and how quickly this is done, there is a possible bonus also.

Our requirements of you are that you have experience in the field, have access to MS Access (version 7.0 or higher) and could turn the test around in a week.

Please let me know if you are interested. If so, please provide me with a convenient time/number to reach you, so that I can go over the task in greater detail.

Please do try to get back to me as soon as you can, however, as I am extending the same offer to others with scores of a similar rating who excelled on the test.

Again, great score!

Randy Kraemer
Test Development Manager
Brainbench, Inc.

We measure the skills that drive your success.
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

Monday, November 18, 2002

Things are going well. No one answered my posts on the WSDK forum. Kyle Gabhart helpled me figure out how to deploy my web service on the WSDK. It is now deployed. Yeah. Kyle is my hero.

Wednesday, November 13, 2002

I just took three XML tests on BrainBench(BB): XML Concepts, XML Module and XML. It has been a while since I took the test, and my knowledge of the subject has been expanded. I missed master level on XML, but got it on the XML Concepts, and XML module test. The XML module is the replacement for XML, but it is still in beta.

The funny thing is that I got in the 98 percentile on the XML test, but did not get master level. This means that less than 2% of the people taking the test get master level scores. I missed master level by 0.07.

The tests seem to be too focused on XSL, and they hardley cover DTD, entity declarations, mixing DTD with namespaces, etc. I did really well on the XSL part. Where I messed up is on the industry jargon.

The XML Module, which is in beta, does not show up on my BB transcripts. But here are my results that BB emailed me. I did much better on the beta than the real test.
The beta test allows you to add comments for improvements. I added a lot of comments (this increased my average response time to 90 seconds). Warning:Don't take the test unless you really get XSL.

Dear Richard Hightower,

Thank you for taking a Beta Test!

We appreciate your time. Although you will not receive a certificate
since the test
is still under construction, you have played an integral
part of the test development process.
Our assessments are delivered to companies worldwide to
improve selection, development, and skills tracking processes.
If you were a corporate customer, this is the output you
would receive after an employee or a potential employee took
an assessment for your company. You could also view this
information via the web immediately upon its completion.

----------------------------------------------------------------------

Date: 2002-11-13 18:40:42(US EST)
Client: Brainbench, Inc.
Profile Name: Beta XML Module (BETA XMLMOD)
Test taker: Richard Hightower
Pin: PRRS222BRPASGRY
----------------------------------------------------------------------
Module 1: XML Module
Score: 4.13 (Scale of 1 - 5 where 5.0 = Best)
Higher than 96% of all previous test takers.

Demonstrates a clear understanding of many advanced concepts
within this topic. Appears capable of mentoring others on most
projects in this area.

----------------------------------------------------------------------
Module 2: XML Module
Score: 4.61 (Scale of 1 - 5 where 5.0 = Best)
Higher than 99% of all previous test takers.

Demonstrates understanding of most advanced concepts within the
subject area. Appears capable of mentoring others on the most
complex projects.

----------------------------------------------------------------------
Weighted Average Score: 4.37
Total Test Time: 64 minutes, 24 seconds
Avg. time per question: 96 seconds
----------------------------------------------------------------------

On a lighter note I saw the movie ISpy last night. This is the best Eddie Murphy in the last five years. ISpy was really good.

I met with Erik Hatcher at the Lone Star Software Symposium. We talked about what it would take to make a standard mappings for CMR (EJB CMR) with XDoclet. He has done a lot of work with the XDoclet Struts templates, and had some great ideas and insight on how to proceed.

I am teaching a XML, XML and Java (JAXP, DOM, SAX, JDOM and JAXB), and XSL course this week, and my attention is really focused on this course. Every night I am reading the course material for the next day. I am familiar with the topics already, and have used them in the real world. The trick is getting familiar with the slides, and material.

Thursday, November 07, 2002

I just bought the IBM WebSphere Bible. I stayed up last night reading it. I stopped reading when my eyes started to bleed. I did not see the solution to the exact problem I was having, but the book gave me plenty of ideas where to look. This book (so far) seems to be a really excellent resource for IBM WebSphere. My only complaint is that I did not buy this sooner.

I kept waking up in the middle of the night. I had some weird dreams about WebSphere. I don't remember any of them..... I only remember that I kept waking up and I was dreaming about work. I had no problems sleeping this AM. I got up at the crack of 9:30 AM.

Wednesday, November 06, 2002

Fun with XDoclet.
I tried to get a simple CMP bean to work with the new XDoclet
features. I used the new @ejb.persistence. I did not get any error messages, but
the CMP field mapings did not get generated in the resin.ejb file.

Then Ara of XDoclet fame told me: "That's because the resin module doesn't support ejb.persistence tags
yet."

So I set out to learn a few things about XDoclet with some help from Erik Hatcher...
I modified the resin CMP mapping template. It was really easy to change.
I had to modify the file resin_ejb.xdt file. I tested it and it works for simple CMPs.

Then Erik told me to make it backwards compatible with the old way, and I did.
Then I started to wonder about relationship mappings.....

I checked and I could not find any standard xdoclet cmr mappings either
documented or in the examples that ship with XDoclet.

This seems a little harder than just changing the template like Resin CMP
support. Any direction on how to attack this would be great! I am going to
pick Erik's brain this weekend, and read the XDoclet chapters in his Ant
book for prep.

My idea on how to manifest cmr support in the tags.....

Add an extra parameter to @ejb.relation called relation-column-name and target-relation-column-name (for unidirectional support).

This idea got shot down by Aslak Hellesøy [aslak.hellesoy@netcom.no]. He stated the following:

"""
I would study the existing proprietary @tags and try to come up with a
common denominator. Don't forget that a foreign key is _not_ the same as a
foreign key _column_. Some foreign keys consist of multiple foreign key
columns, and the tags would have to account for that. This means that it's
*no* good to add key/foreign key attributes to the @ejb.relation tag (which
might seem intuitive at first). We need a separate tag for foreign keys, so
that it can be repeated once for each foreign key column in the foreign key
that corresponds to the relation. Picture:

+---+ +---+
| X | | Y |
+---+ +---+
|*a |\__/| m |
|*b |/ \| n |
+---+ +---+

This is one relation between table/EJB X and Y. It has one foreign key that
consists of 2 foreign key columns. -So we need 2 tags to describe the
relation.

Have a look at
http://boss.bekk.no/boss/middlegen/samples/airline/ejb/ReservationBean.java.
html, more specifically the getPerson() method to see an example. You'll see
single-column foreign keys (which is the most common scenario). -But we
should support the less common scenario as described above.

Also look at a "picture" of the database:
http://boss.bekk.no/boss/middlegen/ (click the screenshot).

As you see, both JBoss and WebLogic identify the foreign key columns by
declaring the column name. -But! JBoss uses the java bean property - in this
case "flightId" which corresponds to the getFlightId() method - to identify
the primary key column. A primary key column will _always_ have a
corresponding getter/java property in an EJB, so this is a safe assumption.
However, you might have a foreign key column for which there is no
corresponding getter/java property, so in order to identify the foreign key
column, you have to declare the database column name. WebLogic uses a
different approach, which is also safe: Use the rdbms column name for both
pk and fk.

Going for the JBoss "way", using java for pk columns and sql for fk columns
is the way to go IMO. It's possible to deduce the corresponding rdbms pk
column for an EJB pk field by looking at the @ejb.persistence tag, so the
WebLogic descriptors can still be generated correctly. Therefore my approach
is:

@rdbms.relation
foreign-key-column="some_database_column"

primary-key-field="someJavaPropertyWhoseMethodHasAnEjbPersistenceTagThatMaps
ToTheRdbmsColumn"

Now a little challenge: How would you represent the non-common info? JBoss
has a fk-constraint="true|false" proprietary attribute on the current
@jboss.relation tag. Where do you specify that now? It would be best to
specify it on the same @rdbms.relation tag. It bloats the tag a little bit
with "proprietaryness" but it's better than adding a third tag. -And in the
case where you have a foreign key that consists of 2+ columns you'd have to
invent an additional name attribute so you could link the jboss info to the
correct @rdbms.relation tag. Therefore:

@rdbms.relation
foreign-key-column="some_database_column"

primary-key-field="someJavaPropertyWhoseMethodHasAnEjbPersistenceTagThatMaps
ToTheRdbmsColumn"
jboss-fk-konstraint="true"

I.e. any non standard attributes are still on the same tag, but with a
prefix indicating that it's not standard. (By the way this is the same
approach we're probably going to use for proprietary EJB-QL extensions on
the @ejb.finder tag. There will be weblogic-ql and jboss-ql attributes.)

I also suggest you read my "Synergy" post on my (old) blog (in case you
aren't confused enough by now ;-)
http://www.freeroller.net/page/rinkrank
"""

Then I asked....
> Is anyone working on this? I think this should be added to this release in
> beta.
>

and he replied:
"""
Nobody is working on this, and it would be great if you wanted to look at
it. It shouldn't be any more comlicated than what you already did for
@ejb.relation in Resin. -The hard part is coming up with the "right" tags,
and I have a good tummy-feeling that my proposal a few lines up is the way
to go.

"""


BTW I just got permission to include the XDoclet stuff I wrote
for Mastering

Tomcat for the Xdoclet documentation. This is a tutorial on XDoclet mainly
geared toward Servlets, Custom Tags and Struts. Ara A. said he was
interested in including this as part of the docs. or at least link to it
from the docs. I need to change the examples to use dots instead of colons
and test it with the version of Xdoclet in beta, other than that....

I've been digging into IBM WSDK. It is fun stuff. I am wondering what the default user name and password is for the version of WebSphere that ships with the WSDK is.... I just bought the IBM WebSphere Bible. I'll let you know what I think of it.

I recently updated the Resin templates for XDoclet to work with the new @ejb.persistence tag for EJB CMP mappings to RDBMS. I submitted the change to the XDoclet list. Erik Hatcher walked me through how to make the changes. It was quite simple. I made the template backwards compatible to the older style of Resin CMP mapping to ease the migration. I have not had time to update the XDoclet EJB tutorial that I wrote to reflect the new sytle. Too little time in the day....

I am reading three new Struts books. Struts has been evolving quite a bit. I am really interested in learning about the Struts Validator. (Send me a good link if you have one...)