Really Rude People

October 24th, 2009 3 Comments

We had an “interesting” experience at dinner tonight. We (myself, my wife, and 2 kids) went out to dinner at John Harvard’s in Framingham. We’ve been there as a family many times before and always enjoy it. While it is a Brew House which you wouldn’t think is the most “family friendly” environment, we almost always are seated near other families with small kids and plenty of kids are always there. Today wasn’t an exception as we were seated next to a couple with a 17 month old girl with them (just a month older than our youngest).

Within few minutes of sitting down, the couple on the other side of us asked to get their food “To Go” because they had to “get away from all the kids” (last part said pretty loudly). That in itself was pretty rude. I can understand asking to be reseated or quietly asking to change to “To Go”, but to emphasize the why was a bit uncomfortable.

The worse part about it was our kids were REALLY on their best behavior tonight. Nathan was busy rolling a crayon back and forth with me and Ryan was coloring the ship on the kids menu and chatting with mommy. Neither was causing and scene. They were both quiet. Both sitting nicely. Etc…

Anyway, we just kind of let that slide, but when their food came and they paid their bill, things got even worse. On the way out, the man flipped us the bird. We were really shocked by that. Neither of us could believe he did that. Believe it or not, it gets even worse. The woman, who had already made it all the way to the door must have looked back and saw the look of shock in our face. She then walks all the way back to the table. I was expecting her to apologize for her husband, but instead, she said “Next time, you should take your kids to Friendy’s”. I wish I would have had a snappy comeback, but I was in complete shock. Couldn’t believe anyone was that rude. The couple next to us (with the child) couldn’t believe it either.

To their credit, the staff at John Harvard’s was excellent. Apparently, the manager was on the way in right as this all happened and saw it all. He came straight over to our table to apologize (not his fault) and the other wait staff also came by specifically to say our kids were behaving quite well and to not take it personally.

Anyway, just had to vent. What a bizarre experience. I still like John Harvard’s a lot and highly recommend it as a place to eat (and drink very good beer :-) . I just hope those people stay away.

Today marks exactly 3 years since my first commit at Apache toward Apache CXF:

commit email

A lot has definitely happened in 3 years. We’ve gone from two very separate codebases (Celtix and XFire) and have produced one of the leading Web Services frameworks. We were the first Apache Licensed JAX-WS compliant implementation. We were the first Apache Licensed JAX-RS compliant implementation. CXF is embedded in MANY applications including JBoss, Geronimo, Jonas, Camel, ServiceMix, and more…

Anyway, it’s been an exciting 3 years. Looking for many more. :-)

Managers vs Leaders

August 11th, 2009 5 Comments

On a recent thread on the general@incubator list at Apache, Niclas Hedhman pointed out a very interesting list of differences between Managers and Leaders from Wikipedia. I really like this list:

  • Management involves power by position.
  • Leadership involves power by influence.

and specifically these distinctions:

  • Managers administer; leaders innovate.
  • Managers ask how and when; leaders ask what and why.
  • Managers focus on systems; leaders focus on people.
  • Managers do things right; leaders do the right things.
  • Managers maintain; leaders develop.
  • Managers rely on control; leaders inspire trust.
  • Managers have short-term perspective; leaders have long-term perspective.
  • Managers accept the status-quo; leaders challenge the status-quo.
  • Managers have an eye on the bottom line; leaders have an eye on the horizon.
  • Managers imitate; leaders originate.
  • Managers emulate the classic good soldier; leaders are their own person.
  • Managers copy; leaders show originality.

I REALLY like that list. It definitely sums up the causes of many of my “problems” when dealing with “managers” in the past (and present). I definitely tend to fall into the “leader” roll and generally have trouble trying to see the other side of the situations. I readily admit that. But I think it’s also very important to have both types of people represented. One or the other and things don’t happen, or at least not well. It takes a good balance.

So, which do YOU strive to be? A “Leader” or a “Manager”?

A month or so ago, I decided I really should spend some time learning Git to see what all the fuss was about. Unfortunately, nearly everything I work on is in Subversion repositories. Thus, I really don’t have an opportunity to really see everything that Git has to offer.

However, I did decide to give the git-svn integration a whirl to start getting a feel for git. Basically, learn some of the basic commands, experiment with the tools, etc…. I must admit, I’ve been pleasantly surprised and I now feel that git-svn is nearly the perfect svn client. I don’t think I’ll be going back to normal svn clients for day-to-day work anytime soon. Why do I like it?

  • It’s fast – a “git pull” is much faster than a “svn update”. What’s more, “git pull” updates all branches, not just the one I’m working on. Other options like “git blame” and “git log” and such are nearly immediate where with svn, they take forever.
  • Disk space – yes, disk space is cheap these days, but it does matter. A fresh “svn checkout” of CXF trunk takes about 225MB of space. A fresh “git clone” of CXF takes about 154Mb of space. The git version also has the advantage of having all the branches and tags in that 154MB of space. With svn, I need an additional 225MB for each tag/branch.
  • Works better with tools – thing like “grep -r” and “find . -name” and such work much better with git as there is only the top level “.git” dir, not a “.svn” all over the place. I had to create a bunch of silly wrappers to various things to make using those tools in svn easier.
  • All tags/branches are available – if someone posts a stack trace to a JIRA, it’s trivial to flip over to whatever tag they are reporting it against to see what lines the line numbers line up with. Takes just a couple seconds. No “svn checkout” of various tags (or keeping 225MB of space per tag around) or digging through fisheye or similar.
  • Saves me a TON of time by allowing me to test multiple “commits” together.

That last entry is really key. If you read my last blog post, you know I’m a firm believer in “DON’T BREAK THE BUILD”. The best way to achieve that is to run the full set of tests before committing any changes. However, the full CXF test suite takes a little over 1/2 hour to run on my machine. Thus, it’s not something you WANT to run on all the little changes. It kind of becomes a limiting factor with how many commits/changes you can do in a day if you always run it.

That’s where git-svn comes in. It’s brilliant. With svn, if you make a small change and then “svn commit”, it’s immediately sent to the central repository for all (and the CI builds) to grab. Thus, you BETTER have run all the tests. With “git commit -a”, you just commit the changes locally on your branch. Thus, I can make some changes, run just the unit tests and maybe a couple of related sys tests, commit the changes, then move to the next JIRA/bud, make some changes, run a few tests, commit, etc… Basically, collect the changes as individual commits in my local git branch. At the end of the day, run a full “mvn install” to make sure ALL the tests pass. If so, run “git svn dcommit” to push the changes back into SVN. The way “git svn dcommit” works is that each commit to the branch goes to SVN as an individual commit. Thus, each JIRA or other change that was worked on and committed locally appears in SVN as an individual commit. This is good as you may need to merge (or backout) just those individual changes. With SVN, I always ended up committing several things together as a single commit which made things harder to track/merge to the fixes branches and such. Separate commits also help boost your commit count. :-)

There are some downsides to using git-svn:

  • The egit eclipse plugin sucks, even compared to the subversion eclipse plugins. Call it a “work in progress”.
  • Merge tracking – for CXF, we’ve decided to use the svnmerge.py script to track merges between the fixes branches. This doesn’t work with git so I still need the fixes branches checked out to do the merging. Ideally, everything would be “pure git” and we could all use the git merging, but that day isn’t going to come any time soon. :-(
  • No integration with maven release plugin – I have no idea how the release plugin would deal with git-svn. Releases still need a “pure” svn checkout.

Anyway, I’ve started pretty much using git-svn for most of my work. I’m definitely happy with it. I’d be happier if Apache would allow us to go 100% git and not have the svn repo, but for now, this is certainly better than svn.

Throughout my career as a developer, one “mantra” that has been deeply ingrained into my brain is “commit away, but DON’T BREAK THE BUILD!”. Breaking the build can include things like breaking checkstyle/pmd checks, committing code that doesn’t even compile, having unit/system test failures, sticking dependencies in the poms that don’t exist in declared repos (example: depending on a SNAPSHOT you built locally) , etc… Bunches of things.

Breaking a build on something you’re the only one working on is usually not a huge issue. Just commit a fix at some point and no-one will ever know. However, when working with a large team or working on OpenSource where people all over the world could be building it, break a build can be a serious issue. If the build is broken, you can easily have MANY engineers wasting a lot of time trying to debug something they shouldn’t be. That can be quite “expensive”.

For example, if I run the tests and see a test failure, I assume one of my changes is the cause of that. Thus, I start debugging and try and figure out what I did. I shouldn’t be trying to debug into tests that aren’t caused by my changes. The code base should be stable and just work.

Unfortunately and apparently, there are a lot of people that don’t believe the same as I do. The Hudson Continuous Integration Game plugin provides an interesting way to see who believes what. Basically, for each build done in Hudson, the plugin assigns a score. If the build succeeds cleanly, all developers that contributed changes get a point. If the build fails spectacularly (fails to even compile), it’s -10 points. A failing unit test is a minus point. Fixing a failing test is a plus point. etc… Thus, over time, people that tend to break things end up with less points (even negative) and those that tend to fix things and/or commit clean code end up positive. Obviously, it’s not perfect. People that commit a LOT can earn higher scores as they can get one point per commit. I commit a couple times a day. Thus, I have potential to get more points than someone who only commits a couple times a week.

Looking at the Apache Hudson Instance Leader Board, you can see quite a range of scores. IMO, there are entirely too many people with negative scores. Something for those people to start working on. Get to work! :-)

This past week, the Apache CXF team released the latest patch for the 2.2.x series: 2.2.2. Normally, patch releases aren’t very exciting. Usually just a bunch of bug fixes. However, this release provides two extremely noteworthy bullets:

  • JAX-RS 1.0 – 2.2.2 is the first release of Apache CXF to pass the JAX-RS 1.0 TCK. The 2.1.x versions of Apache CXF introduced some preliminary versions of JAX-RS based around the 0.6 and 0.8 versions of JAX-RS. 2.2.0 updated the basica API’s to 1.0 level, but was not fully JAX-RS 1.0 compliant. We finally got access to the TCK a short while ago and 2.2.2 includes all the patches and fixes necessary to get CXF to pass the 1.0 TCK. We still have a bunch of ideas and plans to make the REST/JAX-RS support in CXF even better, but passing the TCK is an exciting milestone.
  • JBoss-WS – the JBoss WebServices team released JBossWS-CXF 3.1.2 based on Apache CXF 2.2.2. This release of JBossWS-CXF is the first to completely pass the various JAX-WS/JWS/SAAJ/JAXR parts of the J2EE CTS/TCK. This is just the first results of the JBoss/CXF collaboration. To achieve this, JBoss did identify and submit patches for several issues in CXF. They also done extensive testing with their own stack, .NET, and others to make sure CXF will completely meet their needs. JBossWS-CXF 3.1.2 is a result of all of that, but it’s also just a beginning. Now that the TCK is passing, we hope to expand the collaboration into more than just “tck bug fixes” with new features, new ideas, etc…

Anyway, definitely another exciting week for Apache CXF. Many thanks go out to the entire Apache CXF team, the JBoss folks that identified and fixed issues, and the Progress FUSE team for helping with the testing and development.

Last week, we went on a vacation to Aruba. In general, the vacation was definitely a nice getaway from all the work and stuff that’s been keeping me busy for the last several months. Generally pleasant and relaxing.

However, there was one little “issue” that was kind of a negative on the vacation: a trip the Aruba Emergency Room. ER trips are definitely not something you like to deal with on vacations. In this case, my youngest son Nathan (10 months old) did not drink a bottle or really eat anything for over a day and a half. That’s very unusual for him and with the heat in Aruba, we were very concerned and decided an ER trip was warranted. Turns out that was a good call as he had “Acute Tonsillitis” (basically, a throat infection) and required some antibiotics and pain meds. Within a couple days, he was somewhat back to normal so the meds were definitely the right solution.

This was the second vacation in a row that ended up with an ER visit for Nathan. Our Christmas trip to Florida to visit my parents ended up with an ER visit (on Christmas day even) due to an ear infection. Generally, Nathan is very healthy (much healthier than Ryan was at that age). He just times his sickness to coincide with trips. Gotta love him.

This was my first experience with a Non-US emergency room. Actually, first Non-US medical care experience. Definitely different than what I’m used to. The first difference was very immediate: to even drive onto the hospital campus, you had to pass through a security checkpoint that took your name and “reason” for being there. From there, the security guard directed you to a secondary gate depending on your destination. (ER parking has a gate, outpatient has a gate, etc….) I’ve never seen that at a hospital. I’ve always just drove in, parked, walked in.

The next set of “strange happenings” was the check in procedure. There was an “outside” window for “registration” (kind of like a ticket booth) where you had to go to register. Again, this is outside in the Aruba heat. We’re not into the waiting room yet. After that, we had to go to a cashier window (again, like another outside ticket booth) to pay a $90US “down payment”. Once that was done, we could then sit in the air conditioned waiting room. I’m just so used to having all of that being IN the waiting room area. Kind of strange. A little while later, the triage nurse called our name to then take temperature and get additional history information and all that. Then back to the waiting room.

The actual ER rooms and the ER experience with the doctor was pretty much the same as in the states. No major issues there at all. Relatively pleasant.

However, the NEXT interesting thing happened when the doctor wrote the prescription for the meds and was preparing to discharge us. She didn’t hand them to me. Instead, they went into the file. To get them, I had to go back to the cashier and pay the remaining balance (another $19US). When the account was settled, they gave us the prescriptions. Definitely didn’t expect that.

In general, it wasn’t bad, just different. On a positive note, the whole ER visit just cost $109US. I don’t think an ER visit anywhere in the states would be that low. I need to figure out how to submit that to my insurance and stuff, but in general, pretty cheap.

I bought my wife a Kindle 2 as an early birthday/mothers day present. I gave it to her a bit early so that she could use it for our vacation to Aruba. It’s definitely a nice little gadget. I’m quite impressed. Excellent battery life. Very easy to read, even one handed. That’s perfect when trying to snuggle an sick infant to sleep.

Julie generally reads about 2 or 3 books a week. More on vacation. Thus, the Kindle helped save a bit of space/weight in the luggage. (important now that they charge $50/bag if you go over their weight limit) Most of what she reads she checks out of the library. However, she does purchase quite a bit as well, especially for just released additions to the series she reads. Those tend to be the expensive hard back versions. Thus, long term, it may save some money, though I doubt it.

I guess the real loser in this will be the Framingham Public Library. They always ended up with the books she purchased when she was done with them. Sorry!

For the last couple of days, Ryan, my oldest son, hasn’t been calling me Daddy. He’s just referring to me as “Dad”. I’m not exactly sure where he picked that up. Probably day care. (always blame everything on day care. Somehow, it’s always their fault) I knew this day would come, I just didn’t expect it so soon. He’s not even 3 yet!

I must admit, it’s quite “strange” to hear him say it. Caught me COMPLETELY off guard the first time he did it. Almost laughed.

Sigh….. they grow up SOOO quick.

:-(

….but sometimes I have to wonder.

I really do live in a pretty tightly packed residential area. Lot sizes around a 1/4 acre or so. But once in a while, I really do have to wonder. We’ve lived in the house for close to 9 years now. In that time, we’ve encountered:

1) 3 separate instances where my dogs (2 cocker spaniels) have cornered skunks in the back yard. Yea, not fun. You think the dogs would learn, but NOOOOoo….. “Black and white cats in my yard. Must Attack!!!!”

2) A pack of wolves (yes a pack of wolves) killed a dog up the street. An emergency alert went out so we had to keep the dogs inside for while.

3) One night, one of my dogs brought a possum into the house. (they have a dog door so they can come and go. Brought him right in through the door) Luckily it was just a possum that just played dead on the living room floor until I got a shovel to move it outside.

4) Yesterday, when we left to head out to see “grandma” in the morning, a racoon apparently snuck into the garage and got trapped there when we closed the door to leave. Got into the dog food, trash, and probably the supply of ant/mouse traps. When we came home and opened the door, trash was all over the floor and the coon was dead in the middle of a pile of dog food. Not sure if he ate himself to death or did get into the mouse/ant traps or what.

Kind of scary actually. We opened the garage door when Julie took Ryan out to the car to get him buckled in and get his dvd playing. She left the car door open and stepped back into the house to get Nathan. The coon could have jumped right in.