My Track Record

I am going to unleash a bunch of articles that attack assumptions that many developers have had for years on how to develop great software.  Before I do, we should establish a track record so that everyone understands that when I say these things, I do so with confidence.

Here is just a very short list of software that has shipped with my code.

  • National Airspace System (NAS) collision avoidance, en-route metering, and fixed metering
  • Thomson Reuters Portia Portfolio Management System (now SS&C PORTIA)
  • Movement Logistics Management for Emerson
  • Fidelity’s Active Trader Pro
  • BNY/ConvergEx’s PerformEx
  • Monster.com, Reuters.com, Ebay.com
  • SharePoint and Biztalk
  • Windows High Performance Computing
  • Bridgeway LawManager (formerly just LawManager)
  • Ceres Vehicle Tracking and Fleet Management by Roadtrac
  • dashBar (yet another dot-gone called dash.com)
  • Many mobile applications that my kids and I come up with!
  • Several mobile applications that my friends and I have come up with!
  • Various Software and Plug-Ins for Mac, Hermes, Public Address

Here are some other distinctions…

  • Spent 10 years at Microsoft
  • Spent 2 years as the first Architect to a newly formed architecture team within a $112 billion asset management company with 120+ developers
  • Wrote a book on Windows Communication Foundation, Essential Windows Communication Foundation
  • Certified Master for SQL Server
  • Windows Azure Insider

My friends and mentors have accused me of not touting myself enough.  Check!  Let the attack on software assumptions begin.

Dating SignalR

SignalR!  We have used you in very small-scale enterprise applications and you have done well for us.  We tried to use you on a large scale Internet application for distributing news in real-time but your costs were twice the number of servers versus us implementing long polling ourselves.  Now we are trying to use you for a large scale mobile application on Amazon Web Services, iOS, and Android using Xamarin.  But you run away when we bring up websockets on .NET clients other than Windows 8?  Why are you so afraid of commitment?

Redis Publish/Subscribe vs. SignalR Backplane

We are currently using SignalR for our real-time communication from server to client.  Unfortunately SignalR does not scale-out very well without help.  To scale out SignalR you need to setup multiple servers and then load balance them.  You then need a backplane to forward messages sent from one server to the rest of the servers in the cluster.  SignalR supports three backplanes:  Azure ServiceBus, SQL Server, and Redis.  Well considering we are on Amazon Web Services (AWS) we will not be using either Azure ServiceBus or SQL Server.  Azure ServiceBus is just not present on Amazon and SQL Server is not available in a highly available redundant configuration on Amazon.  Of course we could setup SQL Server ourselves on a couple EC2 instances and make it highly available.  But that mean we will be doing much of the management ourselves which is counter-intuitive to running on cloud infrastructure.  The third option is Redis.  Redis suffers from a SignalR problem.  SignalR scales out by doing broadcast messaging.  That severely degrades your scalability and you will quickly hit an upper bound on the number of servers you can deploy.  So what to do?

Enter Redis Pub/Sub messaging!  SignalR uses the publish-subscribe messaging of Redis to exchange state between servers.  Unfortunately they use it to send every single message out to all the clients (i.e. broadcast).  You can go direct to Redis and just implement a publish-subscribe mechanism where clients subscribe only to those messages they are interested in.  This is the initial approach we are taking and plan to be testing this very shortly.

Stay tuned for more!

WebSockets Research-Part II

XSockets.NET how I want to love thee!  You tease me with your ways of doing websockets with .NET clients across platforms.  No longer due I have to settle for SignalR and Server-Send Events and Long Polling for my .NET clients on Windows 7 and Xamarin iOS (MonoTouch).  I can do full websockets.  Life is great!  Then you go ahead and shun my friend Xamarin Android (MonoDroid).  Why would you not offer my friend a .NET client?  What did they ever do to you?

Stream.CopyToAsync

Ever feel giddy as a programmer?  Giddy means “make (someone) feel excited to the point of disorientation”.  Years ago a friend from my Microsoft days showed me an implementation of copying one stream to another stream asynchronously.  The implementation was nothing short of amazing.  You could read from a stream while your were writing.to another stream.  Performance can be improved, sometimes significantly, if your writes are slower than your reads.  This approach also saves on memory by not loading everything into memory all at once.  Before .NET 4.5 this required a bunch of code.  While not much code on the grand scheme of things, it still was more than we wanted.  Enter .NET 4.5 and the new CopyToAsync method on the Stream class.  One method call and you have the ability to copy one stream to another stream asynchronously.  How cool is this?  Very!