Skip to main content

Wal-Mart doesn't want your money

2 min read

Last weekend I was lucky enough to be checking email when Wal-Mart announced pre-orders for the SNES Classic.  I managed to snag a pre-order before they all disappeared. I waited for an email confirmation before telling the kids because of how hard it was to purchase an NES Classic (no, I didn't get one). When I received the confirmation email I knew it was legit and told the kids we'd have an SNES Classic by October.  

Today I received the email below. Wal-Mart apparently thinks it's OK to violate legally binding contracts they make with their customers.

Hi John,

Thank you for your interest in the Super Nintendo Entertainment System – Classic Edition. As you are aware, this is a highly sought after console that will launch later this fall.

Unfortunately, due to a technical glitch, the Super Nintendo Classic Edition was mistakenly made available last Friday evening ahead of the official release date. We, regrettably, will have to cancel this item on your order. We know that this is incredibly disappointing to you, and we’re truly sorry for this mistake.

In regards to the cancellation of this item, if you paid by credit card, your card has not been charged. Any authorization holds placed on your account will automatically expire in accordance with the card issuer's policy. If you paid through PayPal or with a gift card, your payment will be refunded when the order is cancelled.

The official launch date for this item is 9/29, please check the product page on Walmart.com prior to that date for any updates.

I do hope you’ll give us another chance to earn back your business.

Warm regards,

Deserie Dulaney
Sr. Director Customer Care
Walmart.com

Thanks for nothing Wal-Mart - I'm sure I'm you'll lose many customers over this.   


Anti-Net Neutrality: Be Careful What You Wish For

1 min read

A government that can prevent ISPs from throttling traffic is a government that can prevent ISPs from carrying traffic.

A Chart Comparing Azure Cosmos DB, Amazon DynamoDB and Google Cloud Spanner

1 min read

Learn more about Cosmos DB's consistency models here.

Durability and Reliability

1 min read

Many people tend to either confuse Durability and Reliability or assume they are the same. This is a quick write up to clarify that these are two fundamentally different yet critical concepts.

Message reliability focuses on the delivery of messages. Message reliability means a message needs to be delivered at least once with possible duplicates or at most once with no duplicates. Reliability also dictates whether messages must be delivered in the same order they were sent or can be delivered out of order.

Message durability focuses on the management of messages. Message durability dictates whether a message can be simply kept in-memory or if it must be saved to persisted storage to avoid message loss (in-memory messages are lost during system, network or power failures). Durable messaging also enables operations to resolve issues in a much easier manner than relying solely upon reliable messaging. When a durable messaging solution experiences an exception or outage it is much easier to determine the state of the transactions and restore/replay messages from a known state without losing any messages.

Note: I've been using this post to test webmentions.

Go Go Azure Functions!

11 min read

 

 Azure Functions are cool.  Functions are conceptually similar to WebJobs in that they are event-driven (triggered) and can be easily integrated with other Azure resources.  Functions are a lightweight alternative to rapidly building and deploying event-driven microservices (several jump start templates are available - see the list at the bottom of this post).  Like most microservices, Functions should be stateless and idempotent.

 With Azure Functions, your applications scale based on demand and you pay only for the resources you consume (e.g. "serverless"). It’s important to note here that the Consumption Pricing Tier (which is the default) imposes a 5 minute time limit on your Functions. If your Function needs more than 5 min to execute you’ll need to host your Function on an App Service VM (although you probably shouldn’t be using Functions if your process needs more than 5 minutes to execute - check out Functions Best Practices).  

 Azure Functions can be implemented in multiple programming lanugages and all the code is available on GitHub:

 To learn more about Azure Functions, see the Azure Functions Overview.

 Function Proxies

 Azure Function Proxies were announced as a preview last week.  Function Proxies enable you to define a single API across multiple Functions. You can learn more about Azure Function Proxies here.

Function Proxies vs. API Management - What to Use When?

I've had a few people express confusion about what to use when: Azure Proxies vs. Azure API Management (APIM).  Azure Function Proxies and APIM can both be used to map a single API to one or more endpoints. Function Proxies make it easier to manage and expose multiple Functions through a simple API while APIM is a full service gateway for documenting, securing, logging and governing the use of your APIs.

 

 

A List of all Function Templates

These templates are available in the Azure Functions Portal.

Core Templates:

BlobTrigger-CSharp - A C# function that will be run whenever a blob is added to a specified container

BlobTrigger-FSharp - An F# function that will be run whenever a blob is added to a specified container

BlobTrigger-JavaScript - A JavaScript function that will be run whenever a blob is added to a specified container

EventHubTrigger-CSharp - A C# function that will be run whenever an event hub receives a new event

EventHubTrigger-FSharp - An F# function that will be run whenever an event hub receives a new event

EventHubTrigger-JavaScript - A JavaScript function that will be run whenever an event hub receives a new event

GenericWebHook-CSharp - A C# function that will be run whenever it receives a webhook request

GenericWebHook-FSharp - An F# function that will be run whenever it receives a webhook request

GenericWebHook-JavaScript - A JavaScript function that will be run whenever it receives a webhook request

GitHubWebHook-CSharp - A C# function that will be run whenever it receives a GitHub webhook request

GitHubWebHook-FSharp - An F# function that will be run whenever it receives a GitHub webhook request

GitHubWebHook-JavaScript - A JavaScript function that will be run whenever it receives a GitHub webhook request

HttpTrigger-CSharp - A C# function that will be run whenever it receives an HTTP request

HttpTrigger-FSharp - An F# function that will be run whenever it receives an HTTP request

HttpTrigger-JavaScript - A JavaScript function that will be run whenever it receives an HTTP request

ManualTrigger-CSharp - A C# function that is triggered manually via the portal "Run" button

ManualTrigger-FSharp - An F# function that is triggered manually via the portal "Run" button

ManualTrigger-JavaScript - A JavaScript function that is triggered manually via the portal "Run" button

QueueTrigger-CSharp - A C# function that will be run whenever a message is added to a specified Azure Queue Storage

QueueTrigger-FSharp - An F# function that will be run whenever a message is added to a specified Azure Queue Storage

QueueTrigger-JavaScript - A JavaScript function that will be run whenever a message is added to a specified Azure Queue Storage

ServiceBusQueueTrigger-CSharp - A C# function that will be run whenever a message is added to a specified Service Bus queue

ServiceBusQueueTrigger-FSharp - An F# function that will be run whenever a message is added to a specified Service Bus queue

ServiceBusQueueTrigger-JavaScript - A JavaScript function that will be run whenever a message is added to a specified Service Bus queue

ServiceBusTopicTrigger-CSharp - A C# function that will be run whenever a message is added to the specified Service Bus topic

ServiceBusTopicTrigger-FSharp - An F# function that will be run whenever a message is added to the specified Service Bus topic

ServiceBusTopicTrigger-JavaScript - A JavaScript function that will be run whenever a message is added to the specified Service Bus topic

TimerTrigger-CSharp - A C# function that will be run on a specified schedule

TimerTrigger-FSharp - An F# function that will be run on a specified schedule

TimerTrigger-JavaScript - A JavaScript function that will be run on a specified schedule

API and Webhooks Templates:

GenericWebHook-CSharp - A C# function that will be run whenever it receives a webhook request

GenericWebHook-FSharp - An F# function that will be run whenever it receives a webhook request

GenericWebHook-JavaScript - A JavaScript function that will be run whenever it receives a webhook request

GitHubWebHook-CSharp - A C# function that will be run whenever it receives a GitHub webhook request

GitHubWebHook-FSharp - An F# function that will be run whenever it receives a GitHub webhook request

GitHubWebHook-JavaScript - A JavaScript function that will be run whenever it receives a GitHub webhook request

HttpTrigger-CSharp - A C# function that will be run whenever it receives an HTTP request

HttpTrigger-FSharp - An F# function that will be run whenever it receives an HTTP request

HttpTrigger-JavaScript - A JavaScript function that will be run whenever it receives an HTTP request

Data Processing Templates:

BlobTrigger-CSharp  - A C# function that will be run whenever a blob is added to a specified container

BlobTrigger-FSharp - An F# function that will be run whenever a blob is added to a specified container

BlobTrigger-JavaScript - A JavaScript function that will be run whenever a blob is added to a specified container

EventHubTrigger-CSharp - A C# function that will be run whenever an event hub receives a new event

EventHubTrigger-FSharp - An F# function that will be run whenever an event hub receives a new event

EventHubTrigger-JavaScript - A JavaScript function that will be run whenever an event hub receives a new event

QueueTrigger-CSharp - A C# function that will be run whenever a message is added to a specified Azure Queue Storage

QueueTrigger-FSharp - An F# function that will be run whenever a message is added to a specified Azure Queue Storage

QueueTrigger-JavaScript - A JavaScript function that will be run whenever a message is added to a specified Azure Queue Storage

SendGrid-CSharp - (Preview) A C# function that sends a confirmation e-mail when a new item is added to a particular queue

SendGrid-JavaScript - (Preview) A JavaScript function that sends a confirmation e-mail when a new item is added to a particular queue

ServiceBusQueueTrigger-CSharp - A C# function that will be run whenever a message is added to a specified Service Bus queue

ServiceBusQueueTrigger-FSharp - An F# function that will be run whenever a message is added to a specified Service Bus queue

ServiceBusQueueTrigger-JavaScript - A JavaScript function that will be run whenever a message is added to a specified Service Bus queue

ServiceBusTopicTrigger-CSharp - A C# function that will be run whenever a message is added to the specified Service Bus topic

ServiceBusTopicTrigger-FSharp - An F# function that will be run whenever a message is added to the specified Service Bus topic

ServiceBusTopicTrigger-JavaScript - A JavaScript function that will be run whenever a message is added to the specified Service Bus topic

TimerTrigger-CSharp - A C# function that will be run on a specified schedule

TimerTrigger-FSharp - An F# function that will be run on a specified schedule

TimerTrigger-JavaScript - A JavaScript function that will be run on a specified schedule

Sample Templates:

FaceLocator-CSharp - A C# function that processes images and outputs the bounding rectangle of faces

FaceLocator-FSharp - An F# function that processes images and outputs the bounding rectangle of faces

FaceLocator-JavaScript - A JavaScript function that processes images and outputs the bounding rectangle of faces

GitHubCommenter-CSharp - A C# function that will be run whenever it receives a GitHub webhook request

GitHubCommenter-FSharp - An F# function that will be run whenever it receives a GitHub webhook request

GitHubCommenter-JavaScript - A JavaScript function that will be run whenever it receives a GitHub webhook request

HttpGET(CRUD)-CSharp - A C# function that fetches entities from a Storage Table when it receives an HTTP request

HttpGET(CRUD)-FSharp - An F# function that fetches entities from a Storage Table when it receives an HTTP request

HttpGET(CRUD)-JavaScript - A JavaScript function that fetches entities from a Storage Table when it receives an HTTP request

HttpGET(CRUD)-PHP - (Experimental) A PHP function that fetches entities from a Storage Table when it receives an HTTP request

HttpPOST(CRUD)-CSharp - A C# function that adds entities to a Storage Table when it receives an HTTP request

HttpPOST(CRUD)-FSharp - An F# function that adds entities to a Storage Table when it receives an HTTP request

HttpPOST(CRUD)-JavaScript - A JavaScript function that adds entities to a Storage Table when it receives an HTTP request

HttpPUT(CRUD)-CSharp - A C# function that updates entity in a Storage Table when it receives an HTTP request

HttpPUT(CRUD)-FSharp - An F# function that updates entity in a Storage Table when it receives an HTTP request

ImageResizer-CSharp - A C# function that creates resized images whenever a blob is added to a specified container

ImageResizer-FSharp - An F# function that creates resized images whenever a blob is added to a specified container

SasToken-CSharp - A C# function that generates a SAS token for Azure Storage for a given container and blob name

SasToken-FSharp - An F# function that generates a SAS token for Azure Storage for a given container and blob name.

SasToken-JavaScript - (Preview) A JavaScript function that will be run whenever a file is added to a External File provider.

ScheduledMail-CSharp - (Preview) A C# function that will periodically send emails

SendGrid-CSharp - (Preview) A C# function that sends a confirmation e-mail when a new item is added to a particular queue

SendGrid-FSharp - (Preview) An F# function that sends a confirmation e-mail when a new item is added to a particular queue

SendGrid-JavaScript - (Preview) A JavaScript function that sends a confirmation e-mail when a new item is added to a particular queue

Experimental Templates:

BlobTrigger-Batch - (Experimental) A Batch function that will be run whenever a blob is added to a specified container

ExternalFileTrigger-Batch - (Experimental) A Batch function that will be run whenever a file is added to a External File provider.

ExternalFileTrigger-CSharp - (Preview) A C# function that will be run whenever a file is added to a External File provider.

ExternalFileTrigger-FSharp - (Preview) An F# function that will be run whenever a file is added to a External File provider.

ExternalFileTrigger-JavaScript - (Preview) A JavaScript function that will be run whenever a file is added to a External File provider.

ExternalTable-CSharp - (Experimental) A C# function that fetches entities from a External Table when it receives an HTTP request.

ExternalTable-FSharp - (Experimental) An F# function that fetches entities from a External Table when it receives an HTTP request.

HttpTrigger-Batch - (Experimental) A Batch function that will be run whenever it receives an HTTP request

HttpTrigger-Powershell - (Preview) A PowerShell function that will be run whenever it receives an HTTP request

QueueTrigger-Bash - (Experimental) A bash function that will be run whenever a message is added to a specified Azure Queue Storage

QueueTrigger-Batch - (Experimental) A Batch function that will be run whenever a message is added to a specified Azure Queue Storage

QueueTrigger-Php - (Experimental) A PHP function that will be run whenever a message is added to a specified Azure Queue Storage

QueueTrigger-Powershell - (Preview) A PowerShell function that will be run whenever a message is added to a specified Azure Queue Storage

QueueTrigger-Python - (Experimental) A Python function that will be run whenever a message is added to a specified Azure Queue Storage

TimerTrigger-Powershell - (Preview) A PowerShell function that will be run on a specified schedule

Drop Dead Simple ASP.NET WebHooks example

1 min read

ASP.NET Webhooks were RTM in late December of last year.  There are a ton of examples from the webhooks available on Github.  There are so many examples it can be somewhat overwhelming. 

I wanted to create the simplest possible demo showing how ASP.NET webhooks work and did so here.  The demo contains a number of comments explaining how to set up and use it.  I hope you find it helpful in learning more about ASP.NET webhooks.

 

 

 

 

A Quick Comparison of Hybrid Connections and Azure Relay Hybrid Connections

2 min read

Update: Azure Relay Hybrid Connections is now Generally Available.  The official docs are here.

Azure moves fast. Azure Relay Hybrid Connections was announced on November 1st and I'm just catching up with it now. 

Azure Relay Hybrid Connections does not depend upon BizTalk and does not replace Hybrid Connections

Differences between Hybrid Connections and Azure Relay Hybrid Connections:

  • Hybrid Connections
  • Relay Hybrid Connections
    • Only available in the new Azure portal (http://portal.azure.com)
    • Does not use BizTalk on the Azure side
    • Built on HTTPS and Websockets. The protocol is open and fully documented
    • No client-side "connections manager" required - use the API with an Azure relay namespace
    • Supports SAS keys
    • Support for multiple code bases and platforms (a node sample is also available)
    • Can be used in a production environment for simple point-to-point connectivity.

People adopting Relay Hybrid Connections should follow well-known best practices for working with web sockets (e.g. periodic pinging and aggressive reconnecting as necessary). 

 See here for a simple example of Azure Relay Hybrid Connections.

 

 

 

RIP Mr. Garibaldi

1 min read

From Sleeping in Light: Our last look at Mr. Garibaldi before he boards the transport for the final time.  

It's sad to see so many Babylon 5 actors pass away so soon. Richard Biggs. Andreas Katsulas. Michael O'Hare. Jeff Conaway... and now Jerry Doyle. 

RIP Mr. Garibaldi.

Are e-books a scam?

1 min read

 

I was planning to re-read an e-book I purchased from Amazon back in 2014.  The book was missing from my Kindle and also missing from my online library. I searched for the book in the Amazon marketplace and they apparently don't carry it anymore.

I contacted Amazon and am looking forward to their explanation.

Have you ever encountered this issue with e-books?

Addendum:  Amazon restored the e-book for me.  There was no explanation about why it disappeared.  

I think I'll be going back to reading "real" books that can't disappear without an explanation.