CodeStock 2009!

Sunday, May 24 2009         No Comments

Next month is CodeStock 2009!  This is the second year of the event and they’ve already moved to a two day format.  I wasn’t able to attend last year, but I heard it was a great event.  I’m looking forward to attending this year.  This year they allowed early registrants to vote on the presentations being given! 

If you haven’t already, check out the website (http://codestock.org) and get registered.  If you register before June 1st then ticket is just $25.  After that it will be $45.  Or, if you are feeling lucky, come to the CINNUG user group this week on Tuesday (May 26th) and we will be giving away a ticket!

The conference is on June 26th and 27th (a Friday and Saturday).

PLINQ Tour Wrap-up and a Question Answered

Monday, May 18 2009         No Comments

Last week I took a tour of Michigan giving my “Doing More With Less – PLINQ” talk to three user groups (Grand Rapids, Ann Arbor and Flint).  It was a great time!  All three groups were fun to visit.  It’s always interesting to see how other groups are run and how their meetings go.

While I was traveling around I stayed one evening with Dave Giard, a friend of mine I worked with several years ago.  He has a series of interviews he’s been doing with various people in the community, and he recorded a short interview with me regarding PLINQ (Dave: I told you the camera would accentuate my bald spot!  I apologize to anyone who may be temporarily blinded).  Chris Woodruff was also kind enough to put me up for an evening as well.

At Ann Arbor one of the attendees had asked an interesting question that I did not know the answer to.  His question was, “Does thread context carry over to the new threads that are spun up under the hood by PLINQ?  Specifically, what about HTTPContext?

For a quick run down, AsParallel is a new extension method provided by PLINQ for IEnumerable<T>.  This method takes the IEnumerable<T> and wraps it in an IParallelEnumerable<T>.  PLINQ then supplies parallel implementations of all the standard LINQ methods (Select, Where, Min, Max, Sum, etc.) as extension methods off of IParallelEnumerable<T>.  This makes it really easy to add parallelism to your query simply by adding the AsParallel method to your query.  Check out more about PLINQ on MSDN (Really old article: http://msdn.microsoft.com/en-us/magazine/cc163329.aspx).

Just like a standard LINQ query, when you cause the query to actually execute, such as iterating the result, a PLINQ query’s calling thread starts the execution of the query.  However, the implementation of the query execution calls into the new Task Parallel Library (TPL - new in .NET 4.0) which knows how to break the work up across multiple processors.  The TPL spins up the extra threads and assigns them to processors, etc.  The question the attendee asked was, does any context on the original thread the query was started on carry over to the spawned threads.  He had specifically given the example of HTTPContext.

To answer this I tried two things:

_____________________

NOTE: The following tests were attempted on a copy of the PLINQ CTP from last June.  My copy of VS 2010 and .NET 4.0 isn’t finished burning to a DVD yet.  It was just released today to people with MSDN Subscriptions.  I’ll be building a Virtual Machine sometime in the next week or so.  I’ll try to remember to test this again with that to see if the behavior has changed.

_____________________

First, I created a web application, referenced System.Threading and added a simple PLINQ query.  In the filtering Where clause of the query I attempted to get at the HTTPContext.  What happened made complete sense to me.  The short answer is the context is NOT copied to the other threads that PLINQ spins up under the hood; however, the calling thread is one of the threads involved in the execution of the query so any part of the query being executed on that thread could find the HTTP Context.  None of the other threads could find the HTTPContext though.

Second, I created a class in a Console application, referenced System.Threading and again added a simple PLINQ query.  This time I added something in the Thread CallContext prior to the execution of the query and attempted to get it back out for while in the Where clause of the query.  Again, the other threads spun up by PLINQ did not have the original CallContext data copied to it, so the calling thread could see the data, but none of the other threads.

So, the answer is that threads spun up by PLINQ do not have the callcontext data or HttpContext copied over to them.  You will not be able to count on access to that.  I will also point out that I do not believe that the use of PLINQ queries is a good choice within a web application.  If you are concerned about the performance of your LINQ queries so much that you want to parallelize them they are likely running longer than a user of a web site needs to be waiting even with PLINQ.  Also, PLINQ is going to try to use as many processors as you allow it to get the query done as efficiently as possible.  This is going to affect your scalability and performance of your website.  I’d be focusing the use of PLINQ to asynchronous tasks executed on an application server and not my web server.

Indy Code Camp next Saturday

Saturday, May 09 2009         No Comments

I’ll be speaking at the Indy Code Camp next Saturday, May 16th.  I spoke last year at this event and to me it seemed to be the start of when I really started to get pulled into the greater .NET community. 

They have a great facility and what looks to be an awesome line up of sessions. 

I’ll be presenting two talks in the “Beyond Lines of Code” track.

Hope to see you there!

Speaking in Michigan This Week

Saturday, May 09 2009         No Comments

All the ads on NPR over the last few months for “Pure Michigan” have driven me to visit.  Well, not really, but I do hear quite a few ads for cities in Michigan.

This week I’ll be visiting three user groups in Michigan to give my PLINQ (Parallel LINQ) talk.  The groups are:

West Michigan .NET User Group - Tuesday, May 12th in Grand Rapids, MI.

Ann Arbor .NET Developer's Group - Wednesday, May 13th in Ann Arbor, MI.

Greater Lansing User Group .NET  - Thursday, May 14th, Flint, MI.

If you attend any of these user groups I hope to see you there!

Don’t forget MS is holding free events in May

Wednesday, May 06 2009         No Comments

Next week, May 14th, Microsoft is holding three free events at the Microsoft office in Mason.  ArcReady, MSDN Unleashed and Technet Unleashed.  Lots of good stuff on client application development, windows 7 and IE 8.

What does community mean to you?

Saturday, May 02 2009         1 Comment

I gave a talk at the 2009 Kalamazoo X conference that was entitled “Community – Get Involved!”.  This was an interesting event where it wasn’t focused on technology, but rather soft skills and personal development.  One of the organizers of the event, Mike Eaton, had contacted me a few weeks prior to the event and asked me to do this talk on what community is.  What he didn’t know was that I had been keeping a blog post (this one in fact) sitting in my drafts folder for quite some time.  I kept coming back to it and adding ideas and thoughts, but it wasn’t until I had to put together the talk that everything clicked.  What follows is the written version of my talk, with some additional insights and thoughts. It’s quite long winded…I’m shocked I got all this into a 20 minute presentation. :)

 

What is Community?

It turns out that the definition of community is a hard concept to nail down.  There are several sciences devoted to the study of communities of various types.  I found this on Wikipedia:

In sociology, the concept of community has caused infinite debate, and sociologists are yet to reach agreement on a definition of the term. There were ninety-four discrete definitions of the term by the mid-1950s.” -- Community - Wikipedia

Ninety-four discrete definitions, and that’s just in sociology.  As I looked around what I discovered was that in the context of the type of community I was trying to describe, the software development community, the definition was highly subjective.  This realization meant that in order to talk about community to others, I have to define the concept as *I* see it.

What is Community to me?

When I think of the software development community that I’m a part of I see a lot of different people.

I see my teachers.

There are so many great mentors and speakers in our community.  When I started attending user group meetings and going to events (especially open spaces) I found a multitude of people willing to teach.

I see my students.

I love to teach.  I’ve been a teacher since I worked as a counselor at a boy scout camp when I was a teenager.  There is something about teaching others and helping them improve themselves that satisfies me.  I’ve also discovered long ago that while I might be the one standing up in the front of the room talking, I’m still one of the students in the room.  I learn a great deal by teaching others.

I see my best critics.

Through the community I’ve found some of the most honest criticism of my work or ideas.  This open feedback was given so that I could improve myself.  As long as I was open to the feedback, I could find members of the community to give it.

I see my sounding board.

In the community I have found several people that I can use to bounce ideas off.  While the critics in the community provide feedback on work or talks I’ve already given, the members that act as my sounding board give me feedback on things I’ve yet to unleash on the world.  In fact, I had one of them read this post before I clicked publish.

I see my motivators.

Mike Eaton once posted a meme on who inspires you and called me out on it.  I failed to do my own post (until now…sorry Mike!).  I see all of the people in the community as my motivators.  When I stood in front of almost 200 people at the 2009 Central Ohio Day of .NET I saw my motivation.  Same when I gave this community talk at Kalamazoo.  The people who give up their own time, outside of work to come learn from others in the community…those are the people who inspire me.

I see my support group.

It is interesting to me to see how the community can stay cohesive even when we are all away from each other.  This used to occur via mail and post, but now we have email and Twitter.  Many times I’ve seen tweets from people in the community come across indicating that their mother or child has been taken to the hospital, or are sick.  Instantly members of the community react with responses of support, and even sometimes action.  A collection was made to help pay for a replacement laptop when a speaker had his car broken into after an event.  Another collection was made to help pay for meals for a community member who’s wife became seriously ill and had to be away from home for treatment.  Thoughts, prayers and simply acknowledgement of support abound in the community.  I see it everywhere.

I see my friends.

As I was listing out what I saw in the community and what it meant to me I realized that it pointed to a single word or concept: friendship.

I’m actually not an overly social person.  I’m usually one of the people that in a crowd like to sit in the back and watch others.  It’s funny that during one of my presentations Jeff Blankenburg tweeted, “@mikewo has a vastly different presentation personality vs. conversational personality. great talk. #kalx”.  He’s completely correct.  The number of people I stay in touch with from my high school and college days can be counted on two hands.  These are my closest friends.  In the community I see my friends, for all the reasons I stated above.  People willing to teach me, give me feedback and provide support if necessary.

I see that everyone can play all roles.

During the presentation I was showing pictures from community events as I walked through the points above.  At the end of this part of the presentation I wanted to ask people not to get caught up in who’s pictures were on each slide.  I didn’t spend tremendous amounts of time picking out people that matched a particular role.  I agonized over it more in that I found that the same people could go on any slide and match any of the roles.  I realized that’s really the case in the community.

I’ve run into a lot of people who won’t go to an event or speak up in an open space or discussion because they feel that they have nothing to contribute.  I call Shenanigans on that.  We are the sum of our experiences, therefore not everyone has the same perspective or viewpoint on a given subject.  Even if people agree they may do so for slightly different reasons.  These differences are important and may completely enhance the discussion.  EVERYONE has something to offer if they CHOOSE to do so.

 

Why Should I Get Involved?

After rambling about my own thoughts on what community is I hope you can see some of the benefits of being a member.  I hope you can see how rewarding the community can be, but if you still aren’t convinced I’d like to throw a couple more benefits that some people might find more important than those I listed above. 

Impress your boss.

Being involved in the community will help you keep an eye/ear on what’s going on in the industry.  I can’t count how many times some issue has come up at work that I could answer or recall a technology that might help because I had seen a presentation on it or saw a tweet about it from a member of the community.  It’s impressive to your clients and superiors when you are rattling off research ideas on how to solve an issue off the top of your head.

If you choose to become heavily involved in the community, such as speaking or serving as an officer/director for a user group then you have the opportunity to show leadership.  If you do this well it will carry over into your work and a good employer will take notice.

The cheapest form of training you’ll find.

Training in our industry can be expensive to the individual.  I took my first class recently and got a tremendous amount out of it.  It was well worth the expense, but it is unlikely that you can get your employer to send you to classes every month (if you can please contact me…I’d love to hear how you pulled that off!). 

Many of the community events are free and most others are completely reasonable in cost to attend.  Most user groups are free to attend, or have a low cost yearly membership fee.  Use these events and user groups as a way to bolster your education.  Sometimes they introduce you to a technology that you are excited by, which could lead you to taking the right class for you.

Find a mate that shares your interests.

In my talk I was using this as comedic relief, but I have to admit it’s highly unlikely that you’ll find that person of your dreams.  In Mythbusters fashion I’d have to say it’s Plausible.  I can say though that you will find people that share your interests.  For example, at one of the community events recently I found someone who was interested in learning how to play Go, which is something I’d been thinking of trying to pick up.  Remember, just because you’ve been drawn to it because you share an interest in technology and software development doesn’t mean you won’t find a wealth of other things you have in common with other members of the community.

Find a mentor.

If you don’t have a mentor you are doing yourself a huge disservice.  Having a mentor (or multiple!) is probably the best advice I can give someone.  Becoming involved in the community will allow you to meet many people that could service as excellent mentors.  I suggest finding as many as you can. 

Build networks that can help you.

Being a member of the community means exposure to a huge network of people.  You’ll be surprised how quickly you meet tons of people if you are willing to open up and say hi.  You’ll also be surprised  by just how powerful that network is.  In the current economic climate several people I know have lost their jobs or have decided to move on from troubled companies.  The majority of them found jobs quickly because of their contacts in the community.  One person in particular posted on Twitter that he had lost his job and within 4 hours he had offers… all based on the fact that people in the community knew who he was and was familiar with this work and skills.

 

Great! So How do I Get Involved?

Now that I’ve shared what community means to me, as well as some other reasons that might interest you in becoming involved, I hope that you are thinking “How do I get involved?”  Luckily that is dead simple.

Events and Conferences.

Look for events like the Kalamazoo X conference or Code Camps in your area.  In the region I live in we have multitudes of these one day events that offer an opportunity to learn and network.  They are thrown by all sorts of groups and focus on a wide range of technologies or methodologies.  Find ones that match your interest.  There are events for .NET, Ruby, PHP, Python, Java… you name it.  Search for them and attend.  (HINT: It helps if you talk to people when you get there).

In Tennessee and Ohio we have three large events that are completely driven by volunteers.  CodeStock and devLINK in Tennessee, and CodeMash in Ohio.  These multi-day conferences are filled to the brim with opportunities in the community.  Besides the sessions and presentations you’ll find open spaces and hallway conversations that you just can’t get from reading a blog or watching a screen cast.  I have to admit that I get more out of these volunteer, local events than I do out of the mega conferences put on by vendors.

Give Camps.

Give camps are opportunities for you to use your powers (read software skills) for good rather than evil (read help charities vs. rigging someone’s desktop to have a background that looks like all their icons on the screen, but hiding all the icons).  These events are usually a weekend where software engineers get together to produce code and applications for charities that desperately need it.  For example, one give camp produced software that could help the SPCA in Michigan collect data on lost animals and share that data with vets and other shelters across the state.  This type of software could lead to a much greater chance of these animals making it back home to their families. 

Mike Eaton describes give camps as the single, most powerful experience he has had at a community event.  Given that statement, I don’t think I could even come close to describing what this type of event is, you’ll have to just attend one to find out. If you want to get involved, look around for a give camp in your area.

Open Spaces.

If you aren’t familiar with open spaces then you should read the description of them over at Wikipedia.  I really “got” the concept of open spaces at the devLINK conference in 2008 and I have to say…wow!  The dynamic conversations with other passionate people in the community was just awesome and inspiring.  Like give camps, open spaces are just something you have to try out a few times to see how much of an impact it can actually make on you.

Often times at technical conferences you can find open spaces going on down a hallway or hidden around the corner.  Go search this place out and check out the board for topics you are interested in.  If you don’t see something that catches your eye I challenge you to post your own topic to talk about.  Remember that by being a facilitator of an open space you’re only job is to show up and say, “let’s start.”  You are not a presenter, nor do you have to speak.  Sit back and learn, though I hope you put your own two cents in.  It will only enhance the experience.

While attending a conference that has open spaces you’ll be making a choice between an open space session or set of presentations given by passionate speakers.  You will likely get benefit from both, but I encourage you to look at open spaces as an additional session on the docket.  If you would choose a presentation based on the open space topic over all the other sessions, then you’ve got your answer of where you should spend your time.

User Groups.

In the software development community we are NOT hurting for a lack of user groups.  They are everywhere.  Look around you locally.  If you can’t find one local that focuses on something you are interested in then look for the myriad of online groups as well.  Each group is run differently and usually focuses on a specific technology or methodology, but all of them are a great source of knowledge and networking opportunities.

I’ve been involved with the Cincinnati .NET User Group for many years now (Thanks James for getting me involved!).  If you want to get involved in a user group quickly, then simply volunteer to do something.  You don’t have to be an officer or director.  Just offer to clean up after the meeting, or take the left over pizza home with you.  Offer to move the chairs back or ensure the venue is clean before you leave.  Offer to help with the website or volunteer to help work registration.  Sometimes it’s the simple things that mean the most to the volunteers who are organizing and running these groups.

Nerd Dinners & Bitslingers.

Another way you can get involved in the community is to go to social events with other members.  Often times some user groups have a group of people who head out after a meeting to have a few appetizers or drinks.  This is the best time to network.  Find out what other people are working on and share your own experiences (you never know when you’ll find out that Bob is working on WCF and you have to start a project using that next week!).

A few guys from Microsoft put together nerddinner.com.  This site simply provides a way for someone to call a get together for nerds, usually a dinner.  Go find one in your area and register.  Just like the drinks after the user group meetings the nerd dinners are an awesome time to network.  If you don’t find one in your area then call one yourself!  You’re only responsible for posting it on the website and showing up.  After that it’s up to everyone to bring their experiences and discussions to the table.  (HINT: even if no one shows you can still have a quiet dinner).

In Cincinnati we have started an informal get together called Bitslingers.  This grew out of an open space discussion where it was stated that we don’t share our own code enough.  I wanted to have a venue where people could get together and work on code together.  People can come to work on an open source project, or simply try some bit of technology out.  Most of all I wanted people to have a time they could come code and learn from each other.  If you don’t live near Cincinnati then call your own Bitslingers event.  Just like the nerd dinner, simply pick out a time and place that works for you and start advertising it to the community.  This concept of a coding get together isn’t new and I certainly didn’t “invent” it, so I know there are already lots of these going on.

Social Networking.

As I stated earlier, it’s interesting in how our community can stay connected even when we aren’t attending user groups or events.  The social networking explosion on the internet has made this possible.  Sites like twitter, facebook, linked in, plaxo, etc. have made it all possible.  As you attend the user group meetings and events, find out what social networks the members or attendees belong to and think about joining them.  I’m amazed at how the conversations I have at the events continue well after the event is over.  Join and be part of the conversation.

Teach.

The best way to become involved in the community in my opinion is to teach.  Now, don’t get me wrong, I’m not saying that everyone should get up and speak or write books.  I’m saying everyone should teach.  You can teach by simply being part of a conversation and putting in your thoughts about the topic.  You can teach by pairing with someone at a Bitslingers event.  You can teach by going to an open space.  You can teach simply by sharing your experiences, both successes and failures.  As I said early on, EVERYONE has something to contribute.  Doing so only enriches the entire community.

If you do want to take a more active teaching role then seek out the event coordinators and user group leaders.  Tell them you want to give a presentation or talk.  In my user group we have grok talks, where it can be a 10-20 minutes talk on just about anything technology related.  You don’t have to make slides or demo code if you don’t want to.  It’s an awesome way to get started speaking.

 

Get Involved!

If you’ve read through all of my thoughts on community then I hope you have a good idea of why I find community to be a positive influence on my career and personal life.  If you aren’t involved with a community I hope what I’ve said makes you think about doing so.  If you are involved I hope you see a lot of the same benefits that I do.

Now that you’ve heard all of this I have one question for you…

What does community mean to you?

I ended my presentation on community with this question to the audience.  Unlike then, where I asked that each person simply think about it on their own, I encourage you to post your own thoughts about community, both good and bad.  Just provide a comment below or, better yet, post your own blog entry.  I’m not going to call out individual people to so this, rather I’m going to take a trick from Keith Elder and simply say, If you are reading this, then consider yourself called out to post your thoughts (If you don’t have your own blog or space to do so I’d be happy to post it for you, just contact me).  By sharing our experiences we learn from each other, thus enriching the community.  And truly… isn’t that the point?

Central Ohio Day of .NET 2009 – Recap

Monday, April 20 2009         3 Comments

I’m a little biased, but I have to say, the event was AWESOME! 

First off, we had a 25% increase in attendance over last year!  We had 191 software professionals through the door at the Roberts Centre in Wilmington, OH.  From the stand point of one of the organizers the event just couldn’t have gone smoother.

I’d like to thank the main CODODN staff: Jim Holmes, Carey Payette, Justin Kohnen, Bob Sledge, Matt Rigling and Chris Barth.  These people gave up a good deal of their own time over the last four months to ensure the event went well.  It’s volunteers like these that make our development community so strong.  My hat is off to you six.

Of course, I’d like to thank the sponsors.  With the economy being the way it is I’m very proud to point to our sponsors and say, “these companies care about the developer community”.  They understand that even in hard times such as these that supporting the community means supporting their own employees and businesses.  Microsoft, MAX Technical Training, DevExpress, Redgate, CBTS, Triune Group and SDS all provided financial support so that we could rent the facilities and provides some drinks all day.  About ten other companies provided raffle items and we handed out several thousand dollars worth of software and books through out the day.

I’d like to thank our room proctors and other volunteers.  Several of these volunteers showed up at 7:00 AM to get things in place, which means they woke up likely around 5:00 AM.  That’s commitment.

I’d like to thank Josh Holmes for being CODODN’s very first keynote speaker.  I think the message Josh had for us was very fitting for the current times and we all need to think about how to keep simplicity in our minds.

I’d like to thank Jeff Blankenburg for really coming through on providing lots of stuff for the event, such as the attendee bags, water bottles and projectors.  Jeff also put together the cool Microsoft Tag scavenger hunt and the after party (the board/card games were fun!).

I can’t thank the speakers enough.  Being a speaker myself I know how many hours go into producing the slide decks and demos.  I fully understand the effort it takes to prepare for talks such as these.  We had an awesome set of speakers and, once again, the evaluations of the content and speakers was overwhelmingly positive.  This year was the first year we included a complete track dedicated to the database developers and we had had a good showing for it.

I’d like to thank Carey Payette and Jennifer Marsman for putting together the Women In Technology dinner after the event. 

Finally, I’d like to thank the 191 people who came out to make the event a success.  Whether you were a speaker, a volunteer, a staff member or an attendee, all of you played a part in making this event a success.  This is the third year in a row I’ve been involved in helping organize this event and it is by far the best one we’ve had so far.

Upcoming Microsoft Events in May 2009

Sunday, April 12 2009         No Comments

It looks like Microsoft is providing a day packed full of technology goodness on May 14th.  Here’s the line up for the day:

  • ArcReady (9:00 AM – 11:45 AM): Architecting for the Client Tier - (Register Here)
  • MSDN Unleashed (1:00 PM – 2:50 PM): IE8 For Developers & Developing for Windows 7 - (Register Here)
  • TechNet Events Unleashed (3:10 PM – 5:00 PM): Windows Server 2008 R2, Windows 7, & IE 8 – (Register Here)

All three events will be at the Microsoft Office in Mason.  If you aren’t near Cincinnati, check out the websites for where these events will be near you:

Kalamazoo X : Change in Direction

Wednesday, April 08 2009         No Comments

On Monday Mike Eaton, one of the organizers for the Kalamazoo X conference, announced a significant change in the format of the event.  Instead of a multi-track event the conference has now shifted to a “lightning talk” style format.  That means a single track of 20-30 minute sessions. 

Here’s why I think this rocks:

  • The lightning talk format means that the speakers have to focus their talks down to the real points.  No marketing fluff or time for spinning graphics!
  • You don’t have to choose between sessions. 
  • You don’t have to choose between speakers.
  • If you don’t care for a particular session just wait take a walking break, come back in 30 minutes and you’re on to the next one. (much like the weather in KY these days).
  • Information distilled.

So, should you drive all the way up to Kalamazoo, MI for this type of event?  Absolutely!  This will definitely be a different kind of event.  It will almost be like open mic night, except you can can count on the show being a good one!

Help give nPlus1 a facelift

Wednesday, April 08 2009         No Comments

Are you a designer?  Do you like to lay out websites?  Want your name and bragging rights for providing the web design for a community web site?  Then you’ll want to submit a design for the nPlus1 facelift contest.  The contest ends on June 15th, so make sure to get your submissions in by then. 

Take a look at the official rules and requirements at http://nplus1.org/faceliftcontest/

Oh, did I mention that 1st place gets a copy of Vista Ultimate and a $250 Best Buy Gift Certificate?