Houston TechFest 2007 — Is this thing on?

The Houston TechFest has come and gone in a flurry of activity that I would say was widely regarded as a success. There were, of course, a few v1.0 type glitches as to be expected from an inaugural event as large as this one. Nonetheless, for an event of this size to be coordinated so well the first time is a big accomplishment, so kudos to Michael Steinberg and the others from the Houston .NET User Group (HDNUG) for putting this show together.

Lobby AreaThe 7 track extravaganza had about 500 participants and covered some of the most talked about topics in technology today including DotNetNuke, LINQ, WF, TFS, Silverlight, WCF and Acropolis. The gathering was also opened up to a more diverse audience with an entire track dedicated to Java based content. I can’t speak for any of the sessions that I missed, but here are my thoughts on the sessions I did attend:

Keynote on Silverlight

Brad Abrams is a terrific speaker, and the upbeat Microsoft promotional video had the crowd going from the very beginning. Silverlight shows well, and a charismatic delivery like the one provided by Brad make this new presentation technology very intriguing. The 10 year blue badge alternated demos between his Mac book and PC to lay to rest OS compatibility issues. He even used FireFox on the PC 🙂 Big RoomBrad posted a great summary that has interactive demos of the content on his blog. Be sure to check out the Silverlight airlines demo — how friggin’ cool would it be to book flights this way!

SQL Server 2005 Performance Dashboard

Jeremy Gaige from Idera walked us through the SQL Server 2005 Performance Dashboard that comes free in the current version of Microsoft’s RDMBS. This tool is pretty sweet, and I had cursory exposure to it going into the session. Unfortunately, Jeremy didn’t have his machine configured correctly to do the demo. I found this odd as he knew that he was doing a demo on this technology and it didn’t sound like a last minute problem. Idera had enough time to set up a booth and point out why their database tools were better than the free options that came with SQL Server, but they didn’t have time to help people understand what they had signed up for. Despite the delivery issues, Jeremy knew his stuff and had some great slides that helped me to see more about what is offered out of the box.

Exploring .NET 3.0 Workflow Foundation (WF)

At the speakers’ meet and greet dinner Friday night, I got to spend some time with HDNUG webmaster and experienced technologist John Ebeling. Although the live band at the Armadillo Palace was blasting Texas country music in our ears, I was able to learn that John has a wide range of experience in delivering software. This was helpful in the second session as I had to imagine what the presentation would have been like without technical difficulties. John ended up having had slides, but no demo. This was 2 in a row! Did I just pick the wrong sessions or were there similar issues across the board? John did an excellent job of covering for the glitch, and his ability to deliver the presentation without having a display on his machine showed his level of comfort with the subject matter. Afterward, there was a lengthy, but cozy Q&A session on the technology. Past project compadres Meng Lan and Phani Potturu joined me in picking John’s brain during the lunch break.

ORM and NHibernate

I was expecting good things from Ben Scheirman’s Object Relational Mapping (ORM) session as I had seen a terrific overview of advanced CSS and Javascript that he delivered at the HDNUG meeting on 6/14. Not only that, but Ben explained that in the morning session he had gracefully recovered from yet another technical glitch in the form of a projector failure. Of course, this was human induced as he was delivering to a packed room of about 100 and somebody pulled the power cord out of the socket. Prior to this NHibernate talk, I had heard of the tool on various podcasts such as Hanselminutes and .NET Rocks, but it took Ben’s expertise to understand the strength of this object relational mapper. A consistent example of a blogging application was carried through the demo to describe the various types of relationships between entities, how they are mapped, special considerations due to impedance mismatch, etc. Ben did a bang-up job of delivering the content, and to my relief there was much more demo than powerpoint. Ben showed a number of different ways to interact with the DB without writing SQL, and had a number of NUnit tests that were run to show how the coding approach supports a TDD methodology (Ben is a huge TDD proponent). Some common gotchas such as proper handling of the Equals override were stressed so that experimenters like myself didn’t end up struggling with some of the problem areas of NHibernate. I plan to try it out in rebuilding OurNextGame.com as it is still using classic ASP and the site seems like a perfect candidate for this technology. Be sure to check out Ben’s account of the TechFest.

Microsoft Windows Communication Foundation (WCF)

Just after lunch, I got to meet David Walker whom I was planning on listening to during the 2:45pm session on WCF. I am currently stepping through Michele Leroux Bustamante’s book on the topic, and there are many opportunities for me to use WCF in my day job. David was very modest in noting that he is the organizer of the Tulsa TechFest, which was spoken highly of throughout the geek community. David’s presentation was very professional, and had the right mix of .ppt and demo content. He showed the simplicity in creating WCF services, and pointed out that upgrading your existing .asmx services would be trivial in most cases. I am sure we will see more great stuff from David as he is now a Microsoft MVP.

All Builds Are Good with Continuous Integration

And finally we have my 75 minute primer on how to automate your build, test, and deployment processes with continuous integration. It was more work than I thought to put together the presentation content since everything needed to be installed locally. Small RoomThe discussion of CruiseControl.NET, NAnt, and NUnit walked the group through the tools describing how each can be gradually added to a technical environment to increase stability, decrease risk, and eventually provide software that has fewer bugs in it. The audience participation was great, and I appreciated the thoughts and questions people offered. Most of the group had not implemented any type of CI on their project, and we even had one guy who was still trying to convince his boss that source control is a good thing! Wrap-up comments included a good one that Microsoft’s Team Foundation Server provides a nice alternative to the open-source CI stack (Insert clever acronym like LAMP, WIMP, REST, etc here). Not having any experience with TFS, I can not say whether it is better or worse, but I do know that you can’t beat the price for the solutions I presented 🙂

See the Continuous Integration dedicated page of this blog for links to resources and the slides.

It was great to meet so many smart people who have such a passion for software development. If you attended the Houston TechFest, please leave a comment or link to another post to let me know what you thought.


Dinner with Brad Abrams

Last night I attended an event that Chris Koenig organized for all of the speakers at the 1st annual Houston TechFest.  We met up at the Armadillo Palace (Goode Company’s bar) to meet and exchange thoughts and ideas about the conference.  It was great to meet Brad, who was been a key contibuter to the success of the .NET framework in his 10+ years with Microsoft.

It was great to be able to meet the other speakers, as the event itself doesn’t really facilitate this kind of interaction since everyone is speaking and/or preparing.  Kudos to Chris and those who helped him in organizing this event.  I hope this tradition continues in future years of the TechFest.

Updating WCF Service Descriptions

I have been reading Michele Leroux Bustamante’s book on WCF as this is a topic that has been very interesting to me lately.  She has been a guest on .NET rocks and other interesting podcasts several times, and her jovial personality on air intrigued me as to what her books would be like. 

Her book (so far) is great, and I feel that I have learned a lot from the lab examples that walk you though creating host and client solutions that gradually move from the simple to the real world.  I would highly recommend this book, especially if you want to understand all aspects of WCF including security.

Call to SSPI Failed

While going through the labs in chapter 2, I received the following unhandled SecurityNegotiationException:

A call to SSPI failed, see inner exception. 

 InnerException text read:

The Local Security Authority cannot be contacted

The bummer part was that I was on a plane and couldn’t search for what the heck this error meant.  Additionally, I do not have MSDN installed locally, so I was dead in the water.

After arriving at my destination, I posted a question on the MSDN forms (which it turns out Bustamante is the moderator for!) to see if that would provide an answer.  Unfortunately I didn’t give anyone enough time to respond as the answer came in analyzing what is happening when you add a service to your project.

Update Service ReferenceMy first thought was to update the service definition once I got connected to the Internet again.  Maybe my cached credentials woud somehow get jarred and things would start working.  It was a shot in the dark, but worth trying.  So I used the handy right-click option to refresh the reference of my WCF service.  While watching the output window, I noticed that there were 2 files being generated when I would have only expected the single .cs C# file:

  • localhost.cs

  • newapp.config

Since I figured at this point the problem must be in the config file, I looked to see what exactly was in the app.config file of the GigEntry project.  Sure enough, there was an XML element called <identity> that had my domain and username baked into it (seemingly from the CodeGen associated with the proxy).  Here is an example of what the configuration section looked like:


          <userPrincipalName value=<domain>\<username> />


I am not exactly sure what the ramifications are, but I do know that deleting that section allowed the example code to work.  Maybe Michele will reply to my post with some more info? Only after knowing what some keywords to search on were did I find some other interesting reads such as: http://msdn2.microsoft.com/en-us/library/aa702636.aspx

What doth good a tester make?

Most of what we do involves some iterative testing as we code.  Write a few lines — test to make sure it compiles.  Compile a few times — test based on your understanding of the desired functionality.  In everything we do, there are little testing steps built in.  Most of these have become second nature and they are not thought of as testing at all, but rather part of coding.

A year or two ago, Test Driven Development (TDD) began gaining favor as hordes of teams scrambled to get hip with agile techniques and practices.  TDD is a concept where you write your tests first, then code until your tests pass.  This is generally accepted as a solid way to provide code with many fewer bugs than traditional approaches to building software.  I do believe that it is always better to know the tests you are going to perform and the expected outcome before you write the first line of code.  This philosophy goes back to my first job out of college in management consulting when I worked for one of the big 5 (there were 5 at the time if that dates me).  A common first assignment was to write pages and pages of test scripts.  Reams of paper fell victim to the relatively useless test scripts that were cranked out by the scores of new employees who went through the 6 week training course.

Now I want to clarify that I think test scripts and TDD in general are both good things.  However, I think that the most important aspect of crafting your tests is the person who is doing it.  To take a newly hired employee and ask them to write test scripts is ludicrous in my opinion.  In order to write test scripts that have value based representative coverage you need to know the business.  While this may be possible for a simple NorthWind order placement function, most true business problems are not nearly that trivial.  I work in the oil and gas industry, and in order to predict what the software should do in a given situation, it is essential that you understand what the underlying functional equations are.  Not only that, but you also must understand what types of scenarios are common, and distinguish a rare occurrence from something that should or could never happen.  Without this understanding, you could spend a large portion of your time covering test cases that don’t make any sense.

I would also like to take my analysis of what makes a good tester a bit further and say that the less they know about how the software works, the better.  Every operation that is understood in advance by the person creating the test scripts is one that may consciously or subconsciously influence their thought processes while creating the test.  The goal is not to have good code coverage with your tests, but good business coverage.

We all want our code to be used and appreciated by the end user.  So to share my opinion on what will be the best use of resources to achieve a good quality assurance cycle, I would recommend that all projects keep these points in mind:

  • Always know, in specific detail, the expected result of your software
  • Be sure to know how to differentiate a common case from a valid case from a ridiculous case
  • Employ a tester with a functional background, not a technical one
  • Try to have 3 different people responsible for design, development, and testing
  • Create a standard set of regression tests… and use them

Hopefully you may find these simple guidelines useful.  I have seen people fall into situations where they spend a great deal of time maintaining NUnit test cases.  I am a proponent of this, even though it does require commitment and introduces some additional overhead to your project.  Where you get into trouble is when you add 75% more time onto your project to build and maintain test cases that are not representative of the business.  Before you invest time in covering your code with tests, make sure you are covering it with the right stuff.

Google Developer Podcast

I recently stumbled across a great new podcast that the Java Posse started putting out in June. I wasn’t familiar with the group, but it is a group of people from Googlespace (I am guessing they develop in Java 🙂 ) that are seasoned podcasters and have now started one to communicate the latest about Google tools and technologies. Check out the Google Developer Podcast to get a taste of this new tech resource.

Hopefully you are aware that Google is much more than just search and maps. The company has revolutionized the Internet and the way the world thinks about technology, stock prices, and corporate philosophy. Having a resource to learn about new things such as the offline enabler Google Gears provides a great service to the development community.

My personal feeling is that learning about new languages, tools, methodologies, etc. is the best way to become a better developer or architect. If you only delve deeper and deeper into .NET, you are starving the creative side of you as a technologist. Seeing other approaches to building software can spark new ideas and ultimately make you a much better citizen in the software community.

So take a moment to check out the podcast and submit your comments in the forums at http://groups.google.com/group/google-developer-podcast. I just made sure they were planning to continue podcasting as it has been 3 weeks since the last episode. If they know people are eating up the content, they’ll be much more likely to create some more good stuff.