IndyNDA

All Good Things…

IndyNDAThis isn’t the post I wanted to write tonight but I knew the time was coming. The leadership of the Indianapolis .NET Developers Association (IndyNDA) announced in its LinkedIn group that its December meeting will be its last.

IndyNDA has had a good run. Having endured for nearly 12 years it has been a cornerstone of the Indianapolis development community. When I moved to Indianapolis seven years ago it was the go-to place for all things .NET. Having come from a small user group in Fort Wayne I was a bit overwhelmed by the size of IndyNDA meetings at first but it has been part of my life most of the time I’ve lived here, increasingly so over the past four years.

I credit IndyNDA for helping craft me into the developer I am today. Over time IndyNDA broke me out of my shell. Through IndyNDA I’ve learned about things I probably would never been exposed to; I’ve formed relationships with people I’d probably never have met; and I’ve had opportunities I’d probably never have found on my own. I can’t thank the people of IndyNDA enough for its impact on me.

While I’m sad to see the group end I understand. The world has changed a lot in the past decade. When IndyNDA started it was the only game in town. Back then we didn’t have social media outlets like Twitter, Facebook, and LinkedIn; we didn’t have answer sites like StackExchange; and we didn’t have webcasts of every major development conference. All of this comes at a price though and in this case it’s that groups like IndyNDA have diminished importance.

IndyNDA may be coming to an end but I have high hopes for the future of the Indianapolis development community. Per the announcement IndyTechFest will be making a comeback next year and there are certainly other events around town as evidenced by a quick Meetup search. In the meantime though I’d like to thank Brad Jones, Dave Leininger, Dan Rigsby, Joel Dart, Alex Gheith, and everyone else that has led the group through the years. Your contributions are appreciated.

Faking It Slides Available

Thanks to everyone that attended one of my Microsoft Fakes talks this week. I hope the sessions were beneficial. I just uploaded the slides to SlideShare for you to review at your leisure.

If you attended one of my sessions could do me a quick favor by taking a moment to rate the talk on SpeakerRate?

NUFW (6/12/2012)
IndyNDA (6/14/2012)

Thanks!

Upcoming Talks

If you’re interested in learning about the Fakes framework (formerly Microsoft Moles) that’s included with Visual Studio 2012 you have two opportunities to do so this week.  Those in Fort Wayne, Indiana should attend tomorrow’s (June 12) NUFW meeting.  If Indianapolis is more convenient, feel free to attend Thursday’s IndyNDA meeting instead.  Of course, if you just want to heckle me attending both is also an option!

If either of these events interest you please check the appropriate group’s site for logistics.  I hope to see you there!

IndyNDA – Your Spark Razored my NHaml

When Jay Harris told me at KalamazooX that he was going to be speaking at IndyNDA soon I got really excited. That’s why I’m upset that for the first time in nearly two years I can’t make it!  On the bright side, I’ll be hanging out with my wife in Las Vegas as we celebrate our 10 year anniversary.

This month Jay is going to discuss a few of the ASP.NET MVC view engines, namely Spark, Razor, and NHaml. Jay is a great speaker and an all around good guy so if you can make this event I highly recommend it.

This month’s meeting will be at:

Wiley Publishing
10475 Crosspoint Blvd
Indianapolis, IN 46256

IndyNDA – Testing Code From The Pit Of Despair

It’s the second week of February so if you read this blog with any frequency you know what that means.  That’s right, IndyNDA is this Thursday (9 February)!  This month we’re fortunate to have Phil Japikse returning to discuss testing legacy code.

Michael Feathers defines Legacy Code as any code that doesn’t have automated tests, and you agree that automated tests are an important facet of successful software development. Then it happens – you get your next assignment, and it’s your worst nightmare! You have to maintain and enhance a large application that has no tests in place, and there are parts that are just plain scary. Where do you start? Traditional Test Driven Development techniques don’t typically work, since they focus on an inside-out development paradigm.

I will show you the patterns and practices that will help you turn the scary big ball of mud into a tested code base.

I’m excited to have Phil back.  I’ve heard him speak many times and have always found his talks both informative and entertaining.

This month we’re meeting in the 2nd floor conference room at 900 E. 96th Street.  Registration begins at 5:30 and the main event kicks off at 6:00.  Snacks and soft drinks will be provided.

I hope to see you there!

IndyNDA – Panel Discussion on Technical Screening

The January IndyNDA meeting is this Thursday!  Join us for a panel discussion on technical screening.  Mark Huebner will moderate the discussion with our panelists including Ed Herceg (Robert Half Technology), Dale Brubaker (Interactive Intelligence), and yours truly.  Audience participation is encouraged.

Some say companies and recruiting firms are using tests based on incorrect assumptions on how developers do their work. C# and jQuery and JavaScript and VB and the .NET framework continue to offer new capabilities. The complexity has generally not been a problem for you because you make liberal use of IntelliSense, online help, books online, reference books, Google searches, and technical online forums. You know how to quickly find information when you can’t remember specific syntax. So, can you pass that technical screening test? Should you need to be tested? Let’s find out

Don’t forget about the C# and JavaScript SIGs after the main event either.  I’m not sure what the JavaScript group is covering but for the C# group Alex Gheith and I will be leading a discussion over a few of the items in chapter 1 of Effective C# by Bill Wagner.

As always registration begins at 5:30 with the main event starting at 6:00.  Thanks to our sponsors food and drink will be provided before the meeting.

Please be aware that our meeting location has changed.  For January and February we’ll be meeting in the 2nd floor conference room in Parkwood 9.  For those that remember when we had meetings in the 5th floor conference room in the same building rest assured, the 2nd floor conference room is better suited to our needs.

I hope to see you there!

June Speaking Engagement – IndyNDA

I’ll be speaking at the 126th meeting of IndyNDA. In this session I’ll cover Parallel Programming in .NET 4 and as a bonus show some of the features included in the Visual Studio Async CTP.  I hope to see you there!

Date/Time:
6/9/2011 6:00 PM
(5:30 registration)

Location:
Management Information Disciplines, LLC
9800 Association Court
Indianapolis, IN 46280
[Map]

Be sure the check the IndyNDA site for full logistics and other information.

IndyNDA – Windows Phone 7 Application Platform

This month’s IndyNDA meeting is tomorrow, September 9, 2010. Come hear Bill Steele from Microsoft speak about the Windows Phone 7 Application Platform.

Following the main meeting the three special interest groups (SIGs) will meet.

ASP.NET SIG: Continuing work on an ongoing MVC knowledge base application.

C# SIG: I’ll be presenting an introduction to dynamic programming in C#.

SharePoint SIG: Topic to be determined.

Registration opens at 5:30 PM and thanks to our sponsors food and drinks are provided until 6:00.  I hope to see you there.

Location:

Nine Parkwood Crossing
5th Floor Conference Room
900 EAST 96TH STREET
Indianapolis, IN 46240

IndyNDA: MongoDB & Reactive Extensions

The June 10 IndyNDA meeting was one of the most interesting I’ve attended in months.  First, Dennis Burton gave a high-level introduction to MongoDB then for the C# SIG Joel Dart gave a fairly detailed introduction to Reactive Extensions.  I’ve heard a lot of buzz about both of these technologies lately but really haven’t done much investigation on my own so I was glad to see them both in action.  I was inspired to look deeper into both technologies after the presentations.

MongoDB

MongoDB has been getting quite a bit of press lately.  There was even a session devoted to it at IndyTechFest.  Even though I had heard a bit about it and knew it falls under the NoSQL heading I really didn’t know much more than that.  What’s wrong with relational databases?  What does it mean to be NoSQL?  Where does Mongo fit in?  Dennis did a great job answering each of these questions and more.

What’s Wrong With Relational Databases?

Nothing.  The relational model is alive and well and has a definite place in the world of software development.  The problem is that the relational model was originally described in 1970 and hasn’t changed significantly since then but the world has and the types of applications we’re building have changed with it.

Think about some of the decisions that need to be made for a new application (assuming .NET):

  • Which language should it be written in?  C#?  VB?  C++?  F#?
  • What type of UI should it have?  WinForms?  WPF?  Silverlight?
  • If it needs interprocess communication should it use remoting or WCF?

We answer all of these questions and more, then we say “oh, and we need a relational database” regardless of whether it’s the right tool for the job.  Relational databases have been the default answer to the question of how to store the data for years.  The NoSQL family of databases offers an alternative to the relational model that may or may not be the best solution to the problem.

What Does it Mean to be NoSQL?

NoSQL is exactly as it sounds.  NoSQL databases don’t use SQL for storing or accessing data.  MongoDB is a document oriented database.  Unlike a relational database which stores related objects separately and brings them together with joins a document oriented database stores related objects together.  This differentiation does require a change in mindset and terminology.

Relational Document Oriented
Database Database
Table Collection
Row Document

With MongoDB there is no predefined schema.  Databases can be implicitly created just by referencing them.  The same goes for collections.  Need a new collection?  Just specify a name and add a document.  The lack of a predefined schema also means that documents stored within a collection don’t need to follow a consistent structure although they typically will.

Where Does Mongo Fit in?

Mongo is designed for speed and scalability.  This makes it ideal for applications where performance is critical.  The MongoDB web site states that it is well suited for content management, caching, high-volume, and areas requiring a flexible data structure.  That said, given the emphasis on speed and scalability it is not well suited for environments requiring complex transactions such as banking systems nor is it good for problem-specific business intelligence systems.  MongoDB also has very limited support for user security leaving the responsibility for managing security up to the application.

Additional Resources

I’ve starting learning MongoDB and will probably have more posts to go along with what I’m discovering but until then:

Reactive Extensions for .NET (RxNet)

Reactive Extensions (Rx) for .NET is another technology I’ve heard some whispers about but hadn’t really looked into.  So, what is Rx?

The Microsoft DevLabs site states “Rx is a library for composing asynchronous and event-based programs using observable collections.”  What this means is that we can now use a superset of LINQ to respond to events or other asynchronous operations in a declarative rather than imperative manner.

Rx introduces the IObservable<T> and IObserver<T> interfaces which are essentially the opposite of IEnumerable<T> and IEnumerator<T>.  IEnumerable<T> and IEnumerator<T> work with pull-based operations where there is a predefined set of data to work with whereas IObservable<T> and IObserver<T> work with push-based operations where the entire set of data cannot be known in advance.  There is also a specialized ISubject<T> interface that simplifies error handling and completion.

Joel’s first demo really drove home the point of why Rx is often referred to as LINQ to Events.  In this demo he showed a Silverlight application with a red square that he was able to drag around with the mouse.  Rather than having to respond to each MouseDown, MouseUp, and MouseMove event individually and set state flags to manage what should happen within each event handler he showed how Rx enabled handling each of those events within a single LINQ statement that would calculate and project the delta of the mouse pre and post positions and pass the delta to a separate function responsible for updating the position of the box.

Rx really offers a powerful new way to work with asynchronous and event-based programs.  I can already see a few places in some current projects where it would be really handy.  Rx also isn’t restricted to .NET.  There’s already an Rx library for JavaScript!  I’m really looking forward to getting some time for further investigation.

Additional Resources

Indy Code Camp Notes, Part 4

This is part of a four part series of notes I took at Indy Code Camp on May 16, 2009. This year’s Code Camp consisted of five tracks each with five sessions. Track topics were SharePoint, SilverLight and WPF, Data Access, MIX highlights, and best practices. These notes are from the sessions I attended.

These notes are in no way intended to replace attending one of these talks if you have the chance.

Test Driven is Driving Me Insane!

Presented By: Dennis Burton

Dennis’s talk focused on road-blocks to effective Test Driven Development and some common, practical test patterns. My notes are a little sparse on this one since it was the last session of the day and my mind was wandering a bit ;) He had a lot of good examples that I wish I could remember a bit better.

Road-blocks To Effective Up-front Testing

  • Management push-back
    • “Double the code? Are you kidding?!”
    • Project timeline impact due to code changes taking longer while tests are updated
  • Test design issues
    • Long-running tests – ideally each test should run in less than a second
    • Long-setup time
    • Fragile tests – more work is required to keep tests running when changes are made
    • Data dependency issues – tests rely heavily on data specific data, often from a production environment

Common Patterns

  • Dummy Pattern – use when an object is needed only to help construct another object
  • Stub Pattern – use when an object is needed to help construct another object and its state must be verified
  • Mock Pattern – use when testing functionality functionality instead of specific data
  • Spy Pattern – use to add validation to an object that does not implement the required validation. This is typically implemented as a wrapper class that passes values into the type being tested

Recommendations