Thursday, December 31, 2009

2009 was a difficult year for me in many ways. My sister Denise was less than three years older than me when she passed away in July. Her death left a wound that is still healing. Worse than her death was the revelation afterward that she had been betrayed by someone close to her - someone we all trusted. We are still fighting this battle and it continues to elevate stress in my family.

But I also experienced many positives events in 2009.

The support of friends and family has been instrumental in getting me through these difficult times. If you are in this group, then I thank you. The tragedy shared by my family has brought us closer together in many ways.

My two sons continue to grow (physically and emotionally) and they continue to impress me with each new stage of their life. Timmy is now in high school and is showing more leadership qualities than I expected. Not long ago, he organized an independent basketball team completely on his own. They competed in a large league and he even convinced his brother to coach the team. His team performed well, despite playing in a league with kids mostly 1-2 years older. Timmy is working hard to balance school work with football and basketball. Nick is in his first year at Michigan State University. The time away from home is maturing him and each time I see him, I see more of a man and less of a boy. I remember a similar transformation in me during my first year at MSU. I particularly admire the fact that he is setting high goals for himself.

I have been dating a woman for quite a while. She didn't grow up in the US and her background is very different from mine, which presents some challenges; however, she is exceptionally kind and she is the most giving person I have ever met and I'm grateful she remains part of my life.

I did a fair amount of volunteer work this year, but most of it was not altruistic. I volunteer at a local non-profit music club in exchange for free admission to the concerts; I volunteer at the local public access TV station as a way to learn more about television production. The most good I did through volunteering was with the three Give Camps in which I was involved this year. I'm looking forward to participating more next year.

The biggest personal goal I did not hit this year was to lose 25 pounds. Resolving my sister's estate, being a single father, and other commitments kept me in the car so much that I had little time to exercise. Still this needs to be on the list next year.

One of my professional goals for this year was to be more involved in the software development community. In particular, I wanted to do more public speaking.  In 2009, I spoke at 5 conferences, 4 user groups, 3 internal Sogeti talks and 2 special events (ArcReady and NPlus1 summit). I expect this trend to continue as I have 5 presentations scheduled for January 2009.

I also became more involved in the Great Lakes Area .Net User Group this year. As Vice President, I took on the role of speaker coordinator and was able to line up some excellent presentations for the group.

In January I began production of my TV show "Technology and Friends" (although the show did not have a title for the first few episodes). During 2009, I published 63 episodes online. Recently this show has also begun airing on Channel 17 of my local cable system. Recording and producing was a great experience. It gives me the opportunity to talk with a lot of smart people and I have learned a lot about software, communication and video production.

I began my blog two years ago, but I devoted more energy to it in 2009. This article is the 155the entry for the year - an average of almost 13 per month. I don't know if I'll keep up that pace in 2010.

Despite the poor economy in Michigan, I managed to stay employed all year. During 2009, I worked for a significant time for three customers. At the end of each engagement, each customer had wonderful things to say about my work.

As the Microsoft Application Development lead in Michigan for Sogeti, I focused primarily on technical training for our consultants and on building a sense of community. I organized a series of "Grok Talks"  designed to exchange information. Some talks were delivered by Sogeti consultants (giving them valuable presentation experience) and some by experts in the industry. This was a big success and we plan to continue it next year, even though I will not continue in the same lead role.

As I write this, I realize that 2009 had more positives than negatives. The loss of my sister and subsequent discoveries still made it a difficult year, but I was able to accomplish a lot, thanks to some hard work and the support of family and friends.

I am looking forward to a happy and productive 2010. I have big plans, some of which I plan to share soon on this site.

Happy New Year and may God bless you all. 

Thursday, December 31, 2009 12:41:05 PM (Eastern Standard Time, UTC-05:00)
 Monday, December 28, 2009

In this screencast, I demonstrate some of the enhancements in the user interrface of Windows 7.

Monday, December 28, 2009 7:10:43 AM (Eastern Standard Time, UTC-05:00)
 Monday, December 21, 2009

Complexity is the Enemy! 

This is the message driven home repeatedly by Roger Sessions in his book Simple Architectures for Complex Enterprises

Sessions recommends tackling a complex enterprise architecture by identifying the subcomponents of a complex system and dividing that system into autonomous subsystems. He refers to these subsystems as Autonomous Business Capabilities (ABCs) and the process of dividing them as a Simple Iterative Process (SIP).  

Before describing how to approach this process, Sessions presents a mathematical proof that subdividing a complex system into a set of subsystems reduces the complexity of the system as a whole. This seems intuitive to many of us, but the mathematics allow us to be more forceful in our commitment to this process. The mathematics is relatively simple (nothing beyond high school math) and he even recommends training team members in this mathematics before beginning any SIP.

A large part of an Enterprise Architect's job is to define the optimal way to partition the complex system. By applying mathematics to his model, he removes the emotions that so often dictate how a project is broken up.

The process of splitting a complex system into appropriate subsystem isn't overwhelming, but it is critical to managing complexity. According to Sessions, Each ABC should contain only elements that relate to one another; and the elements of one ABC should not relate directly to or communicate directly with any element in another ABC. Once partitioned, each ABC should be roughly the same size, although it is possible to split a subsystem further into sub-subsystems. It is also critical that communication between each subsystem take place only at a few clearly-defined points.

If this sounds like a recipe for Service Oriented Architecture, this is no coincidence. Sessions concludes his book with recommendations on moving from business partitions (ABCs) to software partitions, which he describes as "fortresses". These software partitions follow many of the same rules as ABCs created with the SIP, so making this transition is straightforward.

This is a good book for anyone who aspires to be an Architect (Enterprise or otherwise) and wants to apply a systematic approach to managing complexity.

Monday, December 21, 2009 2:45:02 PM (Eastern Standard Time, UTC-05:00)
 Thursday, December 10, 2009

When writing .Net code (or code in any language for that matter) that updates a database, you need to be cognizant of the fact that it takes a finite amount of time to connect to a database and process any commands sent to the database.

ADO.Net permits you to set a TimeOut value on a Connection object and on a Command object.

The Command TimeOut property allows you to configure how long a command waits to successfully complete execution of a query. By default, a Command object will timeout after 30 seconds

It’s important to strike a good balance when setting timeout values.

Sometimes we expect a database action to take a long time and we want to give it time to complete before we pull the rug out, so to speak.

On the other hand, if a problem prevents a command from executing properly, it's useful to know this sooner so our application can handle it.

Changing a command timeout is simple. The Command object exposes a read/write ConnectionTimeout property. Set it to the number of seconds you wish the comand to wait on executing before aborting.

After the Command TimeOut period, if the command has not completed, an exception is thrown. However, the database server does not know this, so the command will continue to execute on the server - your application just won't know the results.

The Connection TimeOut is the amount of time the Connection will spend attempting to connect to a database before giving up and throwing an exception. The default Connection Timeout value is 15 seconds. On a slow network, it may take longer to connect, so you may wish to increase this value. However, if the application is unable to connect to the database - if the server is unavailable, for example - it's best to find this out sooner rather than later.

Changing the Connection Timeout is less obvious than changing the Command Timeout. The Connection class exposes a ConnectionTimeout property; But this property is read-only, so you cannot use it to change the timeout. To change a timeout, you must modify the connection string. Add or update the following to your connection string:
    Connection Timeout=XXX
where XXX is the number of seconds to wait for a connection to remain open before aborting all pending operations on that connection.

In your applications, it is important to strike the right balance when setting timeout properties.

Thursday, December 10, 2009 10:25:03 AM (Eastern Standard Time, UTC-05:00)
 Wednesday, December 09, 2009

Tomorrow evening - Thursday December 10 - I will speaking at the Flint .Net User Group. My topic is An Introduction to Object-Oriented Programming, a talk I've done twice before.

More information is available here.

This will probably be my final presentation for 2009.

Wednesday, December 09, 2009 2:20:07 AM (Eastern Standard Time, UTC-05:00)
 Monday, December 07, 2009

The Great Lakes Area .Net User Group traditionally does not hold a regular meeting in December.

This year, we will replace the December meeting with a special event. Software developers in the area are invited to come together to share code and ideas in an informal setting.

I first heard of this idea from my friend Mike Wood. He is on the board of the Cincinnati .Net User Group, which sponsors a monthly pair coding meeting that they refer to as "Bitslingers". Shortly after hearing of Mike's group, I learned that a similar meetup took place weekly in Columbus. Because the Columbus folks meet in the morning, they call their group "Code and Coffee". I'm trying to think of a clever name for the Detroit area meetup.

The first Detroit-area meetup will be Wednesday December 16 from 6-9PM at Biggby Coffee at 26185 Evergreen Rd in Southfield, MI. If Biggby gets too crowded, we will move next door to Potbelly.

Bring your laptop and experience pair programming and exchange ideas with other bright .Net developers. Work on an open source project or dive into a new technology or explore a new technique or learn a new language.

I will be there with a personal project I started to help me learn ASP.Net MVC and the Entity Framework.

If this event is successful, we will consider holding it regularly.

Monday, December 07, 2009 9:22:37 PM (Eastern Standard Time, UTC-05:00)
 Friday, December 04, 2009

For the third consecutive year, I will be attending CodeMash. This annual event will next be held at the Kalahari Resort in Sandusky, OH January 13-15.

I really like the CodeMash conference. Here's why

1. It has a regional feel.
There are a lot of bright, passionate developers in Ohio, Michigan, Kentucky and Tennessee. You will see a good number of them at CodeMash, as presenters and as attendees.

2. The content and speakers are excellent.
I've heard many of these speakers before and it's an impressive list. In addition to thought leaders from the Heartland, CodeMash attracts internationally known authors and speakers, such as Mary Poppendieck, Chris Smith, Andy Hunt, Jim Wooley and Gary Short.

3. It's cross-platform.
As a .Net developer, it's easy for me to get tunnel vision regarding how I do software design and development. Learning from Ruby, Java and Python developers gives me a different perspective.

4. The sessions aren't the only place to learn.
There are so many smart people at these conferences that I learn as much outside the sessions as I do in them. I can talk to an expert in the hallway and ask specific questions about my project; or I can attend an open space and discuss a topic of interest with other smart people.

5. It is affordable.
It's tough to find a better deal than this. The cost for the 2-day conference is currently $220 (It would have been only $175 if you had registered last week. Sorry.) An optional "precompiler" day will set you back another $75. Compare that with a national conference like PDC, which costs thousands of dollars.

6. It's fun.
What can I say? I thrive on interacting with these folks. They are passionate about many of the same things I am. Plus there are activities at night, such as parties and poker tournaments. There is even an indoor water park at the resort. Many attendees bring their families with them to enjoy the slides while they are at the conference.

Interested yet? Is so, you can get more information at CodeMash.org. But hurry. I rushed to write this because I just saw a tweet announcing that only about 30 tickets remain.

Friday, December 04, 2009 10:54:51 AM (Eastern Standard Time, UTC-05:00)
 Wednesday, December 02, 2009

Monday evening, my show - Technology and Friends - appeared on Channel 17 (CTN) in Washtenaw County, Michigan.

I'm happy to announce that more episodes of Technology and Friends will be available on Comcast cable in my area. If you have Comcast cable in Washtenaw County, you can watch the show on Channel 17 at the following times.

Four episodes are scheduled to air over the next two weeks. The times are listed below.

The three episodes (Episode 48: Phil Japikse on HopeMongers.org; Episode 57: David Truxall on Debugging; and Episode 60: Stephen Toub on Parallel Computing) will air back-to-back-to-back at the following times.

November 30, 2009 5:00 PM
December 3, 2009 2:00 PM
December 4, 2009 9:00 PM
December 5, 2009 6:00 PM
December 6, 2009 Noon
December 7, 2009 4:00 PM

Episode 58: Sai Naik on the benefits of SharePoint will air at the following times.

December 9, 2009 11:00 PM
December 10, 2009 8:30 PM
December 12, 2009 11:00 AM
December 14, 2009 8:00 PM
December 16, 2009 4:00 PM
December 19, 2009 7:00 PM

As always, you can still view episodes on this site.

Wednesday, December 02, 2009 7:54:59 AM (Eastern Standard Time, UTC-05:00)