Google+

Ignite 2015 Mega Post

Windows

Azure

  • Azure Stack
    • Use ARM templates on-premises
    • Storage support
    • IaaS
    • Service Fabric
  • ExpressRoute supports Office 365 connectivity
  • IaaS
    • Azure DNS Public Preview
    • User defined routing
    • Standard VPN Gateway
      • Use a site-to-site VPN over Expressroute
    • Multiple VIPs per cloud service
    • Expressroute and VPN co-existence
    • VM Volume encryption for Windows and Linux
      • Encrypt boot and data volumes
    • VM Scale Set public preview
      • Set-based operations on identical VMs through an API
      • Great for big compute scenarios
    • C++ Storage 1.0 GA
    • Client-side encryption for Azure Storage Preview
    • Xamarin storage client library
    • New Storage Blob Type - Append Blob
  • Azure DNS
  • Public preview of Advanced Threat Analytics

Misc

  • Office 2016 Public Preview
  • Power BI mobile app
  • Delve Dashboard
    • Show email, meeting, Skype, Yammer analytics
    • Work/life balance stats
    • Work map
  • Skype integration in Office
  • Office desktop collaboration
  • Sway will be coming to the education and business O365 plans
  • Skype for Business
    • iOS and Android by fall CY
    • Mac by end of CY 2015
    • Coming soon to the cloud: Enterprise voice, audio conferencing, PSTN calling
    • Broadcast to up to 10,000 viewers
    • DVR functionality for conferences

Like this post? Please share it!

See a mistake? Edit this post!

Build 2015 Mega Post

Keynote Highlights

Windows

Azure

  • .NET SDK 2.6 (Release Notes)
    • HDInsight improvements
    • In-Role caching uses latest storage SDK
    • App Service tools
    • Azure Resource Manager new templates for Virtual Machines, Networking, and Storage
    • Diagnostic improvements
  • Data lake service
    • HDFS compatible file system
    • Unlimited storage
    • Optimized for high throughput, low latency
  • Project Oxford
    • Face detection
    • Speech recognition
    • Vision information API
    • Powers how-old.net
  • Service Fabric
    • Stateful microservices
  • SQL Database
    • SQL DB Transparent data encryption public preview
    • SQL DB Service Tier Advisor public preview - assess performance needs
    • Elastic Data Pool
    • Full-text Search
  • More than 500 new features in Azure in the past year
  • Over 50 trillion storage objects
  • App Service Architecture
  • IaaS
    • 3 Fault domains in an availability set
  • Azure IoT Suite
    • Device provisioning & management
    • Telemetry

Visual Studio

Misc

  • Project Spartan is now Edge
  • .NET support on Linux in Docker
  • .NET core preview for Linux and Mac
    • Additionally, run and debug .NET on Linux, in a Docker container
  • .NET 4.6 RC for Windows
  • Nano server
    • Admin GUIs on servers are poison
    • It's just a deployment option
    • Features are pulled in separately, not on disk
    • Hyper-V, ASP.net, clustering support
    • Configuration via core PowerShell and WMI
    • Uses core CLR, most core engine components
    • Nano server is a subset of the full server surface area
    • An app that works on nano server will run on the full server
    • Optional Reverse forwarders package allows you run non-nano apps and silently fail on unsupported API calls
    • Lots of things can run with the reverse forwarders like Java, node.js
    • Less than 3 minutes to install
    • 400mb vs 5+gb for full server
    • Inject drivers in image before install
  • Office has a unified endpoint for all API calls
    • Add-ins run everywhere that office does
  • Vorlon.js
    • An open source, extensible, platform-agnostic tool for remotely debugging and testing your JavaScript
  • Building a new Reactor space in San Francisco
  • Minecraft Modding in Visual Studio

Like this post? Please share it!

See a mistake? Edit this post!

Designing for Testability

This is a segment that I wrote for a book used internally and with Microsoft partners.

Building a car may seem like a complicated process (because it is), but imagine if the design of the car changed on a daily basis. Also imagine if the tools and processes changed daily. With few things being constant, creating a quality automobile would become increasingly difficult. Welcome to the world of software engineering. The factory is your favorite editor, the cars are your code, and the customer is everyone.

The reality is that all developers test their code. How many times have you made a change, compiled the code, waited for the application to run, and then navigated through the application to execute the code you just wrote? The problem is that efficiency goes down dramatically the longer you have to wait to see a result from the changes you make. Looking back at the car example, would you rather buy a car whose quality was checked in every step during construction, or would it be acceptable if the testing was done only once the car was assembled? Considering the higher potential for significant re-work and the associated schedule impact when testing is deferred to the end, which approach do you think will prove faster?

Avoiding bugs is much more enjoyable than having to fix bugs. Features such as type systems exist to join the “result” of the code with the creation of the code. Defining a variable to be a particular type is actually a specification or test definition that runs at compile time against all usages of that variable. Languages like TypeScript allow us to use the full power of a dynamic language like JavaScript, with the safety of a type system.

Since software development is highly dynamic, there is no single way to build applications, but we can increase code and app quality by following proven principles. For example, the SOLID principles published by Robert C. Martin provide some fundamental tenants.

SOLID is actually an acronym of 5 other acronyms, defined below. With good design principles comes testability. Testing is a word that typically strikes fear into the hearts of developers. Like many fears, understanding removes the fear. In fact, a good unit test should be simple, useful, and actually saves development time. Using that definition, it’s not possible to have a unit test that will “cost” you time.

Instead they provide you with immediate value.

SRP The Single Responsibility Principle A class should have one, and only one, reason to change.
OCP The Open Closed Principle You should be able to extend a class’s behavior, without modifying it.
LSP The Liskov Substitution Principle Derived classes must be substitutable for their base classes.
ISP The Interface Segregation Principle Make fine grained interfaces that are client specific.
DIP The Dependency Inversion Principle A class should have one, and only one, reason to change.
SRP The Single Responsibility Principle Depend on abstractions, not on concretions.

(source: Agile Principles, Patterns, and Practices in C# by Robert C. Martin)

The figure below illustrates this difference. Code not designed for testability will be, well, largely untestable. This is what typically deters developers from making testing part of their development process. As we learn how to craft our code into well designed components, the amount of code that is easily tested will be the majority. There will be some additional code that has a questionable return on testing investment, and code that will never make sense to test. The Y-Axis is the degree of testability, or the ease of which a particular piece of logic can be tested. The X-Axis is defined as “benefit,” which is comprised of how often the code will be reused, the importance of the code, the complexity of the code, and the risk level associated with the code not working as expected.

Testability

Like this post? Please share it!

See a mistake? Edit this post!

Jason Young I'm Jason Young, software developer at heart, technical evangelist for Microsoft by day. This blog contains my opinions, of which my employer may not share.

@ytechieGitHubLinkedInStack Overflow