Friday, August 03, 2007

This is my first post since starting my new job.  I've been a smidge busy, as they threw me in immediately on a high-profile project utilizing Microsoft Office SharePoint Services, and, well, my working knowledge of MOSS was somewhere between zip and zilch.  That's changed significantly over the past few weeks, and while I've been hesitant to call myself a MOSS developer, I'm certainly getting my bearings and starting to kick much ass.

One problem our team has run into several times is source code control.  Pretty much everybody on the team was a SourceSafe user and didn't have any experience with SVN.  I initially balked at this, because, well, SourceSafe sucks.  I advocated SVN every chance I got, particularly when SourceSafe would eat somebody's changes or we fought over file contention. 

As luck would have it, the company is in the process of standardizing on SVN, and, when our VSS repository became obviously too corrupt to be much use, the technical architect on this project caved to my requests and we switched to SVN.

The problem with this is, SVN's Copy-Modify-Merge paradigm can be confusing for developers who are used to Lock-Modify-Unlock.  We've had several occurrences of changes mysteriously disappearing, and, since I'm the de facto SVN expert on the team, it was left to me to reconstruct exactly what happened.  To avoid naming names and pointing fingers, I’ll illustrate with Alice and Bob…

Let’s start with a file.  We’ll call it Text.txt.  Text.txt looks like this:

Revision 1

Foo
Bar
Baz

Alice and Bob both did an update and now have Revision 1 as their working copy.

Alice makes some changes and commits them.  She removes the line “Baz” and adds “42” and “Don’t Panic”.  She commits her changes as Revision 2.

Revision 2

Foo
Bar
42
Don't Panic

Bob, meanwhile, makes some changes of his own.  Working with Revision 1 as his base, he adds “Quux”

Bob’s Working Copy

Foo
Bar
Baz
Quux

Before committing, Bob does an update and realizes he has conflicts.

Revision 2

Foo
Bar
42
Don't Panic

Bob’s Working Copy

Foo
Bar
Baz
Quux

Merged Output

Foo
Bar
Conflict
Conflict

Now, what I think happened, is Bob made a mistake while merging, and chose to accept his entire conflict block as the merge output…

Merged Output

Foo
Bar
Baz
Quux

Bob then marked his conflicts as resolved and committed this as Revision 3.

The problem with this is that it negates Alice’s changes – She removed “Baz”, and she added “42” and “Don’t Panic”.  The next time Alice did an update, she updated to Revision 3 and the changes she previously made in Revision 2 were missing.  SVN gets blamed, making Cam look bad for being such a vocal SVN supporter, when it was really Bob’s fault.  (The “making Cam look bad” part was a joke.  Smile.)

What Bob should have done was take a good look at the differences between Revision 2 and his working copy…

Revision 2

Foo
Bar
42
Don't Panic

Bob’s Working Copy

Foo
Bar
Baz
Quux

…and asked himself, “what exactly did I change in my working copy?”  In this case, Bob did one thing and one thing only: He added “Quux”.  So Bob has to assume that any other changes to the file were done for a reason.  Somebody wanted “Baz” removed, and “42” and “Don’t Panic” added.  It’s then incumbent upon Bob to ensure that only his valid changes are included in the merge.  The resulting file could have looked like this:

Merged Output

Foo
Bar
42
Don't Panic
Quux

The moral of the story:

Copy-Modify-Merge (like SVN) is more powerful than Lock-Modify-Unlock (like SourceSafe), but, as Uncle Ben Parker told Peter Parker, “With great power comes great responsibility.”  When you merge and commit, you have some responsibilities to live up to:

Update frequently.

When you merge, be sure you are not removing someone else’s important changes, and that you are only merging in the changes that you made that are relevant

When you commit, always read the file list to ensure you are not inadvertently committing changes to a file you did not mean to modify.  Also, it helps to do a diff of each file in the file list to be sure you are only committing code changes you mean to commit.

Good luck!

posted on Friday, August 03, 2007 9:01:47 PM (Central Daylight Time, UTC-05:00)  #    Comments [3]
 Wednesday, July 11, 2007

Well, not really.  Not in the flesh, anyway.

A few months ago he and I exchanged Wii Friend codes.  Nothing happened.  Months went by, and I spent less time with my Wii and more time with my Xbox 360.  Then my wife turned on the Wii to play Twilight Princess, and, lo and behold, we have a visitor.  Here's a shot of my Mii hanging out on Mii Plaza with Scott Hanselman's Mii.

Scott in Mii Form 

Not a bad Mii, Scott.  But which is the better likeness;  Your Mii, or your avatar from A Conversation with Scott Hanselman?

posted on Thursday, July 12, 2007 3:31:07 AM (Central Daylight Time, UTC-05:00)  #    Comments [3]

I just got my first greenlit article on the social news site, Fark.com.  For those of you unfamiliar with Fark, what this means is I submitted a link to a news article, including a self-written funny headline, and the users of the pay version of the site (TotalFark) gave it sufficient votes to have it show on the front page of Fark.

I guess you'd have to be there to appreciate it.

Yay, me.

posted on Wednesday, July 11, 2007 9:17:42 PM (Central Daylight Time, UTC-05:00)  #    Comments [0]
 Thursday, June 28, 2007

For almost seven years, I have been very proud to count myself as an employee of Commerce Bank.  Circa 2003 or so, I started to establish myself as the go-to guy for all things web technology-related in the bank as I took over primary responsibility as the lone developer on many of Commerce's retail Internet and intranet applications.  I was very successful in that role, and over the past few years, Commerce gave me the opportunity to lead the effort to move Commerce Bank's online banking development away from Corillian's professional services division and into our own development house.  With a great team of developers, QA testers, and project leaders, we succeeded with flying colors.  I put in many long days and had a great deal of fun, both in terms of technical problems and interpersonal interactions.

Then, one day a few weeks ago, I realized that I wasn't finding any joy in it anymore.  I was burnt out.  I haven't entirely pinpointed why.  There is a feeling of needing a new challenge, like I've done all there is for me to do at Commerce.  There's some minor dissatisfaction with finding clear direction for me to grow my career.  And, to be truthful, there's probably a little wanderlust, a need for a change in scenery.

Whatever it was causing my funk, it wasn't getting any better, so I acted on it.  And so it is with a mixture of regret, trepidation, and excitement that I announce that I have resigned my position at Commerce Bank as of July 11.

I have accepted a position as an Associate with the RiverPoint Group, taking a contract engagement with a local interactive media company.  This company has a reputation as one of the best environments for developers in the KC area, and has been named one of the best places to work in the country.  I'm thrilled that I get to experience that environment, and I'm looking forward to meeting the new challenges that are sure to come.

At the same time, I'm very, very nervous about my decision.  Commerce is all I've known for seven years.  I'm very comfortable there.  Everyone knows me.  I have a reputation as a guru on a range of topics.  I've put much of myself into our online banking system and our development process.  I consider my coworkers at Commerce to be my closest friends and family.  As excited as I am, all of this makes it very hard to let go.

However, I'm (mostly) confident I've made the right choice, and I know that, win, lose, or draw, this whole experience is something I have to do to understand what I'm really capable of and where I really fit in the developer community.  As my mom says, for every door that closes, another opens.

So, grieving over the end of this era be damned, I have to boldly stride forward and meet this challenge head-on.

Wish me luck.

posted on Friday, June 29, 2007 4:05:40 AM (Central Daylight Time, UTC-05:00)  #    Comments [2]
 Thursday, June 21, 2007

I'm very hopeful that Silverlight will achieve the market penetration of Flash.  Silverlight has so much going for it, like the DLR, the mini-CLR, XAML-based development, and so much more.  And like I said in an earlier post, it's a great example of people in Microsoft getting it, what with the multi-platform support.

The only thing that worried me about Silverlight was the lack of Linux support.  Like it or not, Linux is becoming a viable desktop platform, so it's important that Silverlight have some kind of Linux implementation.  I had heard somewhere that Miguel de Icaza had stated that he was going to have a Mono-based implementation of Silverlight ready by the end of 2007, but I didn't know if that was a reasonable estimate.

Somehow, I think I underestimated the Mono team.  Miguel and his band of crazy coders hammered out a more-or-less functional implementation of Silverlight, called Moonlight, in 21 days.  Holy freakin' cow, that's cool.

I'd also like to point out that Miguel mentions receiving guidance from Scott Guthrie and others in Microsoft.  I'm floored by this.  They're apparently that interested in making it succeed.

posted on Friday, June 22, 2007 2:28:50 AM (Central Daylight Time, UTC-05:00)  #    Comments [1]
 Sunday, June 17, 2007

There's been a lot of chatter lately about the so-called Alpha Geek, and his perceived exodus away from .NET.  This strikes home for me, because I'm an Alpha Geek who is madly in love with .NET as a platform.  I see and understand some of the new "in" languages and platforms for Alpha Geeks (particularly Ruby and Ruby on Rails), but really, I'm just not all that interested right at the moment.  Scott Hanselman talks about the beauty of Ruby, but I see just as much poetic beauty in well-written C#.  And when you consider the great things coming out of Microsoft lately, like WPF, WF, WCF, etc., and the great things coming soon (Orcas, Silverlight, Acropolis, LINQ), .NET is such a compelling platform.

But this whole TestDriven.NET thing has got me concerned.  For the unfamiliar, a major contributor in the open source community is getting leaned on hard by Microsoft for a perceived violation of the Visual C# Express EULA.  Basically, he made an add-in that supports all versions of Visual Studio, including the Express SKUs.  And Microsoft's lawyers claim that distributing add-ins for the Express SKUs is a no-no. 

This is already creating a significant chilling effect throughout the community, and is undoubtedly going to push a lot of people away from .NET too.  It's a shame, too, because the development tools teams in Microsoft clearly get who their strongest supporters are.  Look at all the great ways Microsoft has engaged the developer community:  Codeplex, Channel 9, shared source projects like the ASP.NET Ajax Control Toolkit, supporting Silverlight on multiple platforms, and more to come.  They know that when the Alpha Geek feels engaged and empowered, he will evangelize the platform for them.  But the lawyers don't get that;  And to be completely fair, Microsoft's legal department can't be selective about EULA enforcement, or they lose much of their power in cases of genuine EULA violations

It sucks for everyone.  It sucks for the people in Microsoft who are watching their good will in the developer community get pissed away by the soulless lawyers, it sucks for open source developers like Rob Conery and Jamie Cansdale, but most of all, it sucks for the Alpha Geek who can do nothing but stand by and watch the train wreck unfold. 

posted on Sunday, June 17, 2007 8:33:49 AM (Central Daylight Time, UTC-05:00)  #    Comments [0]
 Wednesday, June 13, 2007

I stole this from Alan Stevens, but it's fun and surprisingly true.  Here are the results of my Programmer Personality Test...

DHSB

You're a Doer.
You are very quick at getting tasks done. You believe the outcome is the most important part of a task and the faster you can reach that outcome the better. After all, time is money.

You like coding at a High level.
The world is made up of objects and components, you should create your programs in the same way.

You work best in a Solo situation.
The best way to program is by yourself. There's no communication problems, you know every part of the code allowing you to write the best programs possible.

You are a liBeral programmer.
Programming is a complex task and you should use white space and comments as freely as possible to help simplify the task. We're not writing on paper anymore so we can take up as much room as we need.

posted on Wednesday, June 13, 2007 8:32:04 PM (Central Daylight Time, UTC-05:00)  #    Comments [0]
 Saturday, June 09, 2007

As much fun as it was, it's very good to be home.  My kids were both happy to see me, and the wife didn't complain too much.  Now that I've had some time to reflect on what I learned at Tech·Ed, I need to get my conclusions down before I lose track of them all.

Certification:  A lot of people don't put a lot of weight in certifications, citing examples of "paper" MCSD's (I've known a few myself).  That said, I'm really proud I got my MCSD at Tech·Ed this year.  I've wanted my MCSD since I was 13 years old, but I never made it a priority.  I had time and opportunity at Tech·Ed this year, so I took advantage of it.   My goal for next year is to complete the two upgrade exams to get my MCPD in Enterprise Applications.

Technology:  Admittedly, I saw fewer sessions than I wanted to.  I had a hard time adjusting to east coast time (being a late riser on central time to begin with), and I ended up oversleeping every morning.  That said, I saw a few technologies that got me really excited.  Among these are Acropolis, WCF, WF, LINQ, and a few others that don't immediately spring to mind.  Due to a relatively busy workload at Commerce, I'm a little behind the times on getting to play with these things (particularly WCF, WF, and LINQ, which I already knew about, but hadn't actually seen in practice), but that also highlights some need for me to do some deep thought on my career direction.  More on that later.

Community Involvement:  On an earlier post, I mentioned that I got to meet a bunch of my personal heroes.  I have a very deep desire to emulate these people and make the level of community contribution that they have.  I want to have something valuable to say, and I want to be able to present it so that people to want to hear it.  It occurs to me, looking at other people who have done it, I need to be more active in the community.  I have a blog with maybe 10 regular readers, which is all well and good, but I'm not providing anything valuable enough to merit any serious attention.  I need to start spending some time in newsgroups, forums, and the local .NET users group, getting down in the thick of the community and participating like I know I'm capable of.

Career Direction:  The more I think about it, the more I think I've been standing still for too long.  I'm very proud of what we've done at Commerce, and it's a good company I'm happy to be a part of, but the reality is that it's primarily a J2EE shop, and I'm living (happily) in a .NET world.  When you consider that online banking is a rather narrow customer-facing interface to our broader J2EE enterprise, I really begin to wonder if I shouldn't be thinking in larger terms.  Whether those larger opportunities are within or outside of Commerce is a question that I'll have to put some thought into.  I know there are shops out there who are into the bleeding edge .NET stuff that would be awesome, but I'd be remiss if I didn't mention I went to two Birds of a Feather sessions at Tech·Ed that really got me thinking;  One was "Thriving and Surviving as an Independent Consultant," and the other was "Starting and Running your own Software Business."  The thought I keep coming back to:  If all these people could do it, why couldn't I?  Wow, I've got a lot to sort out in this category.

Friends:  I made a lot of new contacts I'm looking forward to keeping in touch with.  I certainly hope a few of them are reading this and will also keep the lines of communication open.

Fun:  I went to a session on programming games in XNA.  I totally need to do that.  And hopefully sell the games I write.  :)

posted on Sunday, June 10, 2007 3:35:11 AM (Central Daylight Time, UTC-05:00)  #    Comments [0]