# Monday, January 18, 2010

Episode 64

In this interview, author and developer Bill Wagner discusses the dynamic features in the upcoming C# 4.0.

Monday, January 18, 2010 3:03:20 PM (GMT Standard Time, UTC+00:00)
# Friday, January 15, 2010

CodeMash came to an end too quickly.

Friday lunch featured an entertaining keynote by Andy Hunt, who discussed the challenges of life in the high-tech world, the differences between the generations, and ways for developers to improve their existence.

Late in the day, I delivered a session on the Microsoft Managed Extensibility Framework. My talk wasn't until 3PM, so I spent a good chunk of the day preparing for it.

One of the hallways at CodeMash was filled with PCs, preloaded with Visual Studio 2010 labs. I spent some time going through these labs, including writing F# code for the first time.

Of course, I recorded a few more Technology And Friends episodes with some smart developers.

I had a great experience this week. The CodeMash organizers made an effort to ensure that one always had multiple options at any given time. There were as many as nine sessions during each time slot; If none of those interested you, you could attend an open space, pair program, complete an online lab, or exchange ideas with other attendees. Social hours in the evening, included a game room, a concert (featuring Canadian-Celtic artist Enter the Haggis, and ad hoc gatherings in the hotel bar or in various hotel rooms.

I made a special effort this year to make new connections. I decided in advance that I would not eat with the same people each meal and I would eat with as many strangers as possible.  Doing so helped to expand the network from which I can learn.

It's no wonder that I had no time to set foot in the water park.

Friday, January 15, 2010 11:28:19 PM (GMT Standard Time, UTC+00:00)
# Thursday, January 14, 2010

Although I've been here at the Kalahari since Tuesday, today was officially the first day of CodeMash.

The first session I attended was an Introduction to Silverlight talk in which Jesse Liberty walked through the basics of creating a simple online data form, showing off the layout elements and databinding features of Silverlight.

I followed this by attending a session on JQuery. The presenter - Adam McCrea - was a Ruby developer working on a Mac (I'm a .Net developer working on a PC), but it didn't matter as he showed a few simple JQuery functions to perform some tasks inside a browser.

I attended an open space in the afternoon. The topic - MEF and Silverlight - sounded intriguing but I left when it went far off-track, devolving into a debate over the usefulness of MEF and Inversion of Control container. This might have been an interesting side topic, but the arguments seemed fueled by emotion and I had little desire to engage, so I left halfway through.

Lunch featured a keynote address by Microsoft engineer Hank Janssen, who has been instrumental in bringing PHP to the Microsoft platform. IIS now supports PHP and bridges the gap with other open source technologies. This was a topic I know very little about, so I was able to absorb a lot of new information. As an bonus, NPlus1 sponsored a private dinner with Hank, where community leaders could ask him questions about Microsoft's future plans with open source technologies. I wasn't able to contribute much to this conversation, but it was a delight to listen to others discuss it in detail. Microsoft appears to be opening up their technologies and making them available to work with open source tools more than ever and it seems this trend will continue.

I recorded a half dozen more Technology and Friends episodes throughout the day. Topics include MongoDB, Open Spaces, and Software Craftsmanship. I will edit and release in the coming weeks.

Thursday, January 14, 2010 10:25:29 PM (GMT Standard Time, UTC+00:00)
# Wednesday, January 13, 2010

CodeMash officially begins tomorrow, but you wouldn't know it if you saw all the activity here at the Kalahari.

My morning was spent seeking out and talking with smart people. Many times, I get more information at a conference from hallway conversations than from sessions. None of the morning sessions appealed to me, so I learned of technologies and Microsoft programs and jobs and people.

In the afternoon, I attended Mary Poppendieck presented a 4-hour session titled "Competency and Leadership in Software Development". I was excited to see this because I recently read and enjoyed the book "Lean Software Development – An Agile Toolkit",

that Mary co-wrote with her husband Tom. This session focused on what it takes for individuals and teams to achieve expert competencies (years of directed practice); followed by types and characteristics of effective leaders (such as transmitting passion and commitment to the team).

Afterwards, I was happy that Tom and Mary agreed to record an episode of Technology And Friends. I expect to release this episode shortly.

In the evening, the folks who produce the Java Posse hosted a panel discussion on stage. Java developers were joined by C# expert Bill Wagner and F# tester and author Chris Smith to answer questions submitted by podcast listeners.

I missed dinner Wednesday night but I did get to meet some of the evangelists from DevExpress whom I know of by reputation.

Bedtime came late and Thursday comes early but tomorrow will be a full schedule.      

Wednesday, January 13, 2010 10:18:03 PM (GMT Standard Time, UTC+00:00)
# Monday, January 11, 2010

Juanary is offically MEF month. I have scheduled "Extending Your Application with the Managed Extensibility Framework (MEF)" at least 6 times this month. The first time was last week, when I delivered a Grok Talk at Sogeti that was available via Live Meeting.

The following presentations will all be about MEF

  • Fri Jan 15 at 3PM, I will be delivering a vendor session at CodeMash in Sandusky, OH.
  • Tue Jan 26 at Noon, I will deliver a presentation to Financial Corp User Group in Cincinnati, OH.
  • Tue Jan 26 at 6PM, I will present at the Cincinnati .Net User Group in Mason, OH
  • Wed Jan 27 at 6PM, I will present at the Dayton .Net User Group in Dayton, OH
  • Thu Jan 28 at 6PM, I will present at the Central Ohio .Net User Group in Columbus, OH

In addition, I will deliver two presentations Fri Jan 22 at the State of MI Developer Briefing in Lansing, MI.

  • At 1PM, I will deliver my MEF presentation (of course).
    At 2:30PM, I will present on "Speeding your application with Microsoft Velocity".
Monday, January 11, 2010 1:48:24 PM (GMT Standard Time, UTC+00:00)
# 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 5:41:05 PM (GMT Standard Time, UTC+00: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 12:10:43 PM (GMT Standard Time, UTC+00: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 7:45:02 PM (GMT Standard Time, UTC+00: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 3:25:03 PM (GMT Standard Time, UTC+00:00)
# Wednesday, December 9, 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 9, 2009 7:20:07 AM (GMT Standard Time, UTC+00:00)