Google+

What is the Internet of Things?

IoT.

Internet of Things.

The trillion dollar question is "what is it?". I've heard answers ranging from "a way for your refrigerator to push data to your phone" to "anything data related".

I just attended the Internet of Things World Conference. The attendees and companies were as diverse as the answer to that question. Chip vendors, cloud providers, IoT branded companies, sensor providers, integrators, and product vendors.

The mere existence of the event and companies branded as Internet of Things represents the growing mindshare and buzzworthiness. A clever name may be all that is required to get companies to rally around it. Don't take that statement too lightly. I really think the branding is important here. We've seen it before, "the cloud", "AJAX". All of these are technologies that were not new when the term was created, but the mere existence of a term pushes it forward.

So what is it?

What is IoT to me? I focus primarily on manufacturing. The majority of my career has been spent creating software that powers manufacturing. In the context of manufacturing, IoT represents a new economic proposition for sensors, control hardware, and data processing. Sensors are getting cheap enough to measure, and later analyze the data later to create interesting models. We finally have Internet connections that can push much of this data to a central repository. To process the data, we now have proven elastic cloud platforms that can scale down to a small shop, or up to the largest companies in the world.

Manufacturing seems ripe for the picking. Lots of potential for data collection and lots of low hanging fruit in terms of analysis and ROI.

This doesn't come without a unique set of challenges. From a hardware standpoint, the environment is a nightmare. We need to contend with dust, humidity, temperature extremes, vibration, and a reflective wireless environment.

Manufacturing tends to move very slowly. At the end of the day, they have product to produce. Modbus, the de facto standard for industrial communications, was developed in the 70's. It's reliability and interoperability has been time proven. For an IoT solution to be successful, it must be able to augment, not replace these existing solutions. Now, throw in multiple layers of networking, only 1 of which has direct internet access, and that internet access is likely slower than what you have at home.

Once we jump through all of these hoops to get data out of the facility, now we have to operate at cloud scale. The platform must be secure, scalable, and reliable. At Microsoft, there are a lot of efforts to make these processes as easy as possible.

Be sure to watch the presentation by the Azure Service Bus team where they talk about how they're ingesting data at scale.

Azure Data Ingestion

You're going to hear myself and others talk about data until we're blue in the face. Meaningful, actionable data is what we get out of all of this. Once we can centralize the data, we can do things like cross-facility benchmarking, predictive analysis to keep less parts on hand, actionable enterprise-wide data. Historical data is nice to have, real-time information is great, and accurate predictive data is game changing.

You won't hear me talk often about IoT security. The reason being that it must be present throughout the entire system. As a user of the technology, I don't want to think about security, but I want it to be pervasive and invisible.

What about Residential?

I have a lot of people ask me about how IoT fits into the residential space. As a person who has a mile of Cat 6 in his house, and a wireless network with over 20 devices including 3 thermostats, I want IoT to be ubiquitous more than anybody. Unfortunately, there are a lot of great niche products on the market today, but nobody has a good "system". If someone does, I don't see it.

Why doesn't my security camera help the Nest know when I'm home? Why don't my lights turn on when I walk into the bathroom? Why can't I choose "scenes" from a wall mounted panel or my phone? Why can't I see a comprehensive environmental map of my house? Why doesn't my house know when pollen levels are high so I can take my allergy medication? The truth is that most of this was possible in 1985.

This automation has a touchscreen to control the entire system.

Temperature Control

Temperature Control

Security

Security

Irrigation Control

Irrigation Control

HVAC Control

HVAC Control

This should be blowing your mind right now. This was nearly 30 years ago, and this house did much of what we think we want today. Time of day controls, security, HVAC, even irrigation, all in a relatively intuitive interface.

Want to build a system like that today? Head over to SmartHome.com and you'll find everything you need.

The problem is that most people are waiting to see who is going to win the battle for the home. It could be Apple, Microsoft, Google, or it could be anyone else. The thought of any one company with exclusive control should be terrifying.

OK, so maybe customers aren't looking for features, maybe we can motivate them with money? For example, running their washing machine during off-peak hours

I've spoken to residential energy providers, and the message is always the same. For consumers, the decision making process is more emotional than logical. I remember when fluorescent light bulbs were free or close to free thanks to energy rebates. Even at the price level near $0, it wasn't enough motivation for many people to switch and they instead chose the default of inaction. The same goes for old refrigerators, dehumidifiers, and water softeners. Investing in a new fridge will often pay for itself, but the owners keep the old one and lose money in installments.

The best thing about standards is that there are so many to choose from.

The only way we'll get over the current hump is to start seeing a clear pattern of interoperability. Consumers and businesses alike need to feel like they're making a long-term investment. Paying money to solve a single problem may work in certain niche cases, but will never realize the full potential of this market.

This is only the beginning.

Brent Stineman, a colleague and friend, has a follow-up/response that you should check out here

Like this post? Please share it!

See a mistake? Edit this post!

1 Year at Microsoft - A Retrospective

One year ago today, I started my journey as a Microsoft employee. It has been one of the most interesting and exciting years of my career. I thought this would be an ideal time to take a look back. Let's go back in time to before I started.

M&M's (it's tradition to bring in 1 pound of candy/M&M's for each year anniversary)

I have a long history with Microsoft products and development tools. I loved the company long before working here. When a former colleague and now Microsoft employee suggested applying for an open position, I couldn't pass up the opportunity.

The Interview

Interviews at Microsoft are legendary. Famous puzzles and white-boarding challenges have made the process famous enough for someone to write a book about it.

After passing multiple technical phone interviews, they flew me out to Redmond for a "loop", which is a series of diverse interviews.

As I arrived at the airport to fly out, I got call from my wife telling me that my oldest son had fallen "off" our staircase. He didn't fall down the staircase, he literally fell over the handrail to the floor below. We kept calling each other for updates as the ambulance arrived and took him to the hospital. It was really difficult to make the call if I should go back home, or catch my flight to the interview.

Right before the cabin door closed on the plane, I got the call that there were miraculously no broken bones, just bruising. I decided to continue with the flight to Redmond. Kids are amazing healers, and he was back to school in just 2 days.

I won't go into a lot detail about my interview loop, but I will tell you it was the most comprehensive, well-rounded set of interviewers and interview topics that I've ever faced. I believe the key to a good interview is to not treat it as an interrogation. It's much more useful to both parties to have engaging discussions. I had some whiteboard discussions, and even had some disagreements about technical topics.

I got my questions answered, although the MS org chart itself can be very intimidating to outsiders, so you never fully understand what you're getting into.

At the end of the loop, I ended up having an amazing discussion with John Shewchuk, one of the "technical fellows" in the company. A title given to a select few technical leaders within the company. He was the last gate to getting an offer.

Drinking from the Firehose

The tales of drinking from the proverbial firehose are absolutely true. The amount of information available, on the Intranet, distribution lists, roadmaps, presentations and the smartest people I have ever met, provide you with everything your brain can absorb. Your constantly encouraged to move outside of your comfort zone, expand your knowledge, and find your particular niche.

I recently watched a Pluralsight video titled Developing a Killer Personal Brand. One of the core concepts was to realize what you want to be known for. In my case, I specialize primarily in Azure, so I've been trying to focus on how to create the right taglines and introductions so that when I'm speaking with someone, they understand what my main focus is.

Working Here

Working here is amazing. Since my assigned partners are located at various locations across the US, I'm fortunate to be able to work from my home. I have a great home office setup and for the most part I keep regular work hours. When my doors are closed, my kids know that daddy is at work. It takes a lot of adjustment going from working in a busy office to working at home. The advantage is that I have a 5 second walk to work, and everyone is a Lync call away. The downside is missing the hallway discussions, and being able to walk down the hall to get a question answered.

A couple of times per year, I go to Redmond for "sync week", a time when we work together to learn and share experiences to help us work more efficiently. These weeks are highly valuable, and it's my chance to hear the information I don't hear in formal meetings.

Microsoft Campus Map

The Redmond campus is unbelievable. The 140+ buildings are top notch and run like clockwork. Getting between buildings is as easy as summoning "connector" car with your phone. Within minutes, it shows up and takes you to your destination using a computerized logistics system. The free soda/coffee is on every floor of every building. The commons has dozens of great restaurants, as well as cellular stores, a salon, bike shop, tech support, and more. Everything is built around keeping everyone productive.

Groups of building share a Cafe, so they're never far away:

Cafe

There are miles of walking trails:

Campus Walking Trail

An outdoor waterfall at one of the buildings:

Campus Waterfall

Being Successful at Microsoft

Since I've only been here a year, I certainly can't say I'm the authority on what makes someone successful. From what I've seen, the common trait is pure passion around our products. No one is here primarily for the money, and if they are, they don't tend to stick around. The people here don't just think about the products, they can't stop thinking about them. Time and time again you see people changing the world though the work they're doing here. We cross every industry in virtually every geographical location.

I work for a part of Microsoft known as TED (technology evangelism & development), which is part of DX (developer experience & evangelism). I work very closely with a small set of partners (5 currently) to help make technology and architecture choices, primarily around Azure and Windows. Azure has grown very quickly since it's inception, and I help developers navigate and align the vast list of features. I also get to write code for open source frameworks that can multiply the effectiveness our efforts and help a broader set of partners.

Being able to write code, and help others build and deliver amazing applications makes this my dream job.

I often get asked how to get a career at Microsoft. First, it should be immediately obvious that you fit in here. Your work and your enthusiasm should make your talents apparent. Next, find area you want to focus on, whether it's a product group, or evangelism. Then, head over to Microsoft Careers and do some searches for positions you may be interested in. The best way to get into any company is through networking. Find someone you know with connections to Microsoft, and see if they're aware of any positions that you may be a great fit for.

What's Next

One of the best things about working for a big company is having the ability to switch jobs without leaving the company. I'm having a great time working in DX (developer experience & evangelism), but it's great knowing there are lots of lateral opportunities as well as growth opportunities. Want to help build Windows? Office? XBox? SQL? It's an impressively diverse set of products all in one company.

Right now I'm just enjoying the ride and I'll see where it takes me.

Like this post? Please share it!

See a mistake? Edit this post!

Dead Simple Real-Time Logging for Cloud Applications

When working with developers that are building cloud-first applications, I've found that they want real-time insights into their executing code. In the past, I was able to use tools like Log2Console, but this type of tool only works when you are on the same machine as the executing code, or if there is a direct route with no firewalls.

Centralized Logging Diagram

The Need

There are lots of great solutions for gaining insights into your distributed applications, but I wanted a dead-simple, low-friction way of adding logging to a new or existing application.

Imagine if we could simply do the following

  1. Add a NuGet package to our solution
  2. Add 1 line of code in our application startup code
  3. Go to a website and get real-time log messages without having to sign up

I set out to build a simple tool to make this a reality.

Getting Started

Let's see what it takes to set this up.

In my example, I'm going to create a brand new project, but you can easily add this to any existing project type such as a web site, web role, worker role, etc.

Create a New Project

1. Add the NuGet Package

Right-click on your project and select "Manage NuGet Packages"

Search for "log4stuff" in the search box and click "Install" on the "Log4stuff.Appender" package.

Manage NuGet Packages Screen

2. Configure your Application

Your application ID is just a unique way of identifying your application so that you can view your logs. It can be anything you want, there are no restrictions, and it's case sensitive. In my example, I'll use myAppId.

I'm going to add just a single line of code in the application startup:

    static void Main(string[] args)
    {
        Log4stuff.Appender.Log4stuffAppender.AutoConfigureLogging("myAppId");
    }

This automatically configures Log4Net in your application, and it also redirects the .NET trace logs into Log4Net. Recently I used this with the Orleans code to intercept the existing logging. If you have already configured Log4Net in your application, you can find integration instructions here.

Now, you can use the standard Log4Net mechanism for logging, which typically involves adding a logger declaration into each class:

private static readonly ILog Log =
    LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

And then use the standard log methods for logging:

Log.Debug("This is a standard debug message");

Here is the code from our application in its entirety:

using System.Reflection;
using log4net;

namespace ConsoleApplication1
{
    class Program
    {
        private static readonly ILog Log =
            LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

        static void Main(string[] args)
        {
            Log4stuff.Appender.Log4stuffAppender.AutoConfigureLogging("myAppId");

            Log.Debug("This is a standard debug message");
        }
    }
}

3. View your Logs

Now, just go to the Log4Stuff website and use your application ID, in this example, you would use:

http://log4stuff.com/app/myAppId

When you run your console application, you'll see the log message appear in near real-time:

Log Output Window

Now you can imagine instrumenting the various components of your cloud application, and you'll have the ability to watch data as it flows through the system. UDP packets are used to get messages to the site, and the site uses SignalR, so the total latency is minimal.

Happy Logging!

Like this post? Please share it!

See a mistake? Edit this post!

Jason Young I'm Jason Young, software engineer. This blog contains my opinions, of which my employer - Microsoft - may not share.

@ytechieGitHubLinkedInStack OverflowPersonal VLOG