# Monday, January 25, 2021

Episode 644

Dustin Campbell on Support for WinForms to the Visual Studio Designer

Dustin Campbell recently updated the tooling in Visual Studio to support WinForms and other legacy applications. He describes the challenges in doing so and how he and his team attacked them.

Monday, January 25, 2021 9:07:00 AM (GMT Standard Time, UTC+00:00)
# Saturday, January 23, 2021

William Faulkner's The Sound and the Fury tells the story of the Compsons - a family that once held power, money, and influence in Jefferson, Mississippi. The Compsons have fallen on hard times. One son was born mentally handicapped; another suffered from depression and committed suicide; a third son grew up to be a cynical, greedy, dishonest racist and the family has disowned their promiscuous daughter after the birth of her illegitimate child. An alcoholic father and a hypochondriac mother complete the picture of a family in despair. From southern aristocracy, the Compsons have deteriorated in wealth, social position, and morality.

The book tells the story of the family's fall from grace, but it does so in such a roundabout way that the reader is forced to work hard to understand their fate.

I almost did not finish this novel. There are four chapters and I had to read the first two at least twice before it made any sense to me. The narrative jumps rapidly between time periods - often with no warning other than a change in font, and often with no indication of which time is addressed. It is made more difficult by the fact it is narrated by the childlike Benji. Much of the book is written in first person and the stream of consciousness style makes for challenging reading.

Eventually, a story emerges. Faulkner tells the same events from different points of view and we get a vision of characters as they see themselves and as others see them.

If one can get past the obtuse first half of this novel, this is a satisfyingly dark story of people dealing with loss.

Saturday, January 23, 2021 9:22:00 AM (GMT Standard Time, UTC+00:00)
# Friday, January 22, 2021

In a previous article, I showed you how to upload an asset to an Azure Media Services (AMS) account. In this article, you will learn how to use Azure Media Services to analyze a video.

Navigate to the Azure Portal and to your Azure Media Services account, as shown in Fig. 1.

ams01-OverviewBlade
Fig. 1

Then, select "Assets" from the left menu to open the "Assets" blade, as shown in Fig. 2.

ams02-AssetsBlade
Fig. 2

Select the Input Asset you uploaded to display the Asset details page, as shown in Fig. 3.

ams03-AssetDetails
Fig. 3

Click the [Add job] button (Fig. 4) to display the "Create a job" dialog, as shown in Fig. 5.

ams04-AddJobButton
Fig. 4

ams05-CreateJobBlade
Fig. 5

At the "Transform" field, select the "Create new" radio button.

At the "Transform name" textbox, enter a name to help you identify this Transform.

At the "Description" field, you may optionally enter some text to describe what this transform will do.

At the "Transform type" field, select the "Video and audio analyzer" radio button.

At the "Analysis type" field, select the "Video and audio" radio button.

The "Automatic language detection" section allows you to either specify the audio language or allow AMS to figure this out. If you know the language, select the "No" radio button and select the language from the dropdown list. If you are unsure of the language, select the "Yes" radio button to allow AMS to infer it.

The "Configure Output" section allows you to specify where the generated output assets will be stored.

At the "Output asset name" field, enter a descriptive name for the output asset. AMS will suggest a name, but I prefer the name of the Input Asset, followed by "_Analysis" or something more descriptive.

At the "Asset storage account" dropdown, select the Azure Storage Account in which to save a container and the blob files associated with the output asset.

At the job name, enter a descriptive name for this job. A descriptive name is helpful if you have many jobs running and want to identify this one.

At the "Job priority" dropdown, select the priority in which this job should run. The options are "High", "Low", and "Normal". I generally leave this as "Normal" unless I have a reason to change it. A High priority job will run before a Normal priority job, which will run before a Low priority job.

Click the [Create] button to create the job and queue it to be run.

You can check the status of the job by selecting "Transforms + jobs" from the left menu to open the "Transforms + jobs" blade (Fig. 6) and expanding the job you just created (FIg. 7).

ams06-TransformJobs
Fig. 6

ams07-ExpandJob
Fig. 7

The state column tells you whether the job is queued, running, or finished.

Click the name of the job to display details about the job, as shown in Fig. 8.

ams08-JobDetails
Fig. 8

After the job finishes, when you return to the "Assets" blade, you will see the new output Asset listed, as shown in Fig. 9.

ams09-AssetsBlade
Fig. 9

Click on the link in the "Storage link" column to view the files in Blob storage, as shown in Fig. 10.

ams10-Container
Fig. 10

AMS Analytics produces the following text files:

File Name Contents
annotations.json A set of tags identifying objects and actions at various poinst throughout the video
contentmoderation.json Information at time points throughout the video, indicating if the video contains racy and/or adult content and should be reviewed.
emotions.json An analysis of emotions displayed on the faces in the video
faces.json Details of each face detected in the video at various time points
insights.json A file containing information on faces, OCR, and transcriptions at time points throughout the video
lid.json Spoken languages detected at various time points throughout the video
metadata.json Data about the video and audio tracks, such as format and size
ocr.json The text of any words displayed on screen
rollingcredits.json Information about rolling credits displayed, if any
transcript.ttml A transcription of any spoken text in the video, in Timed Text Markup Language (TTML) format
transcript.vtt A transcription of any spoken text in the video, in WebVTT format

In addition, you will find thumbnail images taken from the video as JPG files or as a ZIP file containing multiple JPG files.

In this article, you learned how to use Azure Media Services to analyze an Audio / Video file

Friday, January 22, 2021 9:45:00 AM (GMT Standard Time, UTC+00:00)
# Thursday, January 21, 2021

GCast 100:

Creating a Screencast

In this video, I walk you through how I create screencasts for this show and publish it online.

Thursday, January 21, 2021 10:38:00 AM (GMT Standard Time, UTC+00:00)
# Wednesday, January 20, 2021

In a previous article, I showed you how to use Azure Media Services to generate a Streaming Locator so that others can view and/or download your video.

In this article, I will show you how to create a web page that allows users to select the format and resolution in which they want to view your video. 

Navigate to the Azure Portal and to your Azure Media Services account, as shown in Fig. 1

ams01-OverviewBlade
Fig. 1

Then, select "Assets" from the left menu to open the "Assets" blade, as shown in Fig. 2.

ams02-AssetsBlade
Fig. 2

Select the Output Asset created by encoding your input video Asset to display the Asset details page, as shown in Fig. 3.

ams03-AdaptiveStreamingAsset
Fig. 3

Verify that the Streaming Locator exists and is running. Start it, if necessary.

Click the "View locator" link to display the "Streaming URLs" dialog, as shown in Fig. 4.

ams04-StreamingUrlsBlade
Fig. 4

Scroll down to the "SmoothStreaming" section shown in Fig. 5.

ams05-SmoothStreaming
Fig. 5

The SmoothStreaming URL points to a file named "manifest", which is an XML document with information on available encoded videos in this asset. A sample of such a document is in Listing 1.

Listing 1:

<?xml version="1.0" encoding="UTF-8"?> 
< SmoothStreamingMedia MajorVersion="2" MinorVersion="2" Duration="110720000" TimeScale="10000000"> 
    < StreamIndex Chunks="2" Type="audio" Url="QualityLevels({bitrate})/Fragments(aac_und_2_127999_2_1={start time})" QualityLevels="1" Language="und" Name="aac_und_2_127999_2_1"> 
        < QualityLevel AudioTag="255" Index="0" BitsPerSample="16" Bitrate="127999" FourCC="AACL" CodecPrivateData="1190" Channels="2" PacketSize="4" SamplingRate="48000" /> 
        <c t="0" d="60160000" /> 
        <c d="50560000" /> 
    </StreamIndex> 
    < StreamIndex Chunks="2" Type="video" Url="QualityLevels({bitrate})/Fragments(video={start time})" QualityLevels="4"> 
        < QualityLevel Index="0" Bitrate="2478258" FourCC="H264" MaxWidth="1024" MaxHeight="576" CodecPrivateData="000000016764001FACD94040049B0110000003001000000303C0F18319600000000168EBECB22C" /> 
        < QualityLevel Index="1" Bitrate="1154277" FourCC="H264" MaxWidth="640" MaxHeight="360" CodecPrivateData="000000016764001EACD940A02FF970110000030001000003003C0F162D960000000168EBECB22C" /> 
        < QualityLevel Index="2" Bitrate="731219" FourCC="H264" MaxWidth="480" MaxHeight="270" CodecPrivateData="0000000167640015ACD941E08FEB0110000003001000000303C0F162D9600000000168EBECB22C" /> 
        < QualityLevel Index="3" Bitrate="387314" FourCC="H264" MaxWidth="320" MaxHeight="180" CodecPrivateData="000000016764000DACD941419F9F0110000003001000000303C0F14299600000000168EBECB22C" /> 
        <c t="0" d="60000000" /> 
        <c d="50333333" /> 
    </StreamIndex> 
< /SmoothStreamingMedia>
  

Notice there are two <StreamIndex> tags: One for the audio and one for the video. The StreamIndex audio tag has only one <QualityLevel> child tag, indicating that there is only one audio option. The StreamIndex video tag has four <QualityLevel> child tags, indicating that there are four video options - each wiht a different size and bitrate.

We can add the SmoothStreaming manifest URL to an HTML <video> tag, as shown in Listing 2.

Listing 2:

                    <video 
                           id="vid1" 
                           class="azuremediaplayer amp-default-skin" 
                           autoplay 
                            controls 
                           width="848" 
                            height="480" 
                           data-setup='{"nativeControlsForTouch": false}'> 
                         <source 
                                src="https://dgtestams-usea.streaming.media.azure.net/77ec142c-e655-41a2-8ddb-a3e46168751a/WIN_20201215_14_28_08_Pro.ism/manifest" 
                                 type="application/vnd.ms-sstr+xml" /> 
                     </video>
  

A full web page is shown in Listing 3:

Listing 3:

<html>
    <head>
        <link href="https://amp.azure.net/libs/amp/latest/skins/amp-default/azuremediaplayer.min.css" rel="stylesheet" />
        <script src="https://amp.azure.net/libs/amp/latest/azuremediaplayer.min.js"></script>
    </head>
    <body>
        <video id="vid1" class="azuremediaplayer amp-default-skin" autoplay controls width="848" height="480" data-setup='{"nativeControlsForTouch": false}'>
            <source src="https://dgtestams-usea.streaming.media.azure.net/77ec142c-e655-41a2-8ddb-a3e46168751a/WIN_20201215_14_28_08_Pro.ism/manifest" type="application/vnd.ms-sstr+xml" />
        </video>
    </body>
</html>
  
  

Fig. 6 shows the output of Listing 3 when viewed in a browser.

ams06-VideoTagInBrowser
Fig. 6

As you can see, clicking the "Quality" icon at the bottom right of the player allows the viewer to select the quality of the video. This is helpful if the user is on a lower bandwidth.

Note that you are charged extra when the Streaming Locator is running, so it is important to stop the Locator if you do not need it.

In this article, you learned how to use the SmoothStreaming URL to add your video to a web page.

Wednesday, January 20, 2021 8:03:00 AM (GMT Standard Time, UTC+00:00)
# Tuesday, January 19, 2021

In a previous article, I showed you how to use Azure Media Services to encode a video.

In this article, I will show you how to generate a URL, allowing others to view your encoded video online.

Navigate to the Azure Portal and to your Azure Media Services account, as shown in Fig. 1

ams01-OverviewBlade
Fig. 1

Then, select "Assets" from the left menu to open the "Assets" blade, as shown in Fig. 2.

ams02-AssetsBlade
Fig. 2

Select the Output Asset created by encoding your input video Asset to display the Asset details page, as shown in Fig. 3.

ams03-AdaptiveStreamingAsset
Fig. 3

Click the [New streaming locator] button (Fig. 4) to display the "Add streaming locator" dialog, as shown in Fig. 5.

ams04-NewStreamingLocatorButton
Fig. 4

ams05-AddStreamingLocatorBlade
Fig. 5

At the "Name" field, enter a descriptive name for this locator.

At the "Streaming policy" dropdown, select a desired Streaming Policy. A Streaming Policy define streaming protocols and encryption options. There are options to allow for streaming online or downloading and for adding encryption and Digital Rights Management. For this demo, I have selected "Predefined_DownloadAndClearStreaming". This allows users to view the video online and to download it; and it adds no encryption or DRM.

The flowchart in Fig. 7 is from the Microsoft Azure Documentation and will help you decide which Streaming policy is right for you.

ams06-StreamingPolicyFlowchart
Fig. 6

The Streaming Endpoint will not last forever. You must include an expiration date and time. By default, this is set to 100 years in the future. Change this if you want your video to be accessible for a shorter period of time.

Click the [Add] button to add the Streaming Locator.

The dialog will close and return you to the output Assets details page with the Streaming URL filled in, as shown in Fig. 7.

ams07-StartStreamingEndpoint
Fig. 7

The URL is still not accessible until you start the streaming endpoint. Click the [Start streaming endpoint] button and the [Start] button in the popup dialog to enable the endpoint URL, as shown in Fig. 8.

ams08-ConfirmStartStreamingEndpoint
Fig. 8

After doing this, the Streaming locator will show as "STREAMING" on the output Asset details page, as shown in Fig. 9. When the Streaming endpoint is started, you can preview the video from within the Asset details page.

ams09-ViewLocator
Fig. 9

Click the "View locator" link to display the "Streaming URLs" dialog. Select the "Streaming endpoint" from the dropdown, as shown in Fig. 10.

ams10-StreamingUrlsBlade
Fig. 10

Many URLs are displayed in this dialog. For the encoding I selected, the "Download" section contains a JPG URL and several MP4 URLs, as shown in Fig. 11.

ams11-Downloads
Fig. 11

You can paste the JPG URL into a browser to view a thumbnail image from the video. You can paste any of the MP4 URLs into a browser to view or download the full video. The MP4 URLs may differ by their resolution and encoding. Clues about which is which can be found in the name of each MP4. The JSON URLs provide metadata about the video and can be used in applications. For example,
https://dgtestams-usea.streaming.media.azure.net/77ec142c-e655-41a2-8ddb-a3e46168751a/WIN_20201215_14_28_08_Pro_1024x576_AACAudio_2478.mp4
contains a video that is 1024 pixels wide by 576 pixels high and was encoded with Advanced Audio Coding (AAC).

Try each of these in your browser to see the differences.

Note that you are charged extra when the Streaming Locator is running, so it is important to stop the Locator if you do not need it.

In this article, you learned how to create and start a Streaming Locator to make your Azure Media Services video available online.

Tuesday, January 19, 2021 9:46:00 AM (GMT Standard Time, UTC+00:00)
# Monday, January 18, 2021

Episode 645

Kevin Griffin on SignalR Real World Projects

Kevin Griffin describes some real-world applications that he has built using SignalR, including one system that saves lives.

http://signalrmastery.com/

Monday, January 18, 2021 9:05:00 AM (GMT Standard Time, UTC+00:00)
# Sunday, January 17, 2021

When the parents of Miles and Flora died, their uncle did not wish to raise them, so he hired a governess. The governess arrives at rural Bly Manor to find two sweet children - one of whom has been recently expelled from boarding school. She also begins to see spectral characters wandering the estate. The specters appear to be the ghosts of Miss Jessel - the previous governess - and Peter Quint - another employee of the uncle. In life, Jessel and Quint had a close relationship with the children and this relationship seems to continue after their deaths.

Henry James's The Turn of the Screw is a gothic ghost story, told in a mostly straightforward narrative. The young woman arrives and experiences the haunting and tries to protect the children under her care, fearing that they were corrupted by the ghostly couple before and after their deaths. The story is told in the first person with the unnamed governess acting as narrator, so we never know for sure if the ghosts exist outside of her own mind.

The American James does a good job in creating an English story and we get a feel for the gothic atmosphere and the British dialogue.

The author's biggest problem is that he frequently uses ten words to express a thought when five would easily do. As a result, his writing comes across as pretentious. It was difficult for me to get past this and enjoy the story.

Sunday, January 17, 2021 7:58:00 AM (GMT Standard Time, UTC+00:00)
# Saturday, January 16, 2021

In March 1965, Alabama police attacked a group of peaceful protestors as they crossed the Edmund Pettus Bridge in Selma, Alabama. John Lewis was among those participating in the Martin Luther King-led march protesting the state's racist unfair voting laws. Lewis was beaten and left bruised and bloodied that day.

Lewis's 2017 book Across That Bridge tells the story of that march; but it tells much more.

Lewis, who passed away last year at the age of 80, served over three decades as a US Congressman and spent and spent much of that time fighting for the rights of underrepresented and marginalized people. His place in the American Civil Rights movement is well-known and he provides insights from his experiences and from lives of Mahatma Ghandi, Bobby Kennedy, Nelson Mandela, and others.

Lewis relates key moments in the history of Civil Rights and places them in perspective. From these events, he draws his lessons about the effectiveness of nonviolent protests and a blueprint for this country going forward.

This book is part history; part autobiography; and part inspirational message. He divides it into short on the topics of faith, patience, study, act, peace, love, and reconciliation.

Here sampling of what Lewis has to say here:

"Freedom is not a state; it is an act."

"Nothing can stop the power of a committed and determined people to make a difference in our society. Why? Because human beings are the most dynamic link to the divine on this planet."

"Every generation leaves behind a legacy. What that legacy will be is determined by the people of that generation. What legacy do you want to leave behind?"

While not a comprehensive study, they complement one another well enough to make reading it worthwhile.

Saturday, January 16, 2021 9:04:00 AM (GMT Standard Time, UTC+00:00)
# Friday, January 15, 2021

In the last article, I showed you how to add Assets to an Azure Media Services (AMS) account. An Asset can point to an audio or video file, but you will want to encode that file to allow others to consume it. There are many encoding options. By encoding an audio or video, we can convert it into a format that can be consumed by others.

Those who are consuming your media are not all using the same systems. They may have different devices, different clients, different connection speeds, and different software installed. You will want to consider the capabilities and configurations of your users when you decide how to encode your media. Fortunately, Azure Media Services gives you many options.

We use an AMS Job to encode media. A job accepts an input Asset and produces an output Asset. That output Asset may consist of one or more files stored in a single Azure Storage Blob Container.

To begin, encoding, navigate to the Azure Portal and open an Azure Media Service, as shown in Fig. 1.

ams01-OverviewBlade
Fig. 1

Then, select "Assets" from the left menu to open the "Assets" blade, as shown in Fig. 2.

ams02-AssetsBlade
Fig. 2

See the following articles if you need help creating an AMS account or an AMS Asset.

Click the [Add job] button (Fig. 3) to display the "Create a job" dialog, as shown in Fig. 4.

ams03-AddJobButton
Fig. 3

ams04-CreateJobBlade
Fig. 4

The first thing you need to do is create or select a Transform. A Transform is a recipe for doing something, like encoding a video. It is used by a Job, which tells Azure to execute the steps in a Transform. I will assume this is your first time doing this and do not have any Transforms created, so you will need to create a new one; but in the future, you may choose to re-use an existing Transform on a new Job.

At the "Transform" radio button, select "Create new".

At the "Transform name" textbox, enter a name to help you identify this Transform.

At the "Description" field, you may optionally enter some text to describe what this transform will do.

At the "Transform type" field, select the "Encoding" radio button.

At the "Built-in preset name" dropdown, you can select a desired encoding output appropriate for your audience. For this demo, select "Adaptive Streaming". This will create files in multiple formats that can be consumed by a variety of clients.

Next, we configure the settings for the output asset.

At the "Output asset name", enter a name to help you identify the output Asset that will be created. Azure will supply a default name, but I prefer to use something more readable, such as the Input Asset name, followed by the type of Transform.

At the "Asset storage account" dropdown, select the storage account in which to save the container and files associated with this asset.

At the "Job name" field, enter a name for this job to help you identify it later.

At the "Job priority" dropdown, select "Normal", "High", or "Low" priority, depending on whether you want this job to take precedence over other jobs. Unless I have a compelling reason, I leave this as the default "Normal".

Click the [Create] button to create and queue up the job.

You can check the progress of the job by selectin "Transforms + jobs" in the left menu to display the "Transforms + jobs" blade, as shown in Fig. 5.

ams05-TransformJobsBlade
Fig. 5

Find the row with your Transform name (This why it is important to give it an easily identifiable name). Expand to see Jobs using this Transform, as shown in Fig. 6.

ams06-TransformAndJobsBlade
Fig. 6

The state column tells you whether the job is queued, running, or finished.

From the "Transform + jobs" blade, you can click the name of the Transform to display more details about the Transform, as shown in Fig. 7 or click the name of the Job to display details about the job, as shown in Fig. 8.

ams07-TransformDetailsBlade
Fig. 7

ams08-JobDetailsBlade
Fig. 8

After the job finishes, when you return to the "Assets" blade, you will see the new output Asset listed, as shown in Fig. 9.

ams09-AssetsBlade
Fig. 9

Click on the link in the "Storage link" column to view the files in Blob storage, as shown in Fig. 10.

ams10-Container
Fig. 10

Note that there are multiple MP4 files, each with a different resolution. The names of the file indicate the resolution of the video. This allows users with smaller screens or slower bandwidth to select the optimum resolution for viewing.

The container also contains a thumbnail image and several text files with information describing the videos that client players can use.

In this article, you learned how to use Azure Media Services to encode a video. In the next article, I will show you how to share that video with others.

Friday, January 15, 2021 9:39:00 AM (GMT Standard Time, UTC+00:00)
# Thursday, January 14, 2021

GCast 99:

PowerPoint Animations

Learn how to effectively animate objects in Microsoft PowerPoint.

Thursday, January 14, 2021 9:50:00 AM (GMT Standard Time, UTC+00:00)
# Wednesday, January 13, 2021

In this last article, I introduced Azure Media Services and showed how to create an Azure Media Services (AMS) account.

In this article, I will show you how to add video and/or audio assets to an Azure Media Services account. This is often the first step in sharing media online.

An Asset points to an Azure Storage Blob Container containing one or more files. These files contain either media or metadata about media. We distinguish between Input Assets (assets provided to AMS via a user or other external source) and Output Assets (assets produced by AMS jobs). Fig. 1 illustrates this relationship.

ams01-AssetsContainer
Fig. 1

Let's look at how to upload a video file from your local computer as an Asset, as illustrated in Fig. 2.

ams02-PublishDiagram
Fig. 2

Open the Azure Portal and navigate to the Azure Media Services account, as shown in Fig. 3.

ams03-OverviewBlade
Fig. 3

Select "Assets" in the left menu to open the "Assets" blade, as shown in Fig. 4.

ams04-AssetsBlade
Fig. 4

Click the [Upload] button (Fig. 5) to open the "Upload new assets" dialog, as shown in Fig. 6.

ams05-UploadButton
Fig. 5

ams06-UploadNewAsset
Fig. 6

At the "Storage account" dropdown, select the storage account in which you want to store the media file.

Click the "Upload files" icon and select the video file or files you want to upload.

More fields display for each file selected, as shown in Fig. 7.

ams07-UploadNewAsset-Completed
Fig. 7

Enter a name for each asset; then, click the [I agree and upload] button to begin uploading your video.

When the upload is complete, the asset will be listed, as shown in Fig. 8.

ams08-AssetsBladeWithAsset
Fig. 8

Click the link in the "Storage link" column to view the Storage Blob container and files associated with this asset, as shown in Fig. 9.

ams09-Container
Fig. 9

In this article, you learned how to upload a video file to create an Azure Media Services asset. You will want to encode this in order that others can view it. I will show how to encode in the next article.

Wednesday, January 13, 2021 9:01:00 AM (GMT Standard Time, UTC+00:00)
# Tuesday, January 12, 2021

Streaming video online is an effective way to communicate to large numbers of people.

But there are challenges. You need to get your video online in a format that is accessible to others and make it available to your audience.

You may also want to provide closed captioning for hearing impaired users; analyze the contents of your audio and video; reduce latency with a Content Delivery Network; and secure your media appropriately.

Azure Media Services provides all these capabilities and does in a highly scalable, fault-tolerant way.

The first step in using Azure Media Services is to create an Azure Media Services Account. As with most, services in Azure, you can create an Azure Media Services Account in the Azure Portal by clicking the [Create a resource] button (Fig. 1); then search for and select "Media Services", as shown in Fig. 2.

ams01-CreateAResourceButton
Fig. 1

ams02-New
Fig. 2

The "Create media service account" dialog displays, as shown in Fig. 3.

ams03-CreateMediaServiceAccount
Fig. 3

At the "Subscription" dropdown, select the Subscription that will contain this Media Service Account. Most of you will have only one subscription.

At the "Resource group" field, select a Resource Group to contain this account or click the "Create new" link to create a new Resource Group to contain it. A Resource Group is a logical grouping of Azure resources, making it easier for you to manage them together.

At the "Media Services account name" field, enter a unique name for this account. This name must be between 3 and 24 characters in length and can contain only numbers and lowercase letters.

At the "Location" dropdown, select a location in which to store this service. When selecting a location, consider the location of your users and any potential legal issues.

At the "Storage Account" field, select an existing storage account from the dropdown or click the "Create a new storage account" link to create a new storage account. This storage account will hold all the assets for your service, including audio files, video files, and metadata files. Unless I have media files that already exist, I tend to prefer to keep all my Azure Media Services assets in their own storage account.

Click the [Review + create] button to display the summary page, as shown in Fig. 4.

ams04-Review
Fig. 4

Check the "I have all the rights to use the content/file" checkbox and click the [Create] button to begin creating you Azure Media Services Account.

When the service account is complete, the confirmation shown in Fig. 5 displays.

ams05-DeploymentIsComplete
Fig. 5

Click the [Go to resource] button to navigate to the "Overview" blade of the Media Service account, as shown in Fig. 6.

ams06-OverviewBlade
Fig. 6

In this article, you learned the advantages of Azure Media Services and how to create an Azure Media Services account. In the next article, I will show you how to add media assets to this account.

Tuesday, January 12, 2021 9:57:00 AM (GMT Standard Time, UTC+00:00)
# Monday, January 11, 2021

Episode 643

Mike Benkovich on GitHub Actions and Visual Studio

Mike Benkovich on GitHub Actions and Visual Studio Mike Benkovich describes and demonstrates GitHub Actions and the new features of Visual Studio that allow you to create an Action from within the IDE.

http://benkotips.com/
Monday, January 11, 2021 9:46:00 AM (GMT Standard Time, UTC+00:00)
# Saturday, January 9, 2021

2020 began with trips to Dallas, TX and Charlotte, NC and it appeared that this year would be similar to 2019 - traveling for customers and OpenHacks in my role as a software engineer for Microsoft's CSE organization.

But that all changed in March when my team canceled a planned trip to Charlotte to minimize the risk of spreading coronavirus.

After that cancellation, I did not fly on a plane and I barely left the upper Midwest.

Still, it was an eventful year for me and for the whole world.

Family

My son Nick completed his first season as head coach at Kalamazoo College. He inherited a program that has not had a winning record in 17 years. The Hornets made some positive steps under his leadership, breaking several offensive records. COVID has postponed the 2020-21 season, which is now scheduled to begin in February, so he and his team are currently preparing to compete again in the Michigan Intercollegiate Athletic Association. In bigger news, Nick proposed to his longtime girlfriend Adriana and the two plan to marry in 2022.

In November, my son Tim accepted job with Microsoft Consulting Services. He will be working with the US Government, using his knowledge of Microsoft Dynamics. Although we are on different teams, I am very excited to be his colleague.

Both of my sisters sold their houses this year - one moved to a place with a much bigger yard and one downsized to a smaller place (which I have not yet seen)

My brother was hospitalized with COVID-19 this summer in Arizona but has recovered and is now reunited with his family in Australia.

Travel

My work travel ceased early in the year, thanks to the pandemic; but I did manage a couple trips later in the year.

I traveled to Michigan in early October to sponsor my nephew's Confirmation.

In late October, I took a weeklong vacation and drove to northern Michigan, visiting my friends Pat and Susan in Petoskey before driving to Michigan's Upper Peninsula for my first extended visit to this region.

In November, I took another week off and drove south, spending a few days each in St. Louis, Memphis, and Nashville. During my stay in Memphis, I was able to make my first visits to the states of Arkansas and Mississippi, bringing me closer to my goal of visiting all 50 US states.

I finally took vacation the last 3 weeks of December, but stayed close to home, as the country's lockdown intensified.

Concerts

For the past few years, I have been increasing my concert attendance. The current pandemic forced the closing of Chicago concert halls for months and reduced the schedule and capacity after they re-opened. In the fall, I was able to see some very good local and regional artists at venues that practice social distancing. SPACE in Evanston and Jazz Showcase in Chicago's South Loop were favourite destinations, but a spike in statewide infections forced these venues to close again, along with other places in the city. Prior to the Spring shutdown, I did manage to catch They Might Be Giants - a band I have always enjoyed but never seen live.

Volunteering

I did far less volunteering this year than in the past. The only significant exception was when I mentored Chicago high school students for the Illinois STEM Challenge. To compensate for my decrease in physical contributions, I donated more money to charities than I ever have before. My favourite donation happened when I asked Facebook friends to contribute to the National Suicide Prevention Hotline, promising to match all donations up to $500. This campaign raised over $1200 for a worthy cause.

Exercise

All gyms in Chicago were closed for months, so it was tempting to stay home and get fat. To combat this, I came up with a daily 20-minute exercise routine that I stuck with for most of the year. I also did a tremendous amount of bike riding - mostly around the city of Chicago. I made a point of riding almost every day that weather and available daylight permitted. I rode over 1500 miles this year.

As a result, I was able to lose about 20 pounds. Sadly, I gained back 10 of those pounds over the holidays. Back to work!

Reading

I accelerated my reading - especially in the summer. I completed 92 books in 2020 and reviewed 85 of them. You can follow my progress here.

Blogging

I continued my blogging in 2020, posting 182 entries for the year - an average of about 1 every 2 days.

I kept up my 2 TV shows - Technology and Friends and GCast throughout most of the year. I was forced to make a significant change to T&F, switching from exclusively in-person interviews to virtual meetings over Teams or Zoom. It was either that or pause the show indefinitely until we could interact physically again.

My job

This year felt a bit like treading water. My team worked on projects steadily throughout 2020, but at no point did we have high pressure or impossible deadlines. I had a chance to work on two Java projects and I learned a lot about the Spring framework, but I do not think I progressed as much as in years past. The good news is that I have a secure job with a stable company. Repeatedly, company management reinforced the message that it was acceptable for us to feel the stress of 2020 - a message that I appreciated.

Reason for Optimism

I consider myself lucky. Although this year brought change and disruption, it was not the catastrophe it was for many. So many people lost their jobs and/or their health and/or their loved ones this year; so many had to learn to adjust to having young children at home during the week; so many had to learn how to do their job remotely; so many placed themselves in harm's way because their jobs were considered essential.

Seeing others rise to these challenges, it is easy to accept a year with less travel.

Saturday, January 9, 2021 3:06:50 PM (GMT Standard Time, UTC+00:00)
# Thursday, January 7, 2021

GCast 98:

Using the Azure Storage Explorer

The Azure Storage Explorer provides a simple way to access objects in an Azure Storage Account. This video walks you through how to install and use this tool.

Thursday, January 7, 2021 9:03:00 AM (GMT Standard Time, UTC+00:00)
# Tuesday, January 5, 2021

An Azure Resource Group (RG) is a logical grouping of resources or assets within an Azure subscription. This helps you organizing related resources - You can open an RG to see a web app, its associated App Service Plan, and the database that it accesses listed - to remind you that these things are related.

But there are more tangible benefits to Resource Groups.

For example, I create a lot of Azure demos for presentations that I deliver in-person, online, or as part of my GCast show. https://aka.ms/gcast

When I create a demo, I place all assets in the same resource group, which makes it easier to delete all these demo resources when the presentation ends.

Another advantage is the ability to create an ARM for all resources in a Resource Group with a few mouse clicks. This allows you to easily automate the deployment of these resources to a new environment using PowerShell or the Azure CLI. With an ARM, resources are created in the correct order and input parameters allow you to change things like the names and locations of these resources.

Azure also gives you the ability to move everything in a Resource Group from one subscription to another.

Finally, Azure allows you to merge two resource groups.

You can create a new Azure Resource Group in the Azure Portal (either by itself or as part of a resource that will be added to the group); via a REST API; via the Azure CLI; or using Azure PowerShell.

When deciding how to organize your Azure assets, consider keeping together related resources by placing them in the same Resource Group. Also, consider creating a new Resource Group for each of your deployment environments, such as Development, Testing, and Production.

Tuesday, January 5, 2021 9:47:00 AM (GMT Standard Time, UTC+00:00)
# Monday, January 4, 2021

Episode 642

Javier Lozano on Virtual Conferences

Ten years ago, Javier Lozano started .NET Conf - an online conference to educate people about Microsoft products. Javier discusses the challenges in creating this and other online tech events.

Links:
https://obsproject.com/
https://streamyard.com/

Monday, January 4, 2021 9:37:00 AM (GMT Standard Time, UTC+00:00)
# Sunday, January 3, 2021

1/3
Today I am grateful to charitable organizations that find uses for my excess stuff.

1/2
Today I am grateful
-to watch football yesterday with my sons
-to have my son Nick visit here for the week

1/1
Today I am grateful for the possibilities that a new year brings.

12/31
Today I am grateful to catch up with Ondrej and Hattan this week.

12/30
Today I am grateful
-to wake up to a blanket of snow over the city
-to watch Premier League Soccer with my sons yesterday.

12/29
Today I am grateful that my son is visiting me this week.

12/28
Today I am grateful for a second pair of eyeglasses - ideal for reading my computer screen.

12/27
Today I am grateful for a second pair of eyeglasses - ideal for reading my computer screen.

12/26
Today I am grateful for a virtual Christmas celebration with my family yesterday.

12/25
Today I am grateful that God loved us enough to send us his only son.

12/24
Today I am grateful:
-to return to the dentist for the first time in over a year
-for an unseasonably warm day yesterday and hours spent outside

12/23
Today I am grateful to hang out virtually last night with Lee, Matthew, and Serene.

12/22
Today I am grateful to exchange emails with old friends this week.

12/21
Today I am grateful for "Fargo"

12/19
Today I am grateful for my safe deposit box, which is now holding my Will and Power of Attorney.

12/18
Today I am grateful to hang out virtually with Mike this morning.

12/17
Today I am grateful to have my towel rack and toilet handle repaired.

12/16
Today I am grateful:
-for a portrait from David
-to my son who drove over to fix my TV last night
-to start my vacation

12/15
Today I am grateful for Doctor Who

12/14
Today I am grateful for my son's first day working at Microsoft.

12/13
Today I am grateful to drive around Lincolnwood last night with friends looking at holiday light displays.

12/12
Today I am grateful for spellcheckers

12/11
Today I am grateful for surprisingly mild weather yesterday.

12/10
Today I am grateful to fix the switch that toggles water flow between shower and bath, so it no longer sends half the water to each.

12/9
Today I am grateful to my friend Jerry, who shares the knowledge whenever he learns a new word.

12/8
Today I am grateful that my brother is back with his family after months in the US and weeks quarantining in Australia.

12/7
Today I am grateful for a walk around my neighborhood with my son before he drove home yesterday.

Sunday, January 3, 2021 4:09:28 PM (GMT Standard Time, UTC+00:00)
# Saturday, January 2, 2021

Liane Moriarty's 2014 novel Big Little Lies is about secrets in a small town. The story focuses on three friends in Pirriwee - a beach town north of Sydney, Australia.

Single mother Jane arrives in Pirriwee with her 5-year-old son Ziggy. At Ziggy's kindergarten, he is accused of choking one of his female classmates. Rumors about Ziggy continue throughout the school year and some of the Kindergarten parents pressure the school to remove the boy. The Parents take sides in this battle. Two mothers - Madeline and Celeste - befriend Jane and ally themselves with her.

At the novel's beginning, the reader learns that a murder will be committed. This murder is referenced throughout the story, but we must wait until the end to learn who is involved and why.

Moriarty slowly and masterfully peels away layers of her characters to reveal their flaws and the secrets they are hiding.

Madeline is jealous of the affection her daughter Abigail shows to her ex-husband and his new wife Bonnie. Abigail initiates a fundraising campaign that shocks her parents and stepparents.

Celeste is a beautiful woman with two beautiful twins. Her rich, handsome husband Perry is charming and generous; but he flies into a range every few months and beats his wife. Even her closest friends don't suspect the tragedy of her marriage.

And Jane is hiding a dark secret about Ziggy's father.

On one level, the book is a humorous tale of catty, desperate housewives in a suburban community. But Moriarty takes it far beyond that. It is a story of strong women trying to survive against real problems. It is filled with victim blaming, including self-blame by the victims themselves. It shines a light on spousal abuse, bullying, sexual assault, and gossip.

I enjoyed it to the end.

Saturday, January 2, 2021 9:33:00 AM (GMT Standard Time, UTC+00:00)