Tuesday, May 19, 2015
Review: Chicago Coder Conference

Party Place Under Giants

On May 14th and 15th, 2015 the Chicago Coder Conference was held at the UBS building in downtown Chicago.  PSC Group was a sponsor of the event and had a fair sized contingency in attendance.  This post will review the good, the bad and the ugly of the conference.

Let’s start with the bad and the ugly so that we can end on a high note.  The overall organization of the conference was really bad.  It started with the keynote.  They had a venture capitalist talk about how the funding process works.  Given that most of the people there were employed by a company that sent them there I thought it was a poor choice.  Add to that the fact they timed the sessions without any time built into the schedule to clear rooms and the next speaker to setup and didn’t well publicize the Wi-Fi availability (which was poor) and it didn’t make for a good experience.

The best part of the conference was the number of quality presenters from not just Chicago, but around the region.  Unfortunately Chris Woodruff got sick and was not able to give his presentation.  This lead to a number of scheduling shuffles (which the organizers didn’t announce) where speakers dug presentations out to make sure there weren’t any time slots where you had nothing to hear about.

The best presentations were from Greg Levenhagen on Visual Studio debugging tools and Eric Boyd on architecting scalable applications.  Greg showed a number of features of Visual Studio that most developers never knew existed and can save you huge amounts of time.  Even better, since both of his machines died he used my laptop for the demo giving me some reference to go back to.

Overall, the conference was positive, but the organizers have a lot of work to make it more productive.

Posted On Tuesday, May 19, 2015 8:16 AM | Comments (0)
Monday, May 18, 2015
Advice For Speakers: Know Your Point

There Be Ghosts Here?

It has happened to all of us.  You go to a conference and sit down in a session that has a great title and abstract only to sit through a long winded talk that has nothing to do what you were sold.  As a speaker myself I find that this is a good reminder of the questions that you need to ask yourself as you prepare your material.

Each session we put together has a limited amount of time.  Review your content to make sure that every point you make has some bearing on your stated subject.  Is each example or slide going to give the audience a better understanding of the topic?  One of the best ways to do this is to start with an outline as this gives you simple bullet points to review.

The next step is that each slide or demo should relate back to those bullet points from your outline.  As each slide is completed make sure that you review the content to make sure you haven’t strayed from this outline item it was intended to cover.

Finally, do a practice run with someone who can give you objective feedback.  This will give you a way to know how things are shaping up before people start walking out of your talk.

None of these suggestions should be new (you probably heard them in high school speech class), but reminders never hurt.  Follow these suggestions and you are one step closer to a successful talk.

Posted On Monday, May 18, 2015 9:54 AM | Comments (0)
Friday, May 1, 2015
Build 2015: Day 2 Keynote


As with any second day keynote, day two of Build had less fan fare and new announcements than yesterday.  Today it was all about doubling down on the message and showing a little more. 

The one message that I think went horribly wrong was the opening video.  It was all about how Microsoft in the past hasn’t been open and companies didn’t think they could trust them, but now a new leaf has been turned over and they are who companies want to work with.  While there has been some of that viewpoint in the past I don’t think it was a majority viewpoint.  I even had a manager tell me one time “You will never get fired for going with Microsoft”.  I think they should have highlighted their increasingly open stance and let this minority view fade.  They really need to get some marketing people who know what marketing is.

Steve Guggenheimer and John Schewchuk ran the show for day 2.  They very quickly and with what didn’t seem to be much rhym or reason went through videos from QuestLove and PropellerHead followed immediately by AutoDesk and Acumatica representing commercial applications.

David Treadwell came out and things got to what you expect from a keynote: information.  The main message being presented is that Windows 10 is one united front.  What they described was akin to magic where developers can write one piece of code and the platform will optimize a variety of features such as menus for the device and mode that you are using it.  If this materializes well in the final product then life will be getting easier for developers.  As proof that they have put some serious work into this release he informed us that over 2500 new features have been added to the development platform.

For a while after that David and Kevin Gallo played tag team presentation.  As a developer I was encouraged by how familiar I was with the concepts of the canvas and map controls that Kevin demonstrated and amused when he tried to wipe away a line he drew on the Surface Hub with his hand like it was a normal whiteboard.  The interesting aspect of the map control he show was that it seemed it had data binding capabilities.  This could make for interesting possibilities.

My funny bone was tickled further when during Kevin’s demonstration of making a slideshow for an app I noticed that the image he was using was of a bathroom with the toilet next to a floor-to-ceiling window.  Remind me to look closely at my own images when doing a presentation.

The cool factor rose when they showed the architecture app being run on both Xbox and Hololens with the appropriate user interaction paradigm on each device.  Mark this as another win for developers.

We got to see more of the new Edge browser which it was confirmed runs on the EdgeHTML engine.  A point was made that this browser is all about user experience.  They have made over 4200 interoperability improvement and it performs better than any other 64bit browser.

Where as yesterday they announce the bridges to universal apps, today they showed them.  From adding the ability for a Win32 app to make toast notification to the converted LoseIt Android app to converting iOS projects into Visual Studio Universal App project, we made our lap around demonstrations of these abilities.

The most charismatic speaker of the day was Joseph Sirosh.  With comments like “AI meets AI (artificial insemination)” he kept the crowd laughing and still managed to educate us about Azure Learning.  Of course that comment was in regards to the fact that farms are now using Azure learning and pedometers on cows to tell when they are in heat so that they can get better pregnancy rates.

His other demonstrations did not disappoint either as he showed us different ways that the BizTalk-like-orchestration in machine learning could predict March Madness outcomes or leverage APIs from to detect faces and determine how old they were on

Steve and John came back out and showed us an amazing DirectX 12 demonstration where the rendering was so life like that you thought you were watching a film.  It was only after the keynote that I found out the amount of computing horsepower they had on stage to make it work.

The last demonstration was for the capability of creating Minecraft Java mods in Visual Studio.  It’s lost it’s lustre as we were insulted by the presenter and teenage developer on stage who evidently didn’t realized that everyone in the audience was a developer and knew what intellisense is and how to code.


For myself I think the day 2 keynote was a bust.  I think Microsoft did itself a disservice with poor marketing videos, weak content and poor speakers.  There were moments that impressed and some presenters that improved our understanding of this new Windows world, but they need to do better next year.

Posted On Friday, May 1, 2015 8:56 AM | Comments (0)
Thursday, April 30, 2015
Build 2015: Day 1 Keynote


Build is always one of the most exciting Microsoft conferences.  Have of the fun is trying to guess what will and won’t be announced.  Will the analysts be right or will there predictions be off in left field?  So what happened day 1 this year?  Of course that depends who you ask, since no one goes to the same sessions or sees things through the same filter.  This post will cover the keynote and a future post will cover the day 1 sessions.


The keynote is always a rollercoaster.  Anticipation.  Surprises. Disappointment.  This rollercoaster was operated by a cast of most of us are familiar and I run it down as we go.

The first disappointment came before the session started.  The line to get into the room snaked up all three floors of the Moscone Center.  I’m not sure what the delay was, but It took forever to get us in.  Little things can put a damper on the experience.

The presentation began with a feel good fluff piece.  At one time it would have been impressive to have someone create a pen driven app to take music notation, but at this point I’m not wowed.  I’m not trying to belittle his work, but I think they should have found something that really showed off new features of Windows.

From that point Satya Nadella laid out three areas of transformation that they would cover today: Cloud, Office and Windows.


Bring on the Gu!  Scott Guthrie came out to lead the charge for the cloud announcements.  I was impressed by the facts he presented:

  1. Azure has more data centers than Google and Amazon combined
  2. 500+ new features have been added to Azure in the last 12 months
  3. 90k new Azure subscriptions per month
  4. Microsoft is the only company with an offering that combines both on premises and cloud resources that create a complete solution

Other announcements that I though made an impact include:

  1. .NET Docker packages are able to be deployed to Linux servers
  2. Linux deployments can be debugged via Visual Studio
  3. Introduction of Visual Studio Code edition for Windows, Mac and Linux
  4. Azure Service Fabric
  5. SQL DB now has transparent data encryption, full text search and elastic database pools
  6. Azure Analytics has expanded include the new offerings SQL Datawarehouse and Data Lake
  7. Both Ford and the NFL are using IoT and Azure to collect and analyse data

In all Azure Dominated the keynote.  There is too much to go into the details here, but it is clear that this has become the most important part of Microsoft’s business.


Office almost seemed like an afterthought thrown in to make it look like there was more going on.  It seemed like they rushed through it.  Rob Lefferts came out and quickly how the capability to use the same capabilities everywhere was central.  Every product in the suite is focusing on integration that reminds me of the contracts introduced in Windows Phone and Windows 8.  You can grab contact information from LinkdIn or SalesForce or images from

When they went into the Office Graph, Delve and the Skype web SDK topics they were moving so fast it was hard to keep up.  They should have either gave them equal time or split them out into their own announcements.


While the Azure announcements impact my job daily, I knew that the Windows announcements would speak to the spirit of Microsoft.  Satya came out saying a lot of the right things.  He spoke about making Windows more personal, having one development platform no matter the device and having one store.  Of course the cynic in me feels that if they wanted Windows 10 to be more personal they would have left the features that were in Windows 8 instead of going back to the Windows 7 way of doing things.

When Terry Myerson came out he was hitting most of the right notes too.  He talked about making the OS the most attractive development platform.  Again, my thought was that more important is to make it attractive to the end users, but that means getting developers and companies to put more top notch apps in the store.  Looking at it that way I’m on board.

He then itemized their promise to the customer:

  1. Apps should be easy to be discovered
  2. Apps should be easy to install and uninstall without junking up your system
  3. Payments need to include multiple method and they should be convenient and trusted
  4. Carrier billing for apps will soon be available and not just for phones
  5. There will be a store for business that will allow for control of app distribution as well as payments by PO

This is part of their strategy to get Windows 10 adopted quickly.  Myerson indicated that they want to have 1 billion (yes billion) users within 2-3 years.  A lofty goal for sure, but if they are going to right this ship that is the type of goals they need to have.

I think many attendees were happy to see universal apps extended to Xbox One during the USA Today demo.  This is something many people have been hoping for.  This was followed by a blitz of four developer announcement.  Each was more impressive than the next, even if most of them work expected.

The first is that web application can be registered with the Windows Store.  Once this is done the web app runs inside an application frame and gains many of the capabilities of a Windows app including features such as notifications and in-app purchases.

Second, bringing Win32 .NET apps into the store.  The main example was Adobe Photoshop.  This is made possible by application virtualization and will keep the ecosystem more reliable because the apps will be isolated.

Ways number three is that now you can reuse you Android Java/C++ code.  This is a better option than the running of Android apps on Windows which everyone had expected.  This allows the app to use the Windows APIs and other goodness, makes life easier for people who write for Android, but doesn’t take away the independent nature of Windows.

The fourth way was the most shocking and garnered the most discussion after the presentation.  You will now be able to bring your iOS Objective C code into Visual Studio and have it work on Windows and use the native goodness.  All four of these are helpful to giving Windows 10 the best chance possible of rising from the ashes that it is in right now.

Then came the announcement all the attendees were waiting for: the give away for the conference would be a HP Spectre x360.  An impressive piece of hardware that we will have to see if it stands up as a development machine.

Joe Belfiore then took the stage, but with less focus on the phone than we are used to.  He introduced an optional feature of Windows 10 that will spotlight features that a user hasn’t tried on their machine yet so that they can learn all the productive features available.  This coupled with the fact that Cortana can now use application contract to perform more operations on your behalf without actually opening the app is a wonderful differentiator for Windows 10.

The we finally got to find out the new name for Project Spartan: Edge.  I can’t even tell you what meaning Joe said it had in their eyes.  All I could think was that I was pretty sure that was the name of the rendering engine under the hood of either Project Spartan or IE.

Joe ended his portion with a demonstration of Continuum for phones.  This give you the ability to turn you phone into a fully functioning work station by adding a second screen and bluetooth input devices.  While I don’t see many scenarios where I would use it the feature could be helpful to a certain segment of mobile workers.

Last came the Hololens.  Alex Kipman and a cast of helpers demonstrated more of the practicle feature.  One that really stood out for me is the “follow me” command where you can have a floating application window like a video follow you and then pin it when you stop.  It was then announced that they had brought hundreds of Hololens devices to Build and you could sign up for a limited number of demos.  This brought an audible groan from the audience who had been hoping to take one home as a give away.


In all the keynote was long (ran over by 30 minutes) but packed to the bursting point as you would expect from Build.  I see promise in the technology that Microsoft is presenting, but it is yet to be seen if they can capture the imagination and wallets of the general public.  Only time will tell.

Posted On Thursday, April 30, 2015 8:52 AM | Comments (0)
Wednesday, April 22, 2015

Nothing but bones

Monsters are an exciting thing to see in a movie.  They are not so thrilling in your application architecture.  I recently came up with (or at least I think I came up with) a term for architectures that are put together with mismatching parts and in ways the software gods never intended: Frankenstein Architectures.  A co-worker then evolved that to Frankentechture.

Of course the designer of a framework or an application platform can’t envision every possible use of their creation.  How do you know then when you are just using it in a new and inventive way and when you are creating a Frankenstein monster?  Read the documentation of the author’s intent, see where it performs best and where the maintenance story is the best and then don’t stray far from those boundaries.

Another thing to think about is if you are using patterns just because you read them in a book and it sounded good?  Are you adding them to the application just because you saw them at the latest conference?  Are you spending days and weeks finding ways to get around the limitations of pattern? Do your developers require a 500 level course to make a simple change to your code base?  If you answered yes to any of these then you might have brought a Frankentechture to life.

There is a time and place for adding complex patterns or work around for a limitation in a framework to your solution.  Before you do that though, ask yourself if the problem might be that you are using the wrong toolset or have wrong design pattern for your situation.  If you can identify this as a possible problem early in the development process your can save yourself a lot of grey hair and your company a lot in maintenance costs.

So my call to action is to question every design decision.  Apply the YAGNI principle where ever possible and don’t add complexity before you have a compelling reason to do so.  Choose the architectural components that work well together and best suit your requirements.  If you do this you can assemble a hero instead of a monster.

Posted On Wednesday, April 22, 2015 3:05 PM | Comments (0)
Wednesday, March 4, 2015
Creating Azure WebJobs With The WebJobs SDK

BusseWoods20140924 (29)_1

The move to the cloud of many applications means that we have to learn new approaches to solving old problems.  One common problem that most developers face at one point or another is background processing for web sites.  In the past the solution would have often been to build a Windows Service and install it on a machine.  Of course if you are using Azure Web Sites to host you application you do not have access to install services.  Depending on what you need to accomplish WebJobs are the solution.  This post will discuss the basics of creating and deploying an Azure WebJob.

First you need to determine what type of WebJob makes sense to you.  There are the ones that are triggered by Azure events and those that are scheduled.  The ones that are triggered revolve around queues and data put into Azure storage.  These are generally referred to as continuous.  Conversely, if you have code that needs to be performed but is not based on an Azure resource then it is scheduled similarly to how we schedule tasks on a Windows server.

The main difference between the way triggered and scheduled WebJobs are coded is based around using the JobHost class and the Functions class.  In the Main method of a triggered job the RunAndBlock method of the JobHost object is executed as shown below.  This allows the job to run continuously.  

static void Main()
    var host = new JobHost();

The actual work is done in a method of the Functions class.  The parameters of each method define the if the function is triggered by a queue entry, a new blob storage or other resource.  This example is actually the default that is generated by the project template.

public static void ProcessQueueMessage([QueueTrigger("queue")] string message, TextWriter log)

The easiest way to write a WebJob that will run under a schedule is to simply remove the code in the Main method and put in your standard .NET code to perform your tasks.  At the same time you can remove the Functions class since it will not be used.

Set connection strings in the app.config for dashboard and storage to the name of your storage account and the storage account secondary access key.  They should look like the following configuration snippet. 

<add name="AzureWebJobsDashboard" connectionString="DefaultEndpointsProtocol=https;AccountName=StorageAccountName;AccountKey=StorageAccountSecondaryAccessKey" />
<add name="AzureWebJobsStorage" connectionString="DefaultEndpointsProtocol=https;AccountName=StorageAccountName;AccountKey=StorageAccountSecondaryAccessKey" />

They can be found at either of these two locations depending on the version of the portal you are using.



There are two ways you can deploy your WebJob to your Azure WebSite.  The first is to use Visual Studio.  The other way is to zip up your bin directory for you executable and upload that through the Azure portal.


Ultimately WebJobs are pretty easy to create once you find the basic information around their development.  Learn them and make your scalable cloud solutions on Azure more robust.

Posted On Wednesday, March 4, 2015 8:54 AM | Comments (0)
Wednesday, February 18, 2015
Everything Isn’t Fixed With Another Layer Of Abstraction

ChurchillWood20141020 (24)_1

Many developers say with a sarcastic tone “You can fix any problem with another layer of abstraction”.  The question is if there is any truth to this.  While abstraction can increase reuse, flexibility and testability it comes with a cost of complexity in readability and maintainability.  If a developer has to spend a week learning how all the pieces of an application are put together there better be a payoff.  Always ask yourself “what do we gain” when adding a new factory or dependency injection?  Is there a proper return on investment?  I’m not saying don’t add abstraction layers.  Be pragmatic about it.

Every pattern has its place, but don’t overuse them.  If the requirement of your application is to be able to dynamically plug in a nearly infinite number of modules then a set of interfaces and a generic dependency injection approach might be the way to go, but don’t start there.  If that requirement isn’t there don’t use patterns and abstraction layers because you “could, possibly, maybe” need it at some point in the future.  Live by the rule “You’re not going to need it”.

I don’t know how many times I have seen code where there is a layer in between your business and data layer that does nothing but call the data layer and pass it back to the business layer without adding any value.  Each piece of code needs to have a purpose.  If you can’t explain what that purpose is then you need to refactor it out.

Walk through your code and see how many times you need a cheat sheet to know what object you are referencing or what the business purpose of a piece of code is.  If you are confused by your own code you may have gone too far.  Have someone else walk through your code and see what questions they have and how long it takes them to understand what you have built.

At some point in the future your code will have to be maintained either for enhancements or bug fixes.  Consider how much effort those changes will cost in time and effort.  Do those costs fit with the requirements of your business?  The lesson I would hope to impart is that abstractions should be used and not abused.  Keep this in mind as you design and it may just save your sanity.

Posted On Wednesday, February 18, 2015 8:49 AM | Comments (0)
Thursday, January 29, 2015
Windows 10 – Going Backwards


I’m not sure how, but I seem to be an outlier in this point of view.  I am finding that almost everything they are doing to Windows 10 to make it more acceptable to the masses is taking away features that I preferred in Windows 8.  It isn’t that I thought everything was great and didn’t need to be improved, but these are features that I found at the very least useful and in most cases efficient.  I’m just going to hit on the big ones here.

Let’s start with the left swipe gesture.  In Windows 8 this gave us the ability to rotate through open applications.  In most cases what you are looking for is the first previous application used.  This meant that a single swipe would bring you back to that application.  Now you have an old Windows 7 Alt+Tab screen that pops up and sticks there.  You then have to pick which screen you wanted.

Another feature that I liked with the modern apps was mutually adjusting snapped apps.  If you had two apps snapped side-by-side and adjusted the border in between them both changed size.  Since the apps are now on the desktop this no longer works.

The new Start menu/screen is confusing and needs a lot of improvement.  Managing tiles needs a book to understand it.  There is a grouping structure, but there is no tip or visual queue to how it should be used.  On top of that the old start screen used to have a alphabet based jump feature that made it easier to get to parts of the All Apps screen.  This is not currently there which means the All Apps list is useless if you have more than 10 apps.  At that point you might as well just do a text search for what you want to run.

Now for the touchy subject.  I have always been a fan or the charms.  I’m not attached to the charms bar, and I’m glad they didn’t get rid of these contract.  The search and share features are one of the best features of Windows 8.  They have moved them to a button in the title bar of the apps which are near impossible to use on a touch device and are even harder to discover than the charms bar.

Don’t get me wrong.  I do like Windows 10 over all.  The new notification center is a nice addition.  I’ll be patient and see how things shake out over the rest of the preview, but right now I am frustrated..

Posted On Thursday, January 29, 2015 1:11 PM | Comments (1)
Thursday, December 11, 2014
Rejuvenate Your Career

Matthiessen20140613 (157)-3

We can all get in a rut after years in this industry.  We get comfortable doing what we know.  The problem is that technology does not stand still.  If we don’t keep reinventing ourselves then we will eventually find that we don’t have the skills that the industry requires.  This is so important an issue that I often ask prospective employment candidates how they keep up with technology.  So what is my answer to rejuvenate your career?

Because I spend most of my time developing solutions for the Microsoft technology stack my examples will be bent more in that direction, but the basics stay the same regardless of the technology.  The the keys for me are to keep informed, pilot, get certified and teach.

Keeping informed in this day has a lot of possible avenues.  Podcasts, blogs, Twitter and dedicated web sites give you a variety of sources to keep up with what is coming out.  At first grab everything you can find and then scale your sources back to just the ones that give you the most information for the time you invest.

You also need to get your hands dirty.  Pilot new technologies you are interested in or see as affecting the future for your company.  In the Microsoft arena there you can now get Visual Studio 2015 for free and the developer license for mobile development is a one time fee.  The greatly reduces the barrier to experimenting with the latest technologies.

The next thing I would suggest is go and get certified.  This isn’t so that you have the piece of paper.  To me certs are near worthless in their own right.  What they will do is expose you to the deepest, darkest portions of a product.  This will give you an understanding level that will give you a leg up on those around you.

The last component is to teach.  This is some times the first thing I do, but first or last it is a great exercise.  Whether you blog, produce your own podcast or speak at industry events, you need to know your subject to talk about it.  You will find out how true it is that the teacher always learns at least as much as the student.

Don’t get me wrong.  It is ok to coast some times.  As a matter of fact you can burn out if you are constantly in a mode of drinking from the fire hose.  Just make sure you do some of these things on a regular basis to keep your skill viable.  It will greatly improve your longevity and your value.

Posted On Thursday, December 11, 2014 2:43 PM | Comments (0)
Monday, November 3, 2014
Windows 10 Tech Preview–First Impressions

Screenshot (7)

This post is my impressions of Windows 10 after a couple of weeks of use.  First let me set the stage though.  I have been using Windows 8 since the RC.  So I am very comfortable with it.  At the end of my first 30 minutes with the Windows 10 Technical Preview I was screaming at my Surface Pro “What idiot asked for these features”.  Of course after using it for a while that has subsided.

The upgrade worked seamlessly on my generation 1 Surface Pro.  All my apps showed up, both Store and desktop apps.  There was a slight hicup with the first launch of the OneNote Store app, but other than that it has been pretty smooth.

Two days after I installed the technical preview I was already installing the second build.  This made the things a little more complicated with not being sure what might change, but even that left the system stable and all apps ready to use.

As for the features, I am not a fan of the Task View.  If you like the Alt+Tab experience in Windows 7 then you will feel comfortable here, and if I hadn’t already grown accustom to Windows 8 I would too.  But as I have it feels clunky.  I have really found that at least on my Surface Pro I prefer to be able to swipe in from the left to rotate through my apps.  If I could left swipe with both desktop and store apps it would be perfect.  The other thing this change doesn’t take into consideration is touch mice.  The one I like to use has Windows 8 gestures and the new Task View would hurt there.

Another thing that I miss in Windows 10 is the way that Store Apps snap in Windows 8.  You can get both desktop apps and Store apps to snap to either side of the screen and it will go to half screen.  The problem is that once I have two apps up I’d like to resize them to change the percentage that each app takes up.  So far I haven’t found a way to make this work. I think it would also be great if we could continue to be able to drag windows with touch if I have a touch capable machines.

I do like that the Charms bar is not showing up when the mouse moves to the corners but I’m glad to see it is still there.  Joe Belfiore mentioned that this would not stay in its current form.  We will have to see what they come up with, but the basic capability and ease of use should stay.  My guess would be that the rest of the charms icons may show up in the task bar like the search icon is now.

The next item that aggravates me is the menu.  I want to be able to see a larger number of live tile.  Ultimately I want my start screen.  Fortunately Microsoft has given us some options.  You have the ability to revert back to the Start Screen instead of the Start Menu.  This requires closing all of your apps and logging out, but I’m able to live with that.

There are some interesting changes in Windows Explorer.  Having Frequent Folders and Recent Files sections display along with your drives on the home view is an interesting feature.  I’m not sure how much I will use it, but it isn’t too intrusive and can be collapsed.

There are other features that I haven’t played with such as the Virtual Desktop.  As I work with Windows 10 more and they make further updates I will try to post more reviews.  For now my opinion is that these features may make sense to people who have never experienced real productivity, but even on my laptop without touch I would prefer the Windows 8.1 experience.  Thankfully Microsoft is giving everyone the chance to put their 2 cents in with the Feedback app.  If you have an extra machine I would suggest downloading the technical preview and letting everyone know what you like and dislike so that we hopefully get the best Windows 10 possible.

Posted On Monday, November 3, 2014 3:56 PM | Comments (0)
Wednesday, October 1, 2014
Teaching Old Dogs New Tricks

Backyard20140918 (9)_1

Old developers can easily get set in their ways especially if they work in one environment for a dozen years or more.  So how do you overcome the “that is the way it has always been done” mentality that sets in?

The first thing you have to do is be patient.  Don’t try to force them to change all at once.  Too much change at one time can be a shock to anyone’s system.  Gradually introduce new ideas and new techniques. 

The next thing you need to do is to make sure that you demonstrate examples and explain how the changes will benefit them in their daily work.  One of the main resistance points is that people don’t understand why change is needed.  If they can see the payoff they can more easily make the transition.

The most important thing you can do though is get management’s support.  This does a couple of things.  First it gives you a fall back when you encounter resistance.  Secondly it relieves the existing developers of the mental responsibility for old habits.  They are just doing what is expected of them.

Even with all this said thing aren’t likely to be smooth sailing, but at least you will have a fighting chance.

Posted On Wednesday, October 1, 2014 10:08 AM | Comments (0)
Friday, August 1, 2014
Getting Started With WiX


Up until this week I had not even heard of WiX (Windows Installer XML Tools).  As with most open source projects I found myself spending a large amount of time trying to find resources to explain how to use this tool.  I figured if I was struggling there might be a few others that could use some help.  In this post I will cover a number of topics to get you started with WiX.

First thing you need is the toolset itself.  You can get it here.  Once you run the install be sure to restart your machine so that the new templates will show up in Visual Studio.

Now that we have the tools you are on your own.  I found a video that gives you the absolute minimum information required to create the equivalent of a “Hello World” install.  Of course there are a number of things that the video does not cover and I will address a couple of those below.

The WiX toolset has a set of default dialogs, all of which are customizable.  The one that I think is useful to the most people is WixUI_InstallDir.  This simply has the user accept a EULA and then allows them to set the install directory for your software.  This feature can be added by including the WixUIExtension assembly and adding the following namespace attribute to the Wix tag in the wxs file.


When you use the Install Directory extension it comes with a generic license.   You can customize it by simply adding an RTF file with your text and referencing it in the main wxs file inside the product tag.  It looks like this.

<WixVariable Id="WixUILicenseRtf" Value="MyLicense.rtf" />

Likewise the banner image at the top of the installer can be changed with a similar entry.

<WixVariable Id="WixUIBannerBmp" Value="..\Secure PDF\Library\Banner_PwC.bmp" />

Additionally you may want to check if a particular version of the .NET framework is installed.  The simple setup template allows you to do this if you reference the WixNetFXExtension assembly and add its namespace reference.  If you want to actually install a framework you need to use Bootstrap project template.  In order to do the actual check you will need to add the following tags.  The location doesn’t seem to matter but I put them inside the product tag.

<PropertyRef Id="NETFRAMEWORK20"/>
<Condition Message="This application requires .NET Framework 2.0. Please install the .NET Framework then run this installer again.">
  <![CDATA[Installed OR NETFRAMEWORK20]]>

In all WiX is a very useful and flexible tool and since Visual Studio 2013 no longer provides installer projects you will need to learn these tools.  Hopefully these hints will help you get started.

Posted On Friday, August 1, 2014 3:09 PM | Comments (0)
Thursday, July 10, 2014
JSON: The Good, The Bad And The Ugly

Over the past several years JSON has become the darling of service message standards.  These days you are shunned if you offer a SOAP service.  The more I use JSON service though the more I question if they are really the answer.

The Good

The main feature of JSON that makes it attractive is size of the data over the wire.  The structure tagging method is a more compact that that of SOAP/XML messages.  For high volume or large message services that could be a critical performance improvement factor.

The fact that JSON was created for use in Javascript also makes it ideal for client side development.  So if you develop with a heavy client Javascript coding you will be pretty happy.

The Bad and The Ugly

I have three main complaints about JSON.  The first is discoverability of services.  Traditional SOAP service have a WSDL service definition associated with them that gives you a list of all the methods in the service and the structure of the calls and returns.  Now if you want to obscure the methods you are publishing then JSON is the right tool for the job from what I have found so far.  If that is not your goal then you better have very complete documentation that is easily accessible to developers.

My next gripe is about readability.  One of the stated goals of the standard is to make it human readable.  I would argue that it can be readable it is only if you tools that will format the message for you.  I’m not saying that it is less readable than XML, but most development tools have formatters built in for XML which is not the case for JSON.  For the moment that means it is harder to inspect JSON messages.

The last thing that frustrates me about JSON are the available tool for interacting with services within Visual Studio.  We can serialize JSON messages, debug through them and even past messages as classes, but we still don’t have tools to make service proxies the way we do SOAP services unless they are part of a WCF service.

The Lesson

If you are creating services for general consumption you should take into account who will be leveraging them and what tools they have available.  Make their life as easy as possible by either providing a discovery mechanism or at the very least complete and up to date documentation.

On the other side, if you are a consumer of JSON services you need to invest time in discovering the tools and techniques that will allow your development to be successful and painless as possible.

In the end we are stuck with JSON until the next defacto standard comes along.  Whether you agree with its appropriateness you need to become well versed with its usage from whatever platform you develop for.

Posted On Thursday, July 10, 2014 2:00 PM | Comments (4)
Thursday, May 8, 2014
Enhancing Your Model In MVC 5


Simple views in ASP.NET MVC 5 are simple, but once you start getting a lot of conditional content formatting in the view things can get very messy.  Once you get to the point where your Razor code has way to many if/else blocks and they start repeating you have to come up with a way to abstract and simplify your code.  I looked at functions and partial views as possible solutions.  Both of these have their place but an alternative that you may want to entertain is implementing your model as more than just a DTO (data transfer object).

The advantage that that this approach gives you is that you can more directly take advantage of the data in the model.  If you create a function in Razor you need to either have page variables or pass in a number of parameters to accomplish the same ends.  You can use the return value of your methods to set attributes in your HTML or simply to compress your code.

This does break the MVC pattern strictly speaking, but as I always suggest you should use standards as guidelines and not absolutes.  Follow the pattern as long as it makes sense and when it gets in the way do what needs to be done to achieve your goals.  This is one alternative for a specific problem type.  Use it for what it is.

Posted On Thursday, May 8, 2014 3:57 PM | Comments (0)
Monday, March 24, 2014
Project Spark Maze Making Technique


When I first started creating Project Spark worlds I would try to build a mountain and then tunnel through it to create halls and rooms.  This really became a test of patients.  Once you have created a narrow space with ceilings it is hard to get your camera in the right place to know which direction your tunnels are heading, how close you are to the outside of your terrain and good luck placing props.  The solution is actually pretty simple.  Use the Add tool with the cube brush and make your corridors and rooms with an overhead camera as displayed above.  Once you have the first level laid out paint the room floors and wall, add props and light sources.  From there you can then use the Add tool again to create the next layer of your maze which creates you ceilings of the first level as you go.  I realize this isn’t anything amazing, but sometimes it is hard to see simple solutions.  Enjoy

Posted On Monday, March 24, 2014 9:04 AM | Comments (0)

Tim Murphy

Tim is a Solutions Architect for PSC Group, LLC. He has been an IT consultant since 1999 specializing in Microsoft technologies. Along with running the Chicago Information Technology Architects Group and speaking on Microsoft and architecture topics he was also contributing author on "The Definitive Guide to the Microsoft Enterprise Library".

I review for the O'Reilly Blogger Review Program

Technorati Profile
Tag Cloud