Friday, May 25, 2018

Free eBook: .NET Microservices - Architecture for Containerized .NET Applications



Free eBook/Guide on ‘.NET Microservices – Architecture for Containerized .NET Applications’ – Cesar de la Torre [Microsoft] – BLOG


.NET Microservices. Architecture for Containerized .NET Applications | Microsoft Docs


dotnet-architecture/eShopOnContainers: Easy to get started sample reference microservice and container based application. Cross-platform on Linux and Windows Docker Containers, powered by .NET Core 2.0 and Docker engine. Supports Visual Studio 2017, VS for Mac and CLI based environments with Docker CLI, dotnet CLI, VS Code or any other code editor.  @ GitHub


More free eBooks from Microsoft

GDPR

Your Guide to the GDPR - IEEE Spectrum

EU General Data Protection Regulation, goes into effect 25 May 2018

Photo: iStockphoto
  • Breach notification
  • Right to access
  • Right to be forgotten
  • Data portability
  • Privacy by design
  • Data protection officers

Thursday, May 24, 2018

Angular: 7 methods to share data between components

Angular introduces a lot of structure to web "single page apps",
based on object-oriented components, modules, services etc
to enable creating robust and responsive web apps.
The price is initial complexity of setting up a system,
and the communication between parts of the system.

Make It Easy: Share data between Angular components - 7 methods
7 different ways for sharing data between Angular components.
  1. Share data between parent and child component
  2. Share data between components using ViewChild
  3. Share data between sibling components
  4. Share data between components using service file | Communicate between components using service file
  5. 3 simple ways to share data through angular route.
  6. Create reusable component and pass data to component
  7. Share data between non related components (via service)


Wednesday, May 23, 2018

AI + Voice

Incredible research with analyzing human voice to detect all kinds of physical and psychological conditions of the speakers. Humans can sense a lot of information from the speech,
and apparently computer algorithms (ML/AI) could even much more,
from detecting is somebody is lying, intoxicated, physical features, health conditions...

With voice assistants now being available in as much as 70-90% of US homes,
this new research will create a whole new set of opportunities and challenges, soon...

Voice with Rita Singh | Software Engineering Daily (podcast interview)

"A sample of the human voice is a rich piece of unstructured data. Voice recordings can be turned into visualizations called spectrograms. Machine learning models can be trained to identify features of these spectrograms. Using this kind of analytic strategy, breakthroughs in voice analysis are happening at an amazing pace."




“Every person's voice is unique, just like your fingerprint and DNA, so we are on our way to converting voice to kind of like a barcode to identify every human,” said Singh, who has been studying voice for decades. “Basically, we are trying to sketch the entire persona of a human and their environment.”


Advanced self-driving cars research originated at Carnegie Mellon University, 
and spread to Stanford, Google and many other places. Apparently AI is advancing in other domains, too.

Forget Face ID. The Future of Secure Authentication Is Your Voice | Fortune

Tuesday, May 22, 2018

Microsoft Build 2018 content, Attention economy, data

Microsoft Build Live 2018

3 days produced 46 web pages 16 "tiles" with videos and presentations on each page. That is more than 730 items, more than number of hours in a month.  It is almost impossible to find anything.

Videos are hosted on YouTube, but no ads. Does it mean video paid hosting?

Attention economy - Wikipedia

"Herbert A. Simon was perhaps the first person to articulate the concept of attention economics when he wrote: "...in an information-rich world, the wealth of information means a dearth of something else: a scarcity of whatever it is that information consumes. What information consumes is rather obvious: it consumes the attention of its recipients. Hence a wealth of information creates a poverty of attention and a need to allocate that attention efficiently among the overabundance of information sources that might consume it" (Simon 1971, pp. 40–41)."


With abundant content, the navigation UI / UX is critical.
As much effort is invested in preparing content, there is not even a search box for this content!
But Google search does have a solution, by just adding "site:" to search box. 


It would be very useful if the index of the content like this was available as an "API",
i.e. as an RSS or similar feed with metadata, to be able to use alternative navigation and filtering tools...

And, strangely enough, there is such feed from YouTube!

Even better, there is a specific feed for "playlist", 



in some feeds can use http://www.anySite.com/articles?page=2
there is not standard for RSS options, so data are limited to latest.

But there is a also "official" (not free) REST/JSON API for YouTube
Videos: list  |  YouTube Data API  |  Google Developers




networks, IoT: Wi-Fi EasyMesh standard

Episode 164: New Wi-Fi standards and robots – IoT Podcast – Internet of Things

The Wi-Fi Alliance has created a new standard for mesh networks,


Monday, May 21, 2018

cloud: Google SRE vs DevOps

Google's "SRE" (Site Reliability Engineer) role is about effectively keeping web sites running. DevOps is a general term for mixing and collaboration of development and operations.
They are related, but not the same thing. This podcast explains the difference. Many useful links.

SRE vs Devops with Liz Fong-Jones and Seth Vargo | Google Cloud Platform Podcast

Deploying Angular: base href


There is a lot of "magic" with modern "SPA" web apps...

Angular web apps are by default expected to be deployed on root folder of a web site "/".
This works well for testing, or deploying as a single web site app,
but in enterprise environments there are often multiple web apps on one web site.

Angular CLI "build" command has option to adjust "base-href", but that is not enough.
At the same time need to adjust "deploy-url" that is applied for static resources (scripts).
So the complete command is, assuming the app is deployed with path "/myapp/"
Observe that "/" is before and after the path of the app.

> ng build -prod --base-href /myapp/ --deploy-url /myapp/

The same adjustment is also needed when "bundling" a SPA web app with "host" web server app.
That is needed when manually adding built "dist" Angular app to web server app.
In case of Angular template with ASP.NET Core, when adjustment is done by Visual Studio
and the .net, when published app generates HTML with adjustment on the fly. Magic.  


useful link:

Sunday, May 20, 2018

Azure SignalR Service: Real time web for .NET

SignalR Service – Real time web | Microsoft Azure

Azure solutions architecture center | Microsoft Azure

Azure SignalR Service, a fully-managed service to add real-time functionality | Blog | Microsoft Azure

"public preview of the Azure SignalR Service. This fully-managed service allows you to use ASP.NET Core SignalR to build real-time experiences such as chat, stock tickers, live dashboards, and more, all without worrying about capacity provisioning, scaling, or persistent connections."

SignalR/SignalR: Incredibly simple real-time web for .NET @ GitHub


Microsoft Announces Preview of Azure SignalR Service @ InfoQ

"SignalR is a library and can be used to deliver real-time experiences for web applications, such as live dashboards. It achieves this by pushing content from server-side code to connected clients in real-time. The functionality is provided through WebSockets but has fall-back to server-side events, forever frames and long polling when WebSockets are not supported.

When hosting the SignalR components directly, the user is responsible for security, encryption, capacity and scaling...

The Azure SignalR Service removes some of the complexity around self-hosting instances by providing scale up and scale out capabilities directly without the need to provide your own backplane. Additionally, security is managed by the service using shared access keys."

Saturday, May 19, 2018

course: Advanced Cloud Native Go Microservices

Advanced Cloud Native Go [Video] Book Cover
(free trial) course: Advanced Cloud Native Go @ LinkedIn Learning (Linda) by M.-Leander Reimer

related courses:

Getting Started with Cloud Native Go

Learning Kubernetes

"Learn to build and maintain improved Microservices with Go"
Advanced Cloud Native Go [Video] | PACKT Books

usually best deal: Advanced Cloud Native Go | Udemy

code:
lreimer (M.-Leander Reimer) @ GitHub

lreimer/cloud-native-go: Getting started with Cloud Native Go.

sample videos:

Advanced Cloud Native Go : The Course Overview | packtpub.com - YouTube

Advanced Cloud Native Go : Using Consul for Microservice Discovery | packtpub.com - YouTube

tools:

Download Visual Studio Code - Mac, Linux, Windows

GoLand: Capable and Ergonomic Go IDE by JetBrains

Get Docker | Docker

kubernetes/minikube: Run Kubernetes locally

(many) referenced/used prog. libraries:

cncf/landscape: Static Cloud Native Landscapes

grpc/grpc-go: The Go language implementation of gRPC. HTTP/2 based RPC

afex/hystrix-go: Netflix's Hystrix latency and fault tolerance library, for Go

armon/go-metrics: A Golang library for exporting performance and runtime metrics to external metrics systems (i.e. statsite, statsd)

armon/go-metrics: A Golang library for exporting performance and runtime metrics to external metrics systems (i.e. statsite, statsd)

spacemonkeygo/monkit: A flexible process data collection, metrics, monitoring, instrumentation, and tracing client library for Go

sirupsen/logrus: Structured, pluggable logging for Go.

go-kit/kit: A standard library for microservices.

micro/go-micro: A pluggable RPC framework

NYTimes/gizmo: A Microservice Toolkit from The New York Times

Gorilla, the golang web toolkit

gin-gonic/gin: Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much better performance -- up to 40 times faster. If you need smashing performance, get yourself some Gin.


YAML - Wikipedia

Friday, May 18, 2018

Rosetta Code


Rosetta Code

Rosetta Code

"Rosetta Code is a programming chrestomathy site. The idea is to present solutions to the same task in as many different languages as possible, to demonstrate how languages are similar and different, and to aid a person with a grounding in one approach to a problem in learning another. Rosetta Code currently has 874 tasks, 224 draft tasks, and is aware of 686 languages, though we do not (and cannot) have solutions to every task in every language."

Conditional structures - Rosetta Code (Go)

Cloud Native Applications


Keynote: Cloud Native at AWS - Adrian Cockcroft, Amazon Web Services - YouTube

AWS re:Invent 2017: Cloud-Native App Protection: Web Application Security at Pearson (SID216) - YouTube

Cloud Native Applications on OpenShift/Azure – - YouTube

CNCF Webinar - Cloud Native Applications from Development to Production - YouTube


'Cloud Native': What It Means, Why It Matters - InformationWeek

"Cloud native" is not merely a buzzword; it's also enshrined in its own foundation
- the Cloud Native Computing Foundation

"At the heart of "cloud-native" lie Linux, Linux containers, and the concept of applications assembled as microservices in containers. Indeed, the Linux Foundation launched the Cloud Native Computing Foundation. But cloud-native means a lot more than implementing Linux clusters and running containers. It's a term that recognizes that getting software to work in the cloud requires a broad set of components that work together. It also requires an architecture that departs from traditional enterprise application design. The Cloud Native Computing Foundation is going to try to make it simpler to assemble these moving parts."

Developing Cloud Native Applications - Cloud Native Computing Foundation





Cloud-Native | Pivotal



Designing Cloud Native Applications - Deep dive - YouTube

How to create a cloud native app in less than 5 minutes - YouTube

what is a Cloud-Native application? - Software Engineering Stack Exchange

Using Microservices To Build Cloud Native Applications – Part 1

What real cloud-native apps will look like | TechCrunch

The Cloud-Native Architecture: One Stack, Many Options - The New Stack


course: Advanced Cloud Native Go @ LinkedIn Learning (Linda)

lreimer (M.-Leander Reimer) @ GitHub

free course (2.5 h):
Developing Cloud-Native Apps w/ Microservices Architectures | Udemy

https://github.com/cncf/landscape

cncf/landscape: Static Cloud Native Landscapes and Interactive Landscape that filters and sorts hundreds of cloud native projects and products, and shows details including GitHub stars, funding or market cap, first and last commits, contributor counts, headquarters location, and recent tweets.
Cloud Native Landscape Logo

CNCF Landscape

Thursday, May 17, 2018

cloud storage: Wasabi, 1/5 price of AWS S3

From the same people who previously created "Carbonite", cloud backup system.
Wasabi Logo
No info about SLAs, reliability and availability guaranties.
There is much more on AWS than just storage, but this is still a competition.

Cloud Storage Pricing | Cheaper Than AWS | Wasabi Technologies, Inc.

"price 80% less than Amazon S3, 6x faster than AWS S3"

"Wasabi’s Unlimited Egress pricing plan offers the cloud storage industry’s lowest total price of $.0049 per GB/month ($4.99 per TB/month) + unlimited free egress + no charge for API calls so you don’t pay to access your data."


Wednesday, May 16, 2018

Kubernetes + Mesos = managing distributed systems

podcast: Cluster Schedulers with Ben Hindman | Software Engineering Daily

"Mesos is a system for managing distributed systems. The goal of Mesos is to help engineers orchestrate resources among multi-node applications like Spark. Mesos can also manage lower level schedulers like Kubernetes. A common misconception is that Mesos aims to solve the same problem as Kubernetes, but Mesos is a higher level abstraction."


Docker

Kubernetes
Mesos two-level scheduler

Azure CDN


Microsoft Announces Its Own Content Delivery Network in Public Preview
Microsoft will offer Azure CDN alongside existing CDN providers Verizon and Akamai

Announcing Microsoft's own Content Delivery Network | Blog | Microsoft Azure

Tuesday, May 15, 2018

SVGo: Go Language Library for SVG generation

ajstarks/svgo: Go Language Library for SVG generation @ GitHub
by ajstarks (Anthony Starks)

package main

import (
 "github.com/ajstarks/svgo"
 "os"
)

func main() {
 width := 500
 height := 500
 canvas := svg.New(os.Stdout)
 canvas.Start(width, height)
 canvas.Circle(width/2, height/2, 100)
 canvas.Text(width/2, height/2, "Hello, SVG", "text-anchor:middle;font-size:30px;fill:white")
 canvas.End()
}


link from:
Go Time #79: New Go branding strategy | News and podcasts for developers | Changelog

more from the same author:
ajstarks/go-proverbs: Deck documenting the "Go Proverbs"

Monday, May 14, 2018

Azure Kubernetes Service & Azure Dev Spaces


Microsoft Cloud Show - Azure Kubernetes Service and Azure Dev Spaces Live from Build

Kubernetes on Azure: Industry’s best end-to-end Kubernetes experience

"Azure managed Kubernetes service has been renamed to Azure Kubernetes Service (AKS). AKS is now officially part of the Kubernetes Conformance Program, designed to ensure consistency and portability of Kubernetes across different environments."

Monitoring Azure Kubernetes Service (AKS) with Azure Monitor container health (preview)


Azure Dev Spaces

Sunday, May 13, 2018

gVisor: Container Runtime Sandbox from Google, in Go

When adding support for containers in Windows, Microsoft has created two types of containers:
"classic" Linux-like containers, and second, based on Hyper-V virtualization, more secure, and with slightly more overhead.

Google have internally used similar technology with Linux, and now have released this as open source tool "gVisor". Such technology, when done right, can significantly reduce need for using virtual machines. In fact Google is internally not using virtual machines, only containers.

Google Cloud Platform Blog: Open-sourcing gVisor, a sandboxed container runtime

google/gvisor: Container Runtime Sandbox

"gVisor is a user-space kernel, written in Go, that implements a substantial portion of the Linux system surface. It includes an Open Container Initiative (OCI) runtime called runsc that provides an isolation boundary between the application and the host kernel. The runsc runtime integrates with Docker and Kubernetes, making it simple to run sandboxed containers.

gVisor takes a distinct approach to container sandboxing and makes a different set of technical trade-offs compared to existing sandbox technologies, thus providing new tools and ideas for the container security landscape.
...
gVisor is a user-space kernel for containers. It limits the host kernel surface accessible to the application while still giving the application access to all the features it expects. Unlike most kernels, gVisor does not assume or require a fixed set of physical resources; instead, it leverages existing host kernel functionality and runs as a normal user-space process. In other words, gVisor implements Linux by way of Linux."


gVisor Demo - a new open source sandboxed container runti
me - YouTube

Open Sourcing gVisor, a Sandboxed Container Runtime - YouTube

Container Isolation at Scale (Introducing gVisor) - Dawn Chen & Zhengyu He, Google - YouTube


Google open sources gVisor, a sandboxed container runtime | TechCrunch

Google Launches gVisor, an Open Source Sandboxed Container Runtime - The New Stack

Interview: Google gVisor and the Challenge of Securing Multitenant Containers - The New Stack

KubeCon + CloudNativeCon Europe 2018 - May 2-4

CNCF [Cloud Native Computing Foundation] - YouTube - YouTube


gVisor is written in GoLang, as most of other container related tools. Info from podcast:
Go Time #79: New Go branding strategy | News and podcasts for developers | Changelog


jsreport - javascript based reporting platform

generating HTML, PDF and Excel from HTML+JavaScript templates

jsreport - javascript based reporting platform
"javascript reporting server
innovative and unlimited reporting based on javascript templating engines"


online playground: jsreport

Getting started
studio

free: fully featured server limited for up to 5 report templates no license key
enterprise scale: one license key valid for infinite amount of instances, 995 $ / year

link from: .NET Rocks! vNext


Saturday, May 12, 2018

.NET Core 3 = WinForms, WPF, EF + .NET Core, ML.NET

Microsoft .NET team is creating useful upgrade path for WinForms and WPF apps.
There is even an option to compile app code to single .EXE without dependencies, GoLang-style.
ML.NET is a Machine Learning framework, being added to .NET Core to support AI development.

Announcing .NET Core 3 with Scott Hunter @ .NET Rocks! vNext

Announcing .NET Core 2.1 RC 1 Go Live AND .NET Core 3.0 Futures - Scott Hanselman

"You'll soon be able to take your existing WinForms and WPF app and swap out the underlying runtime. That means you can run WinForms and WPF on .NET Core 3 on Windows."
Diagram showing that .NET Core will support Windows UI Frameworks

Introducing ML.NET: Cross-platform, Proven and Open Source Machine Learning Framework | .NET Blog
"ML.NET enables ML tasks like classification (e.g. text categorization and sentiment analysis) and regression (e.g. forecasting and price prediction). Along with these ML capabilities, this first release of ML.NET also brings the first draft of .NET APIs for training models, using models for predictions, as well as the core components of this framework, such as learning algorithms, transforms, and core ML data structures."




Introducing ML.NET - YouTube

Friday, May 11, 2018

Angular 6

nice photo :) and some improvements and breaking changes with RxJS

Version 6 of Angular Now Available – Angular Blog

a photo by Manu Murthy of the Angular Team

With RxJS v5.x, your imports look as follows:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
With RxJS v6.x, they’ve changed a bit:
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';

Angular - Tutorial: Tour of Heroes


Home · angular/angular-cli Wiki @ GitHub


Thursday, May 10, 2018

Golang GUI with Electron: go-astilectron

For portable desktop (hybrid) apps that are not based on JavaScript.
Electron is essentially embedded Chrome browser shell,
and Go is strongly typed language, excellent for distributed apps.

How to add a GUI to your Golang app in 5 easy steps (powered by Electron)



asticode/go-astilectron: Build cross platform GUI apps with GO and HTML/JS/CSS (powered by 
Electron) @ GitHub


Sunday, May 06, 2018

Microsoft AI & IoT Insider Labs

A tour of the Microsoft AI & IoT Insider Labs | Internet of Things Show | Channel 9

"...If your organization is developing an IoT and/or AI solution, you may be able to use Microsoft's IoT & AI Insider Labs to help accelerate bringing your product to market. You will work with dedicated developer experts from industry, share feedback with Microsoft's product groups and collaborate with Microsoft's research.

https://www.microsoftiotinsiderlabs.com/

Saturday, May 05, 2018

GoLang robustness: Go+k8s vs. Erlang

Corporate branding? The gopher is cuter :)

Go's New Brand - The Go Blog


The Go Programming Language

"Go was designed with Google's needs in mind, and when you're running software at the scale that Google does robustness is of prime importance. In this talk we will cover what design decisions of Go help building robust programs, but also those parts of the language can cause problems that one needs to be aware and what techniques to apply to avoid risks.
(This presentation) also compare Go robustness to Erlang, probably the most robust runtime out there, and see how its "let it crash" principle can be brought into Go."


JustForFunc: Programming in Go - YouTube - YouTube




link from:
Go Time #78: Hacking drones with Go with Ron Evans | News and podcasts for developers | Changelog



AWS AppSync with GraphQL

GraphQL is a useful query language for web data, often much more efficient than multiple calls to plain JSON APIs. The name is not indicative of its form and purpose, but more of Facebook's internal data structures that it was first used with.

Queries and Mutations | GraphQL

GraphQL is often used in combination with another popular Facebook's open source tool, React.
React Stack with G2i Team | Software Engineering Daily

In its classic pattern, Amazon has created a useful service based on open source tools,
in this case by adding GraphQL integration to other API services.

AWS AppSync Including New GraphQL Features Is Now Generally Available

"Amazon released AWS AppSync, a GraphQL service with real-time data and offline programming capabilities, generally available. Amazon introduced AWS AppSync at last year's AWS re:Invent conference, and now the current GA release includes several new features that can accelerate development: a test and debug flow, Amazon CloudWatch integration, and support for Amazon CloudFormation."

Thursday, May 03, 2018

Igo, emgo: GoLang is expanding

GoTime podcast interview with GoLang project lead:

Go Time #77: Dependencies and the future of Go with Russ Cox | News and podcasts for developers | Changelog

Go Time with Erik St. Martin, Carlisia Pinto, and Brian Ketelsen | News and podcasts for developers | Changelog

A very interesting and practical tool!

yunabe/lgo: Interactive Go programming with Jupyter @ GitHub

"Go (golang) Jupyter Notebook kernel and an interactive REPL
Features
  • Write and execute Go (golang) interactively like Python.
  • Jupyter Notebook integration
  • Full Go (golang) language spec support. 100% gc (go compiler) compatible.
  • Code completion and inspection in Jupyter Notebooks
  • Display images, HTML, JavaScript, SVG, etc...
  • Currently, lgo is only supported on Linux. But you can use lgo on Mac and Windows with virtual machines or Docker."



Alternative implementation of Go language subset 
for very small devices based on ARM Cortex-M based MCU

Emgo and STM32L1-Discovery - YouTube



Run Go in web browsers

FlatBuffers vs JSON

For sending data over HTTP first there was XML, then JSON,
sometimes Protocol Buffers, and now FlatBuffers, and possible "next thing" :)

Most of Google's (and other) services are internally running on Protocol Buffers.
FlatBuffers is simplified, faster version of Protocol Buffers format.

FlatBuffers: FlatBuffers

"FlatBuffers is an efficient cross platform serialization library for C++, C#, C, Go, Java, JavaScript, TypeScript, PHP, and Python. It was originally created at Google for game development and other performance-critical applications. It is available as Open Source on GitHub under the Apache license, v2"



"FlatBuffers is a free software library implementing a serialization format similar to Protocol Buffers, Thrift, Apache Avro, SBE, and Cap'n Proto, primarily written by Wouter van Oortmerssen and open-sourced by Google

Like Cap'n Proto and SBE, it supports “zero-copy” deserialization, so that accessing the serialized data does not require first copying it into a separate part of memory, which makes accessing data in these formats much faster than data in formats requiring more extensive processing, such as JSON, CSV, and Protocol Buffers. 

It is the data serialization format used internally in Facebook's Android client, replacing JSON; in that role, they credit it for dramatic performance improvements in the client.

Tuesday, May 01, 2018

TensorFlow.js: ML in web browsers


TensorFlow.js

TensorFlow.js
"A WebGL accelerated, browser based JavaScript library for training and deploying ML models."
  • Develop ML in the Browser
  • Run Existing models
  • Retrain Existing models


A very nice animation of neural network "learning" process.

A Neural Network Playground

References to free online bools about Machine Learning:

podcast interview with Director of Engineering in Google working on Tensorflow:


TensorFlow - YouTube - YouTube

example:
Teachable Machine

Porting of a complex application to web browser could be done by

  1. rewriting it in JavaScript, apparently what Google has done, or
  2. cross-compiling C++ binary to WebAssembly 
Here is an attempt of the second approach:

tomasreimers/tensorflow-emscripten: @ GitHub

MXnet, another major machine learning library, used and supported by Amazon
is available cross-compiled:

dmlc/mxnet.js: MXNetJS: Javascript Package for Deep Learning in Browser (without server) @ GitHub

A predictable future: Microsoft's CNTK, a ML library similar to Tensorflow and MXnet,
will be cross-compiled to WebAssembly soon :) If whole .NET can run in the browser, so can ML tools.

Microsoft/CNTK: Microsoft Cognitive Toolkit (CNTK), an open source deep-learning toolkit @ GitHub


Azure Container Instances (ACI)

Microsoft is offering "managed containers" that are simple to use, and could be also managed by Kubernetes and used in many other combinations. This is half-way between VMs and cloud functions, could be quite useful.
Azure Container Instances | Microsoft Azure
"Easily run containers on Azure without managing servers"

This may be the simplest to use  application of ACI:
Azure Linux Web Apps (PaaS) are deployed as managed containers,
and have all integration and auto-scaling and load balancing.
App Service - Web App for Containers | Microsoft Azure

Very informative podcast interview with Microsoft insider:
Container Instances with Gabe Monroy | Software Engineering Daily

Pricing Overview - How Azure pricing works | Microsoft Azure
App Service: from $0.013/h, VM: from $0.011/h.
So managing instances (VMs or containers in VM) including load balancing is $0.002/h
that is 18% difference, from $1.44/month.

Heroku, a part of SalesForce, was always selling only containers
but prices on Azure ware better last time I compared.
Cloud Application Platform | Heroku