Episode 657

Wolfgang Goerlich on Cyber Security Design Principles

Wolfgang Goerlich has written a series of articles featuring the ideas of classic designers, which he relates to principles of cyber security.

https://jwgoerlich.com/blog/
https://jwgoerlich.com/principles-for-designing-security-capabilities/


"Alright! Alright! Alright!"
- Wooderson

Matthew McConaughey sees the world in terms of Red Lights (things that stop us), Yellow Light (things that slow us down), and Greenlights (things that allow us to move forward) and explains how he has been able to convert Red and Yellow lights into Greenlights. Greenlights is, of course, the title of McConaughey's 2020 autobiography.

The book is a series of anecdotes, mostly about overcoming adversity and turning negatives into positives. He grew up in a dysfunctional family with an overbearing, sometimes violent, redneck father, but he learned some valuable lessons about self-reliance from that father.

While a high school exchange student, he was assigned to live with a crazy Australian family who tried to control all his actions, but he asserted himself and was able to maintain his independence and move to a more normal home.

He was a film student struggling to find his first break when he won his first movie role, playing Wooderson in Richard Linklater's "Dazed and Confused" - a small part, but a memorable character in a movie that would later become a cult favourite.

When confused about his next step, he took a sabbatical to travel along the Amazon River or through central Africa or across America - in each case returning with greater clarity.

After establishing himself as a bankable leading man in romantic comedy films, he decided he needed new challenges and refused to accept any more rom-com roles. After a few months, the phone stopped ringing; but he eventually landed the lead in "The Dallas Buyers Club", which earned him his first and only Academy Award.

In each case, McConaughey was able to create a positive (or "Greenlight") through a combination of talent, positive thinking, hard work, cleverness, and perseverance. McConaughey comes across as an eternal optimist who lives life on his own terms. He was blessed with looks and talent, but he did not rely solely on that. He also comes across as a bit of an oddball, as he describes his drug use and his wet dreams.

Each chapter includes at least one poem or a philosophical statement or a "Note to Self" or a clever bumper sticker that relates to the coming or preceding story. It is a bit cheesy, but it works.

One wonders about the veracity of his stories: Did he really fight a champion wrestler to a draw in remote Mali? Was teenage McConaughey as successful at outwitting adults as he claims?

But we cannot doubt the entertainment value. McConaughey speaks with an engaging humor and his stories are fun.


Episode 656

Matthew Renze on the AI Developers Toolkit

Consultant and trainer Matthew Renze describes the different categories of Artificial Intelligence and Machine Learning, as well as appropriate tools for each category.

https://matthewrenze.com/

In Jack Kerouac's On the Road, narrator Sal Paradise and his friends crisscross the United States, searching for America, God, and themselves. Along the way, they also search for jazz, booze, drugs, girls, and adventure.

Although Sal narrates, this is really the story of his friend Dean Moriarity. Dean constantly lives in the moment - experiencing life to the fullest and searching for thrills and satisfaction at each turn. He falls in love and marries and fathers children with no sense of responsibility and no thought of the future. Sal follows along, soaking in the energy that Dean exudes.

They live fast and they observe the sights and sounds and smells of all they encounter; they connect with people; they drink in jazz clubs and feel the music flowing through them. It all sounds great, but there are consequences. Dean is self-absorbed and, although charming and fun, feels no responsibility to others. The ex-wives and children he leaves behind suffer the consequences of his abandonment; and the drug use eventually take a heavy toll on Dean's health.

This was the novel that defined the "Beat Generation" - that inspired millions to dream of freedom from social mores. It is entirely impractical, but it is a wonderful ride.


Episode 655

Ted Neward on Technology Culture

Ted Neward describes things that Rocket Mortgage and Quicken Loans is doing to develop and evolve their culture within the IT departments.


March 2021 Gratitudes

Comments [0]

4/4
Today I am grateful
-to spend yesterday with my sons and  their girlfriends
-to see an exciting NCAA semi-final game last night

4/3
Today I am grateful to hang out virtually with Josh yesterday.

4/2
Today I am grateful to Jesus Christ, who died for my sins.

4/1
Today I am grateful for all the success by the BIG10 teams in this year's NCAA Tournament.

3/31
Today I am grateful for
-a free lift pass yesterday
-making my first unassisted ski run

3/30
Today I am grateful for
-a walk around downtown Park City, UT yesterday
-a gift of a massage yesterday

3/29
Today I am grateful for:
-My first experience snow skiing yesterday
-Dinner last night with Robert and Colette

3/28
Today I am grateful to see a Jazz - Grizzlies game in Salt Lake City last night.

3/27
Today I am grateful for my first visit to Utah.

3/26
Today I am grateful to begin my first vacation of 2021 today.

3/25
Today I am grateful to Dave for showing me how to save $150 a year on my AmEx card.

3/24
Today I am grateful for Inbox Zero.

3/23
Today I am grateful to put my emissions test and plate removal behind me.

3/22
Today I am grateful for a visit to the Chicago Botanic Garden yesterday.

3/21
Today I am grateful to hear of all those who have received or scheduled a vaccine.

3/20
Today I am grateful for 12 hours of much needed sleep last night.

3/19
Today I am grateful to receive my second COVID-19 vaccination yesterday.

3/17
Today I am grateful for my CPAP machine.

3/16
Today I am grateful for home-cooked meals.

3/15
Today I am grateful for 23 consecutive NCAA Tournament appearances.

3/14
Today I am grateful for my first oil change of the year.

3/13
Today I am grateful I was able to resolve yesterday's issue viewing MS Teams on my phone.

3/12
Today I am grateful for ice cream.

3/10
Today I am grateful to receive thousands of dollars of my unclaimed money from Michigan and Illinois.

3/9
Today I am grateful for great books.

3/8
Today I am grateful for all of the amazing women I've known in my life.


When poet John Shade died, he left behind his just-completed epic poem "Pale Fire", which was snatched up by his neighbor and colleague Charles Kinbote, who planned to write an analysis of the poem. Kinbote - an immigrant from the northern European country of Zembla - expected the poem to be about Zembla's ousted king Charles the Beloved, as Kinbote had been relaying stories of Zembla and its king to Shade for months and assumed this would serve as inspiration for his epic poem. He is disappointed to learn the poem is about Shade's impressions on life and death - particularly the death of his daughter Hazel.

Kinbote analyzes the poem anyway, but quickly turns his focus away from Shade's words toward himself, his relationship with Shade, his conflicts with Shade's wife, and the escape of King Charles from Zembla. He begins by describing (and likely inflating) his close kinship with the author; then describes his stalking of the author during the writing of the poem; followed by a detailed description of the ouster of the King Charles. Frequently, Kinbote follows a sentence fragment of the poem with a multi-page monologue completely unrelated to that fragment. On rare occasions when the analysis focuses on the poem itself, Kinbote admits that he cannot be bothered to look up any references.

In Pale Fire, Vladimir Nabokov weaves a great deal of humour into his work. Kinbote suffers from extreme hubris - exaggerating the influence he had over Shade's work and underestimating the contempt in which he is held by everyone around him. Of course, everything is imaginary - the poet, the narrator, the king, and Zembla. The unreliable narrator provides his own absurd story, weaving together fact, fiction, personal prejudices, and narcissistic rants about himself. In the end, it is impossible for the reader to identify exactly what is real.


Episode 654

Dave Hoerster on Azure Active Directory B2C

Cloud Solution Architect Dave Hoerster describes how to use Azure Active Directory B2C to manage identity and security for a Business-to-Consumer application.

https://docs.microsoft.com/en-us/azure/active-directory-b2c/

Margaret Mitchell's Gone with the Wind has two major characters: Scarlett O'Hara and the American South.

Scarlett was a feminist almost before "feminism" was a word. She was pretty and intelligent and every boy in the county wanted her and she knew it. But she was also selfish and entitled and arrogant and manipulative and racist. 900 pages and 12 years later, Scarlett is still all these things; but she is one more thing: she is a survivor. The Civil War, the invasion of Atlanta, the defeat of the Confederacy, the occupation of Georgia by Northerners and carpetbaggers, and the dismantling of the lifestyle enjoyed by Southern aristocracy broke many of her friends and neighbors. But Scarlett rose up and managed to rebuild a life for herself and her family. She saved her family home and became a successful businesswoman. She did so through intelligence and determination and sometimes through unethical behavior.

Scarlett grew up among the landed gentry of the antebellum South, surrounded by people who welcomed Civil War as an opportunity to prove their superiority over the invading Yankees. Of course, they were wrong. The war killed many of their young men, destroyed their homes and fortunes, freed their slaves, and dismantled their way of life. Their reaction to this upheaval is a major theme of this epic story. When the war ends, Scarlett's contemporaries are ill-equipped to handle the changing times. They cling to the old ways, despite the changing world. Scarlett is one of the few who adapts. No one questioned the institutions they had always known. Nor did they doubt these institutions would last forever.

The book's love triangle is well-known. As a teenager, Scarlett was in love with Ashley Wilkes, who married Melanie and was honor-bound to remain faithful. Meanwhile, the handsome but roguish Rhett Butler pursued Scarlett for years. Rhett assumes that he and Scarlett are destined for one another because they are so much alike, but their similarities lead to most of their conflicts.

When discussing this novel, one cannot ignore the topic of race. A caste system existed in the American South before and after the Civil War. Plantation owners, small farmers, white trash, house slaves, and field slaves each had their place in this society and that place was often enforced by the law and sometimes it was enforced with violence. When the North won the war and sought to punish the Confederacy, white southerners were resentful of the unfairness, but were unwilling to consider the generations of injustices they themselves had inflicted on people of color. And although the novel is full of racial stereotypes and the dialogue is rife with ethnic slurs, one must recognize that it was written by a white southerner over 80 years ago and covers a period in which ownership of non-white human beings was legal in this country. The plantation owners of Mitchell's novel do not chain their slave or physically abuse them (much); but they do look upon them as children incapable of fending for themselves; and they convince themselves that slavery is a better life for a negro than emancipation under Yankee rule; and they are surprised when most of their slaves escape as soon as the invading army provides the opportunity. Mitchell shows these sides of southern society; but she also points out the hypocrisy of northern women who looked down on black people; and she shows many example of the second-class treatment of women in nineteenth century society. Although Mitchell seems to paint the best negroes as those who are most loyal to their masters, she also provides us with strong and intelligent black characters like Mammy, Dilcey, Pork, and Uncle Peter. It is a complex topic in a complex novel filled with complex characters.

Scarlett is the most complex of them all. She lacks the kindness of Melanie and the intelligence of Mammy and the sensitivity of Ashley and the humor of Rhett; but her strength and her flaws make her one of the most fascinating heroines in literature. She rebels against the expectations that society has for a woman in her quest to become self-sufficient.

GWTW is a story of survival in the face of adversity and of doomed love and of retaining a culture that is no longer relevant. It is ab=n adventure story, a love story, a war story, and a coming-of-age story.

Margaret Mitchell wrote only one book in her life, but she made it count.


Episode 653

Jason Farrell on Kubernetes

Jason Farrell describes how to use Kubernetes to manage container instances, as well as how to manage clusters in the cloud.

Links:
https://kubernetes.io
https://www.cncf.io


As a young man, Ernest Hemingway worked as a newspaper reporter and as a wartime ambulance driver in Spain. Hemingway draws on both experiences in his first novel: The Sun Also Rises. The story is set mostly in 1920s Spain and is told with the directness and conciseness of a newspaper article.

Narrator Jake Barnes is an American journalist living in Paris in the 1920s. He and his friends decide to travel to Spain - first to go fishing in the mountains; then to attend a festival in Pamplona, featuring bullfighting and the famous Running of the Bulls. Among Jake's friend is Britt - known as "Lady Ashley". Britt is having an affair or has had an affair with most of the group. In Pamplona, the group drinks heavily and Britt hooks up with a local matador.

This book lacks a strong plot, but focuses more on defining the characters through their dialogue and their actions. Hemingway writes with a refreshing simplicity - without wasted words or flowery language. His description of the bullfights paints a picture for the reader as if we were present in the ring.

The Sun Also Rises is a story of sexual liberation and doomed relationships and the endless pursuit of pleasure by the so-called "Lost Generation" - damaged by the first World War and drifting through life without purpose.

It is no surprise it has endured so long.


GCast 107:

Live Streaming with Azure Media Services

Learn how to broadcast a live video event using Azure Media Services


Kevin Ashley on AI for Design Art and Games

Kevin Ashley has a new book titled "Awesome Artificial Intelligence: Design, Art, Games", which shows how to use AI to create and enhance artwork. He talks about the theory behind this and how to get started.

Links:

Kevin's book on Kickstarter

Kevin's first book

Betsy Edwards’s book


February 2021 Gratitudes

Comments [0]

3/7
Today I am grateful for the Marvel Cinematic Universe.

3/6
Today I am grateful to complete a complicated task on my current project and to those who helped me with it.

3/5
Today I am grateful I have been able to work with my Personal Trainer 11 times in the last 25 days.

3/4
Today I am grateful to Tim, who helped me mentor high school students yesterday.

3/3
Today I am grateful for my new tea infuser balls and loose leaf teas.

3/2
Today I am grateful to everyone who sent me birthday wishes yesterday - especially those who included a personal message.

3/1
Today I am grateful for an unexpected phone call from Kelly yesterday.

2/28
Today I am grateful for my first bike ride of the year yesterday.

2/27
Today I am grateful that my life has improved in almost every way in the last 20 years.

2/26
Today I am grateful to receive the COVID-19 vaccine yesterday.

2/25
Today I am grateful for free movies from the public library.

2/24
Today I am grateful that the bitter cold weather in Chicago seems to be behind us.

2/23
Today I am grateful to be a guest on the "Visual Studio Toolbox" show for the first time.

2/22
Today I am grateful to binge-watch TV shows.

2/21
Today I am grateful to stream Kalamazoo College basketball games online

2/19
Today I am grateful that I fall asleep much more easily now than I used to.

2/17
Today I am grateful for a blanket of snow across the city.

2/16
Today I am grateful to spend almost all of yesterday reading for pleasure.

2/15
Today I am grateful for a chiropractor across the street from my home.

2/14
Today I am grateful for new artwork on my wall.

2/13
Today I am grateful for an end to a difficult week.

2/12
Today I am grateful for all the years that Chick Corea made music for us.

2/11
Today I am grateful for this combination scale / cutting board - a gift from my son.

2/10
Today I am grateful for a gift of thermal clothing from my sons.

2/9
Today I am grateful to return to working with my personal trainer after a long hiatus.

2/8
Today I am grateful for Super Bowl commercials.


Cassie Bowden is a flight attendant who makes very bad choices.

She frequently drinks until she blacks out and she often has sex with random strangers during these blackouts.

Surprisingly, she has suffered few long-term consequences for her choices; but that changes one morning in Dubai, when she wakes up next to a naked man with a slit throat.

Chris Bohjalian's 2018 novel The Flight Attendant follows Cassie as she flees the crime scene in Dubai, through the suspicion cast on her, and her chronic self-destructive behavior.

The action switches from the Middle East to New York to Rome and we get a peek inside Cassie and her pursuers, building both the action and the characters. Bohjalian does a good job developing the backgrounds and flaws of his main characters, particularly the title character and the assassin who lurks in the background. Each is plagued with daddy issues that contributed to the life they are currently leading.

I enjoyed the flawed protagonist and the espionage mixed throughout the book. The ending felt a bit rushed as some of the twists came a little too suddenly, but I can forgive this.

Overall, this was an entertaining read.


GCast 106:

Audio Transcription and Captioning with Azure Media Services

Azure Media Services can analyze an audio or video file and transcribe speech into text. You can then take the generated files and provide synchronized captioning for your video.


Episode 650

Christos Matskos on Microsoft Identity Platform

Microsoft Identity Platform is a set of authentication service, open-source libraries, and application management tools. Christos Matskas describes these tools and how to use them to make your application more secure.

Links:
https://docs.microsoft.com/en-us/azure/active-directory/develop/
https://docs.microsoft.com/en-us/azure/active-directory/develop/sample-v2-code
https://www.twitch.tv/425show


Fragile Things is a collection of 25 short stories and 7 poems written by Neil Gaiman.

Most of the stories have dark - even macabre - themes. One tells how demons are created in Hell; in another, a man discovers that he has been living his entire life in a computer simulation; still another involves a boy's sexual enslavement by an ultra-rich man.

Some are more fully fleshed out than others, as if Gaiman began a longer novel before giving up; but these are worth including because Gaiman has such a gift for language and knows how to tell a story, even if it is a partial story.

Each story is independent of the others, but some exist in the same universe. For example, the wealthy Mr. Alice and his employee Mr. Smith appear in two different stories.

A couple satires or homages to the writings of other authors - C.S. Lewis's The Chronicles of Narnia and Arthur Conan Doyle's Sherlock Holmes; and a few are inspired by art and music heard by Gaiman.

My favourite entry was the longest and final story in the collection - The Monarch of the Glen, which featured Shadow of American Gods and takes place a couple years after that novel.

Nearly everything in this book has appeared elsewhere and I had already read a few of the stories, but I enjoyed them again this time around.


GCast 105:

Analyzing a Video with Azure Media Services

Learn how to use Azure Media Services to apply Artificial Intelligence and Machine Learning to a video, analyzing such things as face detection, speech-to-text, object detection, and optical character recognition


Episode 649

Richard Taylor on the Microsoft Revenue Recognition System

Richard Taylor is working on a system to process revenue received by tech giant Microsoft. He discusses the challenge in building and maintaining a large system like this and in migrating it to Azure.


Tommy James and the Shondells turned out hit after hit in the 1960s. But James saw very little of the royalties generated by sales of his records. That money was controlled by crime boss Morris Levy, who signed a teenage James to a deal with his Roulette Records in 1966. The band went on to release two #1 records and  a dozen Top 40 singles over the next 5 years.

But Levy was notorious for non-payment of debts including tens of millions of royalties owed to James. James was forced to earn his money through constant touring and profited very little off the sale of his records.

Despite this betrayal, James and Levy maintained a close relationship throughout much of their lives. Levy was excellent at promoting James's music and James enjoyed a great deal of artistic freedom as Roulette's biggest star. James's career also benefited from Levy's strong-arm tactics: He would often bully songwriters into saving their best work for his artists.

Me, the Mob, and the Music: One Helluva Ride with Tommy James and the Shondells is Tommy James's story of life in the spotlight. It contains the usual anecdotes about women and booze and drugs that seem to be part of every rocker's life. But these stories are secondary to his interactions with Roulette and Levy.

The story climaxes in a gang war that sees Levy fleeing the country and James fearing for his life.

One wonders why James continued his relationship with Levy when he was treated so unfairly. Did he feel it was unsafe for him to leave? Was he a victim of Stockholm Syndrome? Did the career advantages of associating with Roulette outweighed the financial disadvantages?

One  wonders if the corruption at Roulette was a microcosm of the corruption in the entire music industry in the 1960s; and if that corruption continues today.

One wonders if Tommy James ever received all the royalties he was due.

Despite the unanswered questions, this book was an enjoyable read about an unlikely hitmaker and his adventures with the underbelly of the industry.


GCast 104:

Sharing a Video Online with Azure Media Services

Learn how to use Azure Media Services to share a video on the web for streaming and/or for downloading.


Episode 648

Julie Lerman on Entity Framework Core 5

Julie Lerman describes some of the new features included in EF Core 5.


Alexander Portnoy has issues.

An overprotective mother left him straddled with guilt and an Oedipal complex. His childhood memories are dominated by unpleasant bodily functions - his father complaining of persistent constipation; his mother accidentally spilling a drop of menstrual blood on the kitchen floor; his own inability to wipe himself completely or to control his masturbation.

Portnoy was raised by Jewish parents, grew up in a Jewish neighborhood, attended a Jewish school, and all his friends were Jewish. As an adult, he became obsessed with seducing attractive non-Jewish women ("shikses", as he calls them). But Portnoy has no interest in a real relationship. When referring to his past lovers, he is more likely to call them by a nickname than to use their real name. He calls his latest lover "The Monkey" after a past sexual incident she confessed to him. This is just one way in which he dehumanizes women, treating them only as sex objects. The Monkey is absurdly ignorant, but Portnoy stays with her because she is beautiful and good in bed; Portnoy is overtly misogynistic, but The Monkey stays with him because she hopes that he will marry her.

Portnoy's Complaint by Philip Roth is a satirical confession of a 33-year-old sex addict, who recognizes his self-destructive behavior and feels extreme guilt over it; but is powerless to correct these flaws. Despite his numerous faults and our very different upbringings, I was able to relate to his life.

The story is humorous, but crude. It is crude, but humorous.

I feel a little guilty for enjoying it so much.


GCast 103:

Encode a Video with Azure Media Services

Learn how to use Azure Media Services to encode a video into multiple formats, including support for adaptive streaming.


In previous articles, I showed how to use Azure Media Services (AMS) to work with video that you upload. In this article, I will show how to broadcast a live event using AMS.

Before you get started, you will need some streaming software. For the demo in this article, I used Wirecast from Telestream. Telestream offers a free version, which is good for learning and demos but not for production, as it places a watermark on all streaming videos.

You will need to create an Azure Media Services account, as described in this article.

After the Media Service is created, navigate to the Azure Portal and to your Azure Media Services account, as shown in Fig. 1.

ams01-OverviewBlade
Fig. 1

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

ams02-LiveStreamingBlade
Fig. 2

Click the [Add live event] button (Fig. 3) to open the "Create live event dialog", as shown in Fig. 4.

ams03-AddLiveEventButton
Fig. 3

ams04-CreateLiveEvent
Fig. 4

At the "Live event name" field, enter a name for your event.

You may optionally enter a description and change the Encoding, Input protocol, Input ID, or Static hostname prefix.

Check the "I have all the rights..." checkbox to indicate you are not streaming content owned by anyone other than yourself.

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

ams05-CreateLiveEventConfirmation
Fig. 5

If any validation errors display, return to the "Basics" page, and correct them.

Click the [Create] button to create the live event.

When the event is created, you will return to the "Live streaming" blade with your event listed, as shown in Fig. 6.

ams06-LiveStreamingBlade
Fig. 6

Click the event name link to display the event details, as shown in Fig. 7.

ams07-LiveEvent
Fig. 7

Click the [Start] button (Fig. 8) and click [Start] on the confirmation popup (Fig. 9) to start the event.

ams08-StartButton
Fig. 8

ams09-ConfirmStart
Fig. 9

When the event is started, the event details page will show information about the input, as shown in Fig. 10.

ams10-LiveEvent
Fig. 10

The "Input URL" textbox (Fig 11) displays a URL that you will need in your streaming software. Copy this URL and save it somewhere. You will need it in your streaming software.

ams11-InputUrl
Fig. 11

For the next part, you will need some streaming software. I used Wirecast from Telestream. The user interface of the free demo version is shown in Fig. 12.

ams12-Wirecast
Fig. 12

The following steps are specific to Wirecast, but other streaming software will have similar steps.

Click the [+] button on the first layer (Fig. 13) to open the "Add Shot" dialog, as shown in Fig. 14.

ams13-Layer
Fig. 13

ams14-AddLayer
Fig. 14

I chose to share the image captured by my webcam, but you can share screen captures or videos, if you like. The image you are capturing will be set as a "preview". Make this same layer broadcast live by clicking the "Live" button (Fig. 15).

ams15-GoButton
Fig. 15

Now, configure your streaming software to send its live video to your AMS Live Streaming event. Select Output | Output Settings... from the menu to open the Output dialog, as shown in Fig. 16.

ams16-OutputSettings
Fig. 16

Select "RTMP Server" from the "Destination" dropdown and click the [OK] button to open the "Output settings" dialog, as shown in Fig. 17.

ams17-OutputSettings
Fig. 17

In the "Address" text box, paste the Input URL that you copied from the AMS Live Stream event. Click the [OK] button to close the dialog.

Your UI should look similar to the following.

To begin streaming, select Output | Start / Stop Broadcasting | Start All from the menu, as shown in Fig. 18.

ams18-StartOutput
Fig. 18

Your UI should look similar to Fig. 19.

ams19-Wirecast
Fig. 19

Return to the Azure Media Services live event. You should see a preview of what you are broadcasting from your streaming software, as shown in Fig. 20. Refresh the page if you do not see it. There may be a few seconds delay between what is captured and what is displayed.

ams20-LiveEvent
Fig. 20

Click the [+ Create an output] button (Fig. 21) to open the "Create an output" dialog with the "Create output" tab selected, as shown in Fig. 22.

ams21-CreateAnOutput
Fig. 21

ams22-CreateOutputDialog
Fig. 22

Verify the information on this tab; then, click the [Next: Add streaming locator] button to advance to the "Add streaming locator" tab, as shown in Fig. 23.

ams23-CreateOutput
Fig. 23

Verify the information on this tab; then, click the [Create] button to create a streaming locator and endpoint. You will return to the live event blades, as shown in Fig. 24.

ams24-StreamingEndpoint
Fig. 24

Click the [Start streaming endpoint] button, then click the confirmation [Start] button, as shown in Fig. 25.

ams25-StartStreamingEndpoint
Fig. 25

After the streaming endpoint is started, copy the "Streaming URL" textbox contents (Fig. 26). You will need this to create an output page for viewers to watch your live event.

ams26-StreamingUrl
Fig. 26

Create and launch a web page with the HTML in Listing 1.

Listing 1:


 lang="en">

    </span>Azure Media Services Demo<span style="color: rgb(0, 119, 0);">
     href="https://amp.azure.net/libs/amp/2.3.6/skins/amp-default/azuremediaplayer.min.css" rel="stylesheet">
    


    

Video

id="vid1" class="azuremediaplayer amp-default-skin" autoplay controls width="640" height="400" data-setup='{"nativeControlsForTouch": false}'> src="STREAMING_URL" type="application/vnd.ms-sstr+xml" />

where STREAMING_URL is the Streaming URL you copied from the live event textbox above.

Listing 2 shows an example with the URL filled in.

Listing 2:


 lang="en">

    </span>Azure Media Services Demo<span style="color: rgb(0, 119, 0);">
     href="https://amp.azure.net/libs/amp/2.3.6/skins/amp-default/azuremediaplayer.min.css" rel="stylesheet">
    


    

Video

id="vid1" class="azuremediaplayer amp-default-skin" autoplay controls width="640" height="400" data-setup='{"nativeControlsForTouch": false}'> src="https://dgtestams-usea.streaming.media.azure.net/45fb391c-8e10-4d41-a0ab-a03e50d57afd/cb4a49d9-93ad-4bb1-8894-c3f0a9fb7d43.ism/manifest" type="application/vnd.ms-sstr+xml" />

With the live event running, your web page should display something similar to Fig. 27.

ams27-WebPage
Fig. 27

If this is published on the web, viewers will be able to watch your live stream from just about anywhere.

Be sure to stop your live event when you finish broadcasting in order to avoid unnecessary charges.

In this article, I showed you how to create a live streaming event using Azure Media Services.


Kevin Pilch on gRPC

Comments [0]

Episode 647

Kevin Pilch on gRPC

Kevin Pilch describes gRPC - an open source system for making remote calls across processes and/or machines - and the .NET Core implementation of this system.

https://docs.microsoft.com/en-us/aspnet/core/grpc/?view=aspnetcore-5.0

January 2021 Gratitudes

Comments [0]

2/7
Today I am grateful for the imagination of Jon Favreau.

2/6
Today I am grateful to learn from my teammates.

2/5
Today I am grateful to watch yesterday's snowstorm from my warm safe home.

2/4
Today I am grateful for a productive day yesterday.

2/3
Today I am grateful for:
-a chance to catch up with J for the first time in months
-Christina, who answered my questions about Photoshop and Lightroom

2/2
Today I am grateful for 3 years in my current home.

2/1
Today I am grateful to go to the gym yesterday for the first time in months.

1/31
Today I am grateful for online Mass.

1/30
Today I am grateful for home-cooked meals.

1/29
Today I am grateful to deliver my first presentation of the year last night.

1/28
Today I am grateful for technical support from co-workers.

1/27
Today I am grateful to be a guest yesterday on the Visual Studio Toolbox show.

1/26
Today I am grateful for all the interviews with interesting people I've scheduled for #TechnologyAndFriends

1/25
Today I am grateful for a visit to the Indianapolis Art Museum yesterday.

1/24
Today I am grateful for a walk around Zionsville and Carmel yesterday.

1/23
Today I am grateful for an upgraded hotel room.

1/22
Today I am grateful for funny memes.

1/21
Today I am grateful to see so much hope and optimism expressed by so many people about yesterday's historic events.

1/20
Today I am grateful for a call from my cousin Kevin last night.

1/19
Today I am grateful for my new drone.

1/18
Today I am grateful for the legacy of Rev. Dr. Martin Luther King, Jr, who understood that non-violence was not a weakness.

1/17
Today I am grateful for a much-needed mid-afternoon nap yesterday.

1/16
Today I am grateful to everyone who shared photos of their dogs yesterday.

1/15
Today I am grateful for dogs.

1/14
Today I am grateful to spend the past few evenings sorting through photographs and papers of my late mother.

1/13
Today I am grateful for lots of advice yesterday on how to cook pasta.

1/12
Today I am grateful to restaurants who have worked to make outdoor dining safer in Chicago winter.

1/11
Today I am grateful for my new cabinet/end table.

1/10
Today I am grateful for Indian food.

1/9
Today I am grateful for good health.

1/8
Today I am grateful for my new laptop.

1/7
Today I am grateful for dinner with Tim and Natale last night before they drive to Austin tomorrow.

1/6
Today I am grateful for a virtual lunch with Annie yesterday.

1/5
Today I am grateful for a regular exercise routine.

1/4
Today I am grateful to return to work after an extended vacation.


GCast 102:

Video Files and Azure Media Services

Learn the capabilities of Azure Media Services, how to create an Azure Media Services account, and how to add audio and video files as Assets in that account.


In a previous article, I showed how to embed into a web page a video encoded with Azure Media Services (AMS).

In this article, I will show you how to add captions to that video.

In my last article, I showed you how to perform audio transcription with Azure Media Services using an Audio Transcription Job. Among other things, this generates a transcript.vtt file with speech-to-text data, listing anything spoken in the video, along with the time at which the words were spoken.

You can also generate this data by using the "Video and Audio Analyzer" job, as described in this article.

For this work, the transcript.vtt file must be in the same folder as the video(s) playing on your web page. A simple way to do this is to download the file from its current container and upload it into the Encoded Video container.

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 containing Audio Transcription or Analyzer data to display the Asset details page, as shown in Fig. 3.

ams03-AssetDetails
Fig. 3

Click the link next to the "Storage container" label (Fig. 4) to open the Storage Blob container associated with this asset, as shown in Fig. 5. This container should open in a new browser tab.

ams04-StorageContainerLink
Fig. 4

ams05-Container
Fig. 5

Click the "transcript.vtt" row to open the blob blade showing details of the transcript.vtt blob, as shown in Fig. 6.

ams06-VttBlobDetails
Fig. 6

Click the download button (Fig. 7) in the top toolbar and save the transcript.vtt file on your local disc. Note where you save this file.

ams07-DownloadButton
Fig. 7

Listing 1 shows a sample VTT file.

Listing 1

WEBVTT

NOTE duration:"00:00:11.0290000"

NOTE language:en-us

NOTE Confidence: 0.90088177

00:00:00.000 --> 00:00:04.956 
 This video is about Azure Media Services

NOTE Confidence: 0.90088177

00:00:04.956 --> 00:00:11.029 
 and Azure Media Services are. Awesome.
  

Navigate again to the "Assets" blade, as shown in Fig. 8.

ams08-AssetsBlade
Fig. 8

In the row of the Analyzer or Audio Transcription asset, click the link in the "Storage link" column to open the container associated with this asset, as shown in Fig. 9.

ams09-Container
Fig. 9

Click the upload button (Fig. 10) to open the "Upload blob" dialog, as shown in Fig. 11.

ams10-UploadButton
Fig. 10

ams11-UploadBlobDialog
Fig. 11

Click the "Select a file" field to open a file navigation dialog. Navigate to the older where you stored transcript.vtt and select this file. Then, click the [Upload]

When the dialog closes, you should return to the Container blade and transcript.vtt should now be listed, as shown in Fig. 12.

ams12-Container
Fig. 12

Click to open the asset containing the video(s) used to generate the VTT file, as shown in Fig. 13.

ams13-AssetDetails
Fig. 13

Start the Streaming Locator, if it is not already started. If you have not yet created a Streaming Locator, this article walks you through it.

Copy the Streaming URL and save it somewhere. It should begin with "https://" and end with "manifest".

As a reminder, Listing 2 shows the HTML to embed an AMS video in a web page. This is the code shown in this article.

Listing 2:

 
< html lang="en"> 
< head> 
    </span>Azure Media Services Demo<span style="color: rgb(0, 119, 0);"> 
     href="https://amp.azure.net/libs/amp/2.3.6/skins/amp-default/azuremediaplayer.min.css" rel="stylesheet"> 
     
< /head> 
< body> 
    

Video

id="vid1" class="azuremediaplayer amp-default-skin" autoplay controls width="640" height="400" data-setup='{"nativeControlsForTouch": false}'> src="STREAMING_URL_MANIFEST" type="application/vnd.ms-sstr+xml" /> default />--> < /body> < /html>

where STREAMING_URL_MANIFEST is replaced with the Streaming URL you copied from the video asset.

To add captions to this video, add a tag inside the

Listing 3

 
< html lang="en"> 
< head> 
    </span>Azure Media Services Demo<span style="color: rgb(0, 119, 0);"> 
     href="https://amp.azure.net/libs/amp/2.3.6/skins/amp-default/azuremediaplayer.min.css" rel="stylesheet"> 
     
< /head> 
< body> 
    

Video

id="vid1" class="azuremediaplayer amp-default-skin" autoplay controls width="640" height="400" data-setup='{"nativeControlsForTouch": false}'> src="STREAMING_URL_MANIFEST" type="application/vnd.ms-sstr+xml" /> src="VTT_URL" label="english" kind="subtitles" srclang="en-us" default /> < /body> < /html>

where VTT_URL is replaced with a URL consisting of the same domain and folder as in the src attribute of the source tag, but with "transcript.vtt" as the file name.

Listing 4shows an example using an Azure Media Services account that I have since deleted.

Listing 4:


 lang="en">

    </span>Azure Media Services Demo<span style="color: rgb(0, 119, 0);">
     href="https://amp.azure.net/libs/amp/2.3.6/skins/amp-default/azuremediaplayer.min.css" rel="stylesheet">
    


    

Video

id="vid1" class="azuremediaplayer amp-default-skin" autoplay controls width="640" height="400" data-setup='{"nativeControlsForTouch": false}'> src="https://dgtestblogams-usea.streaming.media.azure.net/232493e2-8c99-41a0-bb09-5a0aea47de35/3b331fca-41e6-458c-8171-235ef3f76875.ism/manifest" type="application/vnd.ms-sstr+xml" /> src="https://dgtestblogams-usea.streaming.media.azure.net/29a650b6-5c0a-4932-8efb-2b4bb4a81bf0/transcript.vtt" label="english" kind="subtitles" srclang="en-us" default />

Add this HTML file to any web server and navigate to its URL using a web browser. You should see a page with your video embedded and with captions displaying at the bottom of the video, as shown in Fig. 14.

ams14-VideoWithCaptions
Fig. 14

In this article, I showed you how to include captions in an Azure Media Services video embedded in a web page.


In a previous article, I showed you how to use Azure Media Services (AMS) to analyze a video. Among other things, this analysis performs audio transcription to perform text to speech on your video. This outputs 2 files with the spoken text in the audio track of your video.

You may want to only do audio transcription. If you are not interested in the other analysis output, it does not make sense to spend the time or compute on analyzing a video for the other features. AMS allows you to perform only Audio Transcription and eschew the other analysis.

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-CreateJob
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 "Audio transcription" 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 "_AudioTranscription" 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-TransformsJobs
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 the name of the asset you just created to display the Asset Details blade, as shown in Fig. 10.

ams10-AudioTranscriptionAssetDetails
Fig. 10

Click the link to the left of "Storage container" to view the files in Blob storage, as shown in Fig. 11.

ams11-Container
Fig. 11

The speech-to-text output can be found in the files transcript.ttml and transcript.vtt. These two files contain the same information - words spoken in the video and times they were spoken - but they are in different standard formats.

Listing 1 shows a sample TTML file for a short video, while Listing 2 shows a VTT file for the same video.

Listing 1:


  xml:lang="en-US" xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling" xmlns:ttm="http://www.w3.org/ns/ttml#metadata">
   
     
       Copyright (c) 2013 Microsoft Corporation.  All rights reserved.
     
     
        xml:id="Style1" tts:fontFamily="proportionalSansSerif" tts:fontSize="0.8c" tts:textAlign="center" tts:color="white" />
     
     
        style="Style1" xml:id="CaptionArea" tts:origin="0c 12.6c" tts:extent="32c 2.4c" tts:backgroundColor="rgba(0,0,0,160)" tts:displayAlign="center" tts:padding="0.3c 0.5c" />
     
   
    region="CaptionArea">
     
begin="00:00:00.000" end="00:00:07.080">This video is about Azure Media Services and Azure Media

begin="00:00:07.206" end="00:00:08.850">Services are.

begin="00:00:08.850" end="00:00:11.029">Awesome.

Listing 2:

WEBVTT

NOTE duration:"00:00:11.0290000"

NOTE language:en-us

NOTE Confidence: 0.90088177

00:00:00.000 --> 00:00:04.956 
This video is about Azure Media Services

NOTE Confidence: 0.90088177

00:00:04.956 --> 00:00:11.029 
and Azure Media Services are. Awesome.
  

Ready Player Two by Ernest Cline continues the story of Wade Watts that began in the author's first novel "Ready Player One" - a novel of the near future that was a huge hit with middle aged nerds.

Wade and his friends are now in control of the largest company in the world. This company that controls the OASIS - a virtual world in which people can escape and live out their fantasies. Wade is rich and famous, but he is not happy. He has lost his girlfriend, has little contact with his friends, and is unpopular with the public and he is to blame for most of his problems. His world turns even worse when a malevolent AI within the OASIS hacks the entire system, trapping millions of users inside and threatening to kill them unless Wade and friends complete a quest to find the Seven Shards.

The hook of this novel is not dissimilar to the earlier one: young people must navigate a virtual world, showing off their video game proficiency and knowledge of late 20th century pop culture to overcome a series of challenges .

There are a couple key differences with the earlier novel: RP2 has a much darker tone than RP1; and there is a narrower focus on pop culture in this one. While RP1 bombarded the reader with an enormous amount of 1980s and 1990s references, RP2 dives deeper into fewer topic topics, such as Tolkien's Middle Earth, the music of Prince, and the movies of John Hughes. The lines between good and evil are less clearly drawn.

I appreciated that this book acknowledges a glaring logic hole in its predecessor. The earlier novel presented the creators of the OASIS as benevolent geniuses trying to build an alternate, better world than the dystopia outside. But it ignored one important corollary: as people spent more time escaping into virtual reality or supporting its infrastructure and economy, they neglected the real world even more, causing contributing to its accelerated deterioration. "Ready Player Two" raises this issue and highlights even more flaws in the OASIS creators. The addictive nature of the virtual world is intensified by the introduction of headsets that offer a more immersive experience by interacting directly with the user's brain waves.

With a film adaptation almost certain, it was difficult to read it without envisioning how it would translate to a big screen with expensive CGI affects.

Ready Player Two presents a familiar formula which will resonate with Cline's fans. We can see the themes Cline is addressing: The corruption of wealth and power; The dangers of addiction; and the inevitable disappointment of hero worship. But the execution lacks the originality and charm of the first book. Still, I found it to be enjoyable escapism.


GCast 101:

Azure Resource Groups

What are the advantages of Azure Resource Groups? How do I create and manage a Resource Group?


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.


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.


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


GCast 100:

Creating a Screencast

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


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:

 
< 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" /> 
         t="0" d="60160000" /> 
         d="50560000" /> 
     
    < 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" /> 
         t="0" d="60000000" /> 
         d="50333333" /> 
     
< /SmoothStreamingMedia>
  

Notice there are two tags: One for the audio and one for the video. The StreamIndex audio tag has only one child tag, indicating that there is only one audio option. The StreamIndex video tag has four 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

Listing 2:

                     
                           id="vid1" 
                           class="azuremediaplayer amp-default-skin" 
                           autoplay 
                            controls 
                           width="848" 
                            height="480" 
                           data-setup='{"nativeControlsForTouch": false}'> 
                          
                                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" /> 
                     
  

A full web page is shown in Listing 3:

Listing 3:


    
         href="https://amp.azure.net/libs/amp/latest/skins/amp-default/azuremediaplayer.min.css" rel="stylesheet" />
        
    
    
         id="vid1" class="azuremediaplayer amp-default-skin" autoplay controls width="848" height="480" data-setup='{"nativeControlsForTouch": false}'>
             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" />
        
    

  
  

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.


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.


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/


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.


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.


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.


GCast 99:

PowerPoint Animations

Learn how to effectively animate objects in Microsoft PowerPoint.


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.


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.


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/

2020 in Review

Comments [0]

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.


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.


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.


<< Older Posts | Newer Posts >>