Episode 744

Kevin Grossnicklaus on Low Code No Code Solutions

Kevin Grossnicklaus discusses the business value of using Power Platform and other Low Code / No Code offerings.

An unreliable narrator is not an uncommon device in storytelling. But what about an unreliable narrator relating the stories of his unreliable narrator father? Daniel Wallace gives us that in his 1998 novel "Big Fish."

William Bloom tells the story of his father, Edward. Or rather, he tells Edward's life story as Edward told it to William. Edward was an adventurer who could never stand to stay in one place for long. He traveled the world and met many people, and when he came home, he told stories to William. The stories were often fantastical, and Edward was almost always the hero of these stories. William refers to his father as a "mythical creature."

On Edward's deathbed, William tries unsuccessfully to begin a serious conversation with the man who always spoke in jokes, anecdotes, and tall tales. Edward's stories are always entertaining, but William wonders how much truth they contain. Worse, Edward spent much of his son's childhood away from home. As a result, William wonders how well he knows his father. Memory and embellishment can change a story over time. To underscore this point, William relates the story of his father's last days multiple times - each telling slightly different than the one before.

Wallace simultaneously entertains and moves the reader. The stories he weaves are often implausible and whimsical, and the book contains plenty of humor. But beneath it is the sadness of a father and son who never connect on a personal level. The reader is left to wonder whether an inaccurate story can still be a true story. Edward always wanted to be a big fish in a big pond. But he had another goal, which spoke while he was dying:

"If a man can be said to be loved by his son, then that man can be considered great."

Although Edward was nothing like my father, I thought of him while reading this book. And I smiled.

Emmaline and DavidNot every artist takes the same path to stardom.

Emma Campbell was a classically-trained violinist who decided to follow her passion and shift her educational focus to jazz while at university. It paid off, and she began to perform under the name "Emmaline." The singer caught the world's attention a few years ago when she and guitarist Ryan Mondak recorded and released videos which they shared on YouTube and TikTok. Attention grew, and she soon recorded and released three EPs. The small label on which she released these records emphasizes the grass-roots origins of her career.

Sunday evening, Emmaline and her band delivered an excellent concert in front of a sold-out audience at Evanston's SPACE.

EmmalineEmmaline is a beautiful young woman with an amazing voice, an engaging smile, and a top-notch group of musicians behind her. She treated us to a mix of torch songs, sambas, pop songs, and blues melodies - each delivered with the emotion of a classic jazz singer. Between songs, Emmaline related stories of her life and her music, explaining the origins of many of her original songs. She came across as if she was speaking directly to each of us in the audience.

She concluded the evening with a swinging blues song - "Down Home Blues," which she sings in the upcoming movie "Sweetwater."

She is on a path, and I predict that path will lead to stardom.

Tiago Forte reveals no world-shattering advice in his book "Building a Second Brain." Instead, he provides a common sense approach to organizing your thoughts. He tells us to save and record our ideas, refine them, and organize them. It makes sense, but few people are doing this effectively.

Forte recommends storing things digitally - folders on discs or in a knowledge management application - to make your data easy to search.


For organization, he advocates the "CODE" principle, which stands for Capture, Organize, Distill, Express, as explained below


As you consume information, store it in an easily accessible place. This could be an application, a file cabinet, or a folder on your hard drive.


Organize that information in a consistent way. Forte recommends the following broad categories, which he abbreviates as "PARA."

  • Projects: Short-term activities
  • Areas: Long-term responsibilities. May be moved to a project in the future.
  • Resources: Topics of interest to you. May be moved to an area or project in the future.
  • Archives: Inactive stuff. May be moved to an area or project in the future.


Summarize the information to make it easier to consume later. Highlight an article, select the most important highlight, then write a summary of the article's main points.


Use the distilled information you captured to create something or to execute a goal - writing a novel, planning an event, learning a new language.

Divergence / Convergence

Capturing and Organizing allow us to practice Divergence - Save information without processing and filtering it. Distilling and Expressing are examples of Convergence, filtering out unneeded information to focus on what is most valuable.

The system does not have to be perfect, Forte tells us. We just need a system that works for us.


I was already practicing something similar to what Forte advocates - storing and organizing my ideas in OneNote and in a set of DropBox folders.

After reading the book, the most significant change I made was to schedule time each month to evaluate my "To Do" list and decide if I needed to move anything from medium-term goals to short-term projects and action items.

A Lap Around DevSecOps

Comments [0]


DevSecOps is a principle of Application Lifecycle Management (ALM) that strives to incorporate security into every aspect of the lifecycle. It is built on top of DevOps (hence the name) and encourages every party to consider security issues in every phase of the application's design, build, test, and release.

The DevSecOps Manifesto

A few years ago, a group of software security professionals collaborated to produce the DevSecOps Manifesto. They were inspired by the wide adoption of the Agile Manifesto, which concisely laid out priorities for Agile software development. Like the Agile Manifesto, the DevSecOps Manifesto declared high-priority factors without dismissing lower-priority factors.

The nine prin of the DevSecOps Manifesto are:

  • Leaning in over Always Saying "No"
  • Data & Security Science over Fear, Uncertainty and Doubt
  • Open Contribution & Collaboration over Security-Only Requirements
  • Consumable Security Services with APIs over Mandated Security Controls & Paperwork
  • Business Driven Security Scores over Rubber Stamp Security
  • Red & Blue Team Exploit Testing over Relying on Scans & Theoretical Vulnerabilities
  • 24x7 Proactive Security Monitoring over Reacting after being Informed of an Incident
  • Shared Threat Intelligence over Keeping Info to Ourselves
  • Compliance Operations over Clipboards & Checklist


Leaning in over Always Saying "No"

At one time, I thought of security teams as adversaries. I would ask for things, and they would deny them. It seemed like their knee-jerk reaction was to refuse my request and cite security issues. This principle does not ask them to stop enforcing good security practices. Instead, it suggests they keep an open mind and try to think of ways to meet a request without adding additional security risks.

Data & Security Science over Fear, Uncertainty and Doubt

This should be true of every business or technical, but it often is not. Base your decisions on hard evidence rather than on emotion or gut feeling. The findings will be more defensible and will probably be more valid.

Open Contribution & Collaboration over Security-Only Requirements

This is the heart of DevSecOps. Security is everyone's responsibility and should involve collaboration among teams. In too many organizations, all security decisions are handled by a single group and are often not considered until other work is complete.

Consumable Security Services with APIs over Mandated Security Controls & Paperwork

Automating security via API calls can be easier to implement and, therefore, more likely to be built into an application. Manual security processes are valuable but can be time-consuming and error-prone.

Business Driven Security Scores over Rubber Stamp Security

What are the reasons for your security policies? Is it simply because you have always done it this way, or is there a valid business reason driving your policies? Think about this before implementing and enforcing rules.

Red & Blue Team Exploit Testing over Relying on Scans & Theoretical Vulnerabilities

Security attacks occur in the real world, so it makes sense to simulate the real world when preparing for them. A Red and Blue team does so, with the Red Team taking on the role of a hostile hacker and the Blue Team acting as the system's defenders. This brings human decision-making into the mix. Automated scans are helpful, but they are not sufficient.

24x7 Proactive Security Monitoring over Reacting after being Informed of an Incident

A proactive approach is almost always better than a reactive one, which often occurs after a security breach has already compromised your system.

Shared Threat Intelligence over Keeping Info to Ourselves

Many organizations jealously guard any information they discover because they believe it gives them a competitive advantage. But all organizations share a common enemy in malicious hackers. It makes sense to share this information to protect everyone.

Compliance Operations over Clipboards & Checklist

This principle emphasizes that security is a mindset within the organization rather than a set of procedures to which one can adhere and feel safe.

Focus of DevSecOps

At its heart, DevSecOps seeks to incorporate security into every aspect of life cycle management.

Fig. 1 shows the tasks that can be added to each phase.


Fig. 1 (Source: https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/secure/devsecops-controls)

A corollary of this is that every person is responsible for thinking about security. DevSecOps sits on top of DevOps, so a company must have a solid implementation to implement DevSecOps effectively. But the tools you choose are less important than how your organization and employees embrace security awareness. The goal is to shift left the identification and resolution of security issues. This means we try to identify and resolve these issues as soon as possible because it is much cheaper and more effective than waiting until later.


DevSecOps is an evolutionary concept - not a revolutionary one. It builds on top of DevOps. It involves all people and all steps in identifying and resolving security issues.

The Agile Manifesto

Comments [0]

The Manifesto

The Manifesto for Agile Software Development, commonly known as the Agile Manifesto, is very concise. Here is the full text:

We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value: Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan That is, while there is value in the items on the right, we value the items on the left more.

A group of well-known software architects wrote the Manifesto to describe their priorities when building software systems. Many were book authors and bloggers, and all had experience designing complex systems.

Its simplicity is its strength. One can memorize it and apply the principles to their current work, adapting their processes as needed.

It also benefits from its flexibility. The Manifesto doesn't proclaim dogma; instead, it states the relative importance of software development concepts.

The Principles

Individuals and interactions over processes and tools

Processes and tools are important. But do not lose sight of what you are trying to accomplish. Communication between individuals and teams is crucial to building anything of moderate complexity. Tools and processes are simply a way to facilitate that communication.

Working software over comprehensive documentation

This is the most obvious of the principles. I am a big fan of documentation. It helps users understand how to use software, and it helps onboard new developers. But let's face it. Given a choice between broken software with excellent documentation and excellent software with no documentation, the former is the better choice.

Customer collaboration over contract negotiation

This principle rejects the idea that software developers and their customers are adversaries. They have the same goal - creating quality software - and they should drive toward that goal together. The parties involved are less likely to point fingers and place blame if they view their relationship as a partnership.

Responding to change over following a plan

This is the most revolutionary part of the Manifesto. Before the development of Agile methodologies, Waterfall was a popular methodology for designing and building software. In a Waterfall system, all design is completed before writing any software, and all software is written before testing it. This approach was slow, expensive to fix, and did not consider changing requirements. This principle encourages teams to break work into short "sprints" and frequently evaluate what tasks belong in each sprint. This principle makes it much cheaper to adjust to changing requirements.


Many books describe methodologies with specific actions to take to become more "agile." But these are just applying the principles above. How you implement these principles is up to you. Daily standups, 2-week sprints, and pair programming can help make you more agile, but they are not required to adhere to the Agile Manifesto.

My Journey to Agile

Comments [0]

Years ago, I worked for a large consulting company that embraced a Waterfall methodology. In a Waterfall methodology, a team completes each project phase before beginning the next phase. For example, we would complete all design for a system before writing any code, and we would complete all the code before starting testing. 

In theory, it made sense. Why try coding something unless you are 100% sure what you want to build? Waterfall also seemed the logical choice when handing off requirements to junior developers or to an offshore team. The more explicit we were with what we wanted, the less ambiguity to the coding party and the less chance they would misunderstand our needs.

But there were significant drawbacks to this approach. Many issues did not arise until we had begun coding, while others became apparent only during the testing phase. In those cases, we had to return to our design phase and re-do work already completed - often months earlier. This process was inefficient and expensive.

I once led a team designing the interfaces between dozens of backend systems at a large electronics retailer and the e-commerce site they were building. We spent months exploring each system, how to access it, and how to expose it to the front end. By the time we finished, some of the backend systems had changed significantly. Others had been wholly replaced. In those cases, our only choice was to return to work on the updated systems. We eventually completed our task, but we were months behind schedule.

Later, I left the large company and joined a small consulting firm that introduced me to Agile methodologies. This company had developed a variation of the Scrum Agile methodology. Their approach focused on creating one small feature at a time - design it, build it, test it. If anything went wrong, we knew about it right away and had minimal rework to do.

By executing an agile methodology, my teammates and I immediately became more productive. The most significant advantage I saw was in the "fail fast" mindset. We anticipated that things could go wrong - sometimes by our actions and sometimes by factors outside our control. We wanted to know immediately when things went wrong so we could fix them immediately. So, we designed, built, and tested our features in smaller chunks. Testing caught issues while the code was still fresh in our minds and before we had added extra dependencies. 

In addition, we held a daily standup meeting. Every morning, each member took a minute or so to describe what they worked on yesterday, what they planned to work on today, and any issues that might block them. The meeting gave everyone insights into the activity of others on the team and allowed the opportunity for one of us to unblock another's issue. By standing up, we kept the meetings to a reasonable length. Who wants to stand up for a 1-hour meeting?

I have not looked back. I consider how I can use an agile methodology to improve the process of every project I work on. It is rare that it will not.


Episode 743

Guy Royse on Software Defined Radio

Software-Defined Radio allows you to use your computer to decode AM, FM, short wave, police scanner, and other radio signals, including both sound and data. Guy Royse describes Software-Defined Radio, how it works, and uses for it.

March 2023 Gratitudes

Comments [0]

Today I am grateful to see Scythian in concert last night.

Today I am grateful to talk with Jeff yesterday for the first time in a long time.

Today I am grateful I found the eyeglasses that I lost last week.

Today I am grateful to spend a day with my team in the office yesterday.

Today I am grateful to get my emission test out of the way yesterday.

Today I am grateful to see Bobby Broom last night on my first visit to the Jazz Showcase this year!

Today I am grateful I can attend Mass virtually on a cold, windy, snowy day.

Today I am grateful to knock off some items from my "To Do" list last week that had lingered far too long.

Today I am grateful my washing machine is working again.

Today I am grateful for a free Audible subscription.

Today I am grateful for a bike ride and a chance to work in a coffee shop yesterday afternoon.

Today I am grateful to upgrade my TV plan and install a new receiver.

Today I am grateful to see "The Comedy of Errors" at Chicago Shakespeare Theatre last night.

Today I am grateful to go to an exciting Chicago Fire - FC Cincinnati soccer game last night with my sons.

Today I am grateful to see "Big Fish: The Musical" in Lincolnshire yesterday.

Today I am grateful I could make it to the gym every day for the last 2 weeks.

Today I am grateful for a conversation with Randy for the first time in a long time

Today I am grateful to my personal trainer, who always works with me for a few minutes longer than she is contractually obligated.

Today I am grateful for dinner with John and Kim.

Today I am grateful:

  • to help host local high school students at the Microsoft Technology Center yesterday
  • to see an excellent Chuchito Valdes concert last night

Today I am grateful to see The Verve Pipe in concert last night.

Today I am grateful for March Madness

Today I am grateful for naps.

Today I am grateful to receive an unexpected "Thank You" gift yesterday.

Today I am grateful:

  • for a book club meeting that included a 90-minute conversation with the author
  • to attend a panel on Professional Women hosted by the Family Institute yesterday

Today I am grateful for:

  • coffee with my son and daughter-in-law
  • a chance to teach cloud computing to a Telecommunications class at Michigan State University
  • dinner with my friends Nick and Betsy

Today I am grateful that I will never post on social media again

Today I am grateful for:

  • breakfast with my goddaughter Amanda Friday
  • visiting my sister Debbie this weekend as she recovers
  • the hospitality of Diane and Pat
  • a visit with Dennis yesterday

The Verve Pipe The Verve Pipe was formed in 1992 in East Lansing, MI - eight years after I moved away from East Lansing. In 1993, they released their most famous album, "Villains," which contained the hit songs "The Freshmen" and "Photograph." In 2001, Mark Wahlberg lip-synced to the Verve Pipe song "Colorful" in the movie "Rock Star."

I finally saw Verve Pipe in concert on Saturday evening as they performed for a sold-out audience at Chicago's City Winery.

Founding members Brian Vander Ark (guitar, lead vocals) and his brother Brad (bass guitar) remain from the original lineup. These days, they are joined by drummer Zach Dubay, Randy Sly on keyboards, backing vocalist Channing Lee, and Lou Musa, who played a wide variety of styles with equal ease on lead guitar. Brian is the leader, but the entire ensemble contributed and played well together. Brian VA retains the vocal range of his youth, and the band members harmonize well with him - particularly Lee, who has a lot of chemistry with the lead singer.

The evening's sets mainly consisted of original songs, but they covered the music of others in the final stretch, including David Bowie's "Life on Mars" and Fleetwood Mac's haunting "The Chain." They closed their second set with a crowd-pleasing rendition of "What Happiness Is" that included Lee breaking into a few lines of Alanis Morissette's "You Oughta Know."

The energy increased as the evening went on. By the end of the two-hour show, the audience was satisfied. I should not have waited so long to see this band.


GCast 145:

Azure Active Directory Bulk User Operations

It can take a long time to manually create, invite, and delete many users in Azure Active Directory. Fortunately, AAD provides bulk operations to facilitate these activities.

Episode 742

Matt Groves on Fluent Migrator

Matt Groves describes how to use the Fluent Migrator open source tool to manage changes to the structure and data of your relational database. In addition, he talks about his NoSqlMigrator project, which brings this functionality to NoSQL databases.




The cast of The Comedy of Errors Tim Burton's 2003 film "Big Fish" was far from his most commercially successful movie. But it was a delightful story that combined fantasy, love, and adventure. In 2013, a musical adaptation of the tale premiered in Chicago. In 2023, the play returned to Chicagoland at the Marriott Theatre in Lincolnshire.

I attended the final performance Sunday evening and found it nearly as delightful as Burton's movie.

The musical's plot is similar to Burton's movie, with minor deviations. Edward Bloom is dying. His son Will feels he does not know his father because Edward has spent his life telling elaborate stories of his life. Through Edward's stories and through song, we get a look into the father's adventures as he befriends the giant Karl and courts his wife Sandra and joins a circus and rescues his hometown. But we are never sure which parts are authentic, which are invented, and which are exaggerated. We hear every story filtered through Edward's oratory and wit.

The songs are trite and formulaic but catchy. What elevated this show was the performance of Alexander Gemignani, who played Edward Bloom. He made the character larger than life. His transition from energetic young Edward to frustrated and feisty old Edward was outstanding.

After the show ended and the actors took their bows, Gemignani called to the stage the entire crew for a final thank you as the run ended. It was a fitting tribute and an ideal end to a delightful evening.

The cast of The Comedy of Errors The Chicago Shakespeare Theatre knows how to create a new twist on an old idea. They did so Friday night in their production of William Shakespeare's "The Comedy of Errors."

"Errors" is one of Shakespeare's simplest and shortest plays. Two pairs of twins begin life together. Two are well-born lords named Antipholus, while two named Dromio act as servants to the Antipholuses. At a young age, a shipwreck separates them. One Antipholus and Dromio settle in Ephesus, while the other pair settle in Syracuse. As adults, the four find themselves in the same city and cross paths repeatedly, which results in repeated mistaken identities and much slapstick humor. The script features variations on the same joke.

Rather than present the Bard's play directly, CST depicted a Hollywood studio filming an adaptation of "The Comedy of Errors" in London during the World War II German bombing of the city. We see multiple subplots within the moviemaking - the egotistical stage actor who feels the role of Dromio is beneath him; the director's wife, who is having an affair with the lead actor; parts that are filled by a standup comic and a pop singer to boost ratings. In between, we see the story of Antipholus and Dromio unfold.

This play within a movie within a story within a play makes Shakespeare's simple story more complex and more fun. A host of eccentric 20th-century actors portray eccentric 16th-century characters.

The play provides many laugh-out-loud moments as the outer story leaks into the inner story. The leading man's halitosis spoils a love scene. Debris from an air raid injures an actor, who must deliver his lines from a wheelchair.

CST founder and Artistic Director Barbara Gaines directed this adaptation, ending her longtime association with the Theatre. Ms. Gaines is stepping down this year.


She goes out on a high note.

Scott Rutz on Dapr

Comments [0]

Episode 741

Scott Rutz on Dapr

Scott Rutz describes how to use Distributed Application Runtime (Dapr) building blocks to simplify your microservices applications.


For the first time in a long time, I am excited to continue Robert Jordan's "Wheel of Time" series. For eleven books, Rand Al'Thor and his companions have been preparing to battle the forces of evil at the Last battle. The series began with great promise but dragged over the past few novels as Jordan failed to advance the story or resolve plot lines at an acceptable pace. 

This changed with the death of Robert Jordan.

Novelist Brandon Sanderson picked up the mantle and vowed to conclude the series. Jordan made extensive notes and expected his successor could resolve all subplots in a single book. But Sanderson and his publisher recognized the complexity woven by Jordan would take more than one book to resolve, so they split the conclusion into three volumes. "The Gathering Storm" is the first of those three - Number 12 in the series.

In this book, Rand prepares his armies for the last battle. We see his battle to retain his sanity as his power increases. We see his rejection of sentiment and emotion as he becomes focused on the fight with the Dark One to decide the world's fate. Close friends become pawns in his chess game, and bystanders are often expendable if Rand achieves his primary objectives. 

Other subplots brought to a conclusion: 

- The Aes Sedai have imprisoned Egwene for the crime of laying claim to the group's leadership. Egwene attempts to unite the White Tower and the Aes Sedai sisters despite her captivity.

- Rand attempts to make a truce with the Seanchan. Their invasion complicates Rand's war, so he approaches Tuon with a deal.

Sanderson tells the story much better than Jordan did. One chapter describes a town whose citizens are cursed to go on a murderous rampage each evening at sunset only to forget their crimes at daybreak. Sanderson builds tension where Jordan would have dragged out the narrative to the point of tedium. When  Egwene al'Vere visits Tel'aran'rhiod, Sanderson focuses on the essential details, giving the reader a sense of the shifting nature of the dream world. Jordan would have described in detail every article of clothing and background scenery without regard to its impact on the scene or story.

This will sound mean. Robert Jordan's "Wheel of Time" series benefited from the death of Robert Jordan. "The Gathering Storm" combines the imagination of Robert Jordan and the world he created with the storytelling of Brandon Sanderson. It is a winning combination.


Scythian in concertScythian is a product of multiple cultures, and they combine those cultures in their music.

Brothers Alexander and Danylo Fedoryka, who lead the band, are the children of Ukrainian immigrants. The brothers grew up in the hills of Virginia, and the band still resides in northern Virginia. So they incorporate the music of their parents' homeland with the traditional folk music of the American Southeast. All this is unusual because they are primarily a Celtic band. The brothers explained the relationship between Ukrainians and Irishmen: "We are basically cousins," they explained, because both peoples have suffered oppression, both enjoy music and a good time and both eat lots of potatoes.

And just to confuse us, they began their Sunday evening concert at Chicago's Athenaeum Center with a whaling song. The sea shanty "Wellerman" went viral two years ago, thanks to a Tik Tok video, and Scythian performed the harmony vocals exquisitely.

Danylo plays guitar and accordion, while Alexander plays fiddle, mandolin, and guitar. They are supported by Ethan Dean on bass and Johnny Rees on drums. Each member is excellent at his instrument, but they particularly shine on their vocals, which they often sing in harmony with one another. Although the Fedorykas sang lead on most tunes, Rees stepped to the front for a beautiful rendition of "Danny Boy."

All four dressed in traditional Ukrainian costumes for the event. They mixed in a few Ukranian tunes, along with some Americana music, such as "Song of Sacrifice" and the traditional "Crawdad Hole," which they offered as a tribute to Doc Watson.

The night's performance included more than just music. During some Celtic songs, a local group of young dancers joined them on stage to perform traditional Irish dances. Most of these songs were traditional or traditional-sounding, but they showed off their arrangement of U2's "I Still Haven't Found What I'm Looking For." Late in the set, the band's roadie came onstage to dance with a broom while the band accompanied him with an Irish reel.

I did not know what to expect when I arrived at The Athenaeum Sunday evening. I received everything.


GCast 144:

Managing Azure Active Directory Groups

This video walks you through the process of creating and managing security and M365 groups in Azure Active Directory.

Episode 740

Mike Shelton on Data Lakehouses

A Data Lakehouse combines the advantages of a Data Warehouse and a Data Lake. Mike Shelton discusses this technology and how to use it.

Elle King in concertElle King does not look or act like other famous singers. And she does not care.

She sings about drinking and smoking. And she carries a few more pounds than other singers boasting similar success. And she swears. She swears a lot. But she does not care. "You don't see women who look like me and sing about these things," she boasted to the crowd Saturday night at Chicago's Salt Shed amphitheater.

King opened with "Tusla," a recent rocking country song about a woman throwing all her man's possessions out on the grass after he leaves town with another woman: "Well, that good-for-nothin' mothertruckin' son of a gun; I don't need to know her name 'cause I can tell you which one," she wailed to an appreciative audience.

King has plenty of country and western songs, and she sang many on this night. Her band dressed in cowboy hats and The Great Whiskey Project from Mobile, AL delighted the crowd with their country-blues numbers before Elle took the stage.

King also has plenty of pop material from which to draw, and she mixed in some of these songs. Early in her set, she performed "Ex's and Oh's," her biggest hit, and the band impressed with a rendition of Dr. Hook's "The Cover of Rolling Stone."

But the evening mainly belonged to country music which Elle delivered in abundance. She sang a few slow songs ("Jersey Giant"), but most of the set was rough and rowdy.

King got a bit rough herself. I could not tell if she was joking when she told the keyboard player to "Shut the f*** up!" He seemed to take it in stride.

She closed the show with "Drunk (And I Don't Wanna Go Home)," a single she recorded with Amanda Lambert.

This was my first visit to the Salt Shed. The venue opened last year, and the indoor concert area opened earlier this year. Most patrons stand at the Shed, but the indoor space provides some grandstand seating.


It was a good night and a good show to experience this theater.

A New Era for "1776"

Comments [0]

The cast of 1776 To prepare myself for  "1776: The Musical," I listened to the 1969 original Broadway Cast recording. Then, I watched the 1972 movie adaptation starring William Daniels as John Adams.

I was not prepared.

"1776" tells the story of America's founding fathers as they debated declaring independence from Great Britain during the Revolutionary War. The story takes in Philadelphia during a sweltering June and July of 1776. Delegates represent all thirteen colonies, but the story focuses on John Adams, Benjamin Franklin, and Thomas Jefferson. 

The original production was good enough to win the 1969 Tony Award for Best Musical (it beat out "Hair" for the award) but lacked the staying power of other award winners. The performances on the soundtrack and in the film version were good but never great. However, the subject matter remains a fascinating topic. Numerous historians have analyzed how America became the first set of colonies to break away from its parent nation. The struggles of the young nation to find an identity is worth investigating.

Directors Jeffrey L. Page and Diane Paulus took the play to another level. They reimagined the founding fathers as women - often women of color. Only two minor characters in the play are female. Abigail Adams and Martha Jefferson were wives of statesmen, and their parts in the script were minor. But the actors portraying the men on stage were either female, trans, or non-binary. This casting brought a renewed energy to the performance. The ladies consistently referred to one another as "sir" and "he" and "him," despite the fact they were addressing actresses. 

The current production of "1776" breathed new life into a play that had begun to show its age.



Microsoft Azure Spring Apps (ASA) offers a simple, reliable, and scalable way to host your Java Spring applications. ASA frees you from managing the hardware, networking, infrastructure, and containers on which your application is running. All of those things are handled by the platform. ASA also provides simple deployment mechanisms for your code.

In this article, I will show you how to deploy a local Spring application to an Azure Spring App.


Azure Prerequisites

This article assumes that you already have an Azure Spring Apps Service and an Azure Spring App running under that service. Refer to the following articles for information on how to create these:

When I wrote this article, I created a service named "dgtestasasvc" and an app named "dtestapp", as shown in Fig. 1.

Apps listing

Fig. 1

Local Prerequisites

In order to proceed, you will need to have Java, Maven, and git installed locally. Many IDEs will assist you in installing these. If you are running on a Windows operating system, you should also install [Windows Subsystem for Linux[(https://learn.microsoft.com/en-us/windows/wsl/install).

Sample Code

You are welcome to use your own Spring application. However, if you do not have one available, you can this sample Spring Boot application. It contains a single page that displays the message: "Greetings from Spring Boot!"

Retrieve and build the sample application with the following commands:

git clone -b boot-2.7 https://github.com/spring-guides/gs-spring-boot.git
cd gs-spring-boot/complete
mvn clean package -DskipTests


The Azure CLI contains a command to deploy a Spring App to an existing Azure Spring App. The syntax is:

az spring app deploy \
    --resource-group  \
    --service  \
    --name hellospring \
    --artifact-path target/spring-boot-complete-0.0.1-SNAPSHOT.jar

Here is the syntax for my service and app:

az spring app deploy \
    --resource-group dgtestasarg \
    --service dgtestasasvc \
    --name dgtestapp \
    --artifact-path target/spring-boot-complete-0.0.1-SNAPSHOT.jar

This deployment may take a couple minutes.

Test the Deployed App

If your application deploys without error, you can view it by opening a web browser and navigating to:

https://ASA Service Name-App-Name.azuremicroservices.io


Here is the URL for my deployment:


The output is shown in Fig. 2.

Test Output

Fig. 2


In this article, you learned how to deploy a local Spring application to an Azure Spring App.

Episode 739

Jimmy Bogard on Vertical Slice Architecture and MediatR

A few years ago, Jimmy Bogard become frustrated with building and maintaining applications that partition components horizontally. He found that separating application code along vertical lines reduced the complexity and rigidity of his applications. He discusses this pattern and MediatR - the open-source tool he created to facilitate Vertical Slice Architecture.






February 2023 Gratitudes

Comments [0]

Today I am grateful for all I learned about Kubernetes over the past 2 weeks.

Today I am grateful for a new countertop combination toaster oven / air fryer / convection oven.

Today I am grateful to be a guest on the Visual Studio Toolbox show last night.

Today I am grateful to pass 700 subscribers to my shows "Technology and Friends" and "GCast."

Today I am grateful to talk with Matt yesterday for the first time in years.

Today I am grateful to see a musical production of "Wuthering Heights" last night at the Chicago Shakespeare Theatre.

Today I am grateful to see the Tannahill Weavers in concert last night.

Today I am grateful to have friends over to watch the Super Bowl yesterday.

Today I am grateful for dinner with my son last night

Today I am grateful for the outpouring of support for those affected by the shooting at Michigan State University.

Today I am grateful to see Ana Popovic in concert last night.

Today I am grateful for:

  • a successful surgery for Marlene
  • a conversation with Betsy yesterday

Today I am grateful to go to Andy's Jazz Club with John and Kim last night

Today I am grateful for a birthday conversation with my brother across the International Date Line

Today I am grateful

-to attend a memorial service for Ed yesterday -to see Denny Laine in concert last night

Today I am grateful to see Dave Mason in concert last night.


Today I am grateful to be a guest on the Visual Studio Toolbox show. 2/23
Today I am grateful for lunch with my sons yesterday

Today I am grateful to pass the AZ-204 exam

Today I am grateful to replace the batteries in my smoke detector.

Today I am grateful to visit Marline in the hospital yesterday.

Today I am grateful to edit a bunch of videos last week.

Today I am grateful for a fresh haircut.

Today I am grateful to work with a partner on-site this week.

Today I am grateful

  • to all who sent me kind birthday wishes yesterday
  • for dinner with Mike and Travis
  • to see Drunk Shakespeare last night at the Lion Theater

Today I am grateful to celebrate my birthday last night with some of my favourite people by seeing 1776: The Musical.

Today I am grateful that the predicted severe storm mostly missed us yesterday.

Today I am grateful to see Elle King in concert last night.

Drunk Shakespeare performing MacbethI have walked past the Lion Theater on Wabash Street hundreds of town without noticing the entrance, the sign above it, or the play inside.

Finally, I made my way inside to see "Drunk Shakespeare."

The premise: A group of actors perform a play by William Shakespeare. They switch between a faithful adaptation of the bard's script and off-color humor. The twist is that one of the performers publicly downs four shots of whisky before the play begins. He drinks a few more during the night, becoming progressively more drunk and sloppy. "You cannot spell 'bard' without 'bar'," announces the Master of Ceremonies.

Tonight's performance more or less followed WS's script for "Macbeth"; but the cast interjected plenty of jokes into the mix.

Drunk Shakespeare performing MacbethThe performers often break the figurative fourth wall, interacting with the audience, sometimes flirting or telling raunchy jokes. This was easy to do as the audience sat on benches along the long narrow stage, making it difficult to separate the performers from the observers.

The show was funny enough without adding the gimmick of one drunk actor. It was one more joke, and while amusing, it was far from the funniest part of the evening. I am not convinced that he was consuming alcohol. The shots he downed could have been anything. But a schtick is a schtick, and this one did not detract from the show.

"Drunk Shakespeare" is part scripted, part improv, and all fun.

I enjoyed this show more than I expected I would.


Microsoft Azure Spring Apps (ASA) offers a simple, reliable, and scalable way to host your Java Spring applications. ASA frees you from managing the hardware, networking, infrastructure, and containers on which your application is running. All of those things are handled by the platform. ASA also provides simple deployment mechanisms for your code.

In a previous article, I showed how to create an Azure Spring App Service. A service can host many Apps.

Creating an Azure Spring App

To add an Azure Spring App to an Azure Spring App Service, log into the Azure portal and navigate to your Azure Spring App Service "Overview" tab, as shown in Fig. 1.

Overview Blade

Fig. 1

Click the [Apps] button (Fig. 2) to open the "Apps" blade, as shown in Fig. 3.

Apps Button

Fig. 2

Apps Blade

Fig. 3

Click the [Create App] button (Fig. 4) to open the "Create App" dialog, as shown in Fig. 5.

Create App Button

Fig. 4

Create App Dialog

Fig. 5

A new empty row displays.

At the "App name" field, enter a name for your Azure Spring App. The name must be unique within this Azure Spring App Service.

At the "Deployment Type" dropdown, select "Artifacts" if you plan to deploy a JAR file; or select "Custom Container" if you plan to deploy from a container image.

At the "Runtime platform" dropdown, select the version of Java on which your app runs.

At the "vCPU" dropdown, select the fraction of virtual CPU to allocate to this app: 1 or 0.5.

At the "Memory" dropdown, select the amount of memory to allocate to this app.

At the "Instance count" field, enter the number of instances of the app you want to deploy.

Click the [Create] button to begin creating a new Azure Spring App with sample application code deployed.

After the App is created, it should be listed in the "Apps" blade, as shown in Fig. 6.

Apps Blade With App

Fig. 6

Click the [Refresh] button if you do not see the App listed.

Click the App name to view details about the Azure Spring App. The App's "Overview" blade displays, as shown in Fig. 7.

App Overview Blade

Fig. 7

Click the [Assign Endpoint] button (Fig. 8) to create a direct endpoint URL for this app.

Assign Endpoint Button

Fig. 8

You can view the sample application deployed by clicking either the "URL" link or the "Test endpoint" link (Fig. 9) to display the sample web page shown in Fig. 10.

URL Links

Fig. 9

Test App

Fig. 10


In this article, I showed you how to add an Azure Spring App to an Azure Spring App Service. In the next article, I will show you how to deploy your own Spring App to this Azure Spring App.

GCast 143:

Invite External Users to Azure Active Directory

You can allow users outside your organization to access your Azure Active Directory resources without the need to manage their accounts. This video shows you how to invite external users.


Microsoft Azure Spring Apps (ASA) offers a simple, reliable, and scalable way to host your Java Spring applications. ASA frees you from managing the hardware, networking, infrastructure, and containers on which your application is running. All of those things are handled by the platform. ASA also provides simple deployment mechanisms for your code.

Creating an Azure Spring App Service

When working with ASA, you first need to create an Azure Spring App Service. A service can host many Apps.

To create a service, log into the Azure portal and click the [Create a resource] button (Fig. 1) and search for "Azure Spring Apps", as shown in Fig. 2.

Create Resource Button

Fig. 1

Search For Azure Spring Apps

Fig. 2

If the "Azure Spring Apps" tile (Fig. 3) displays, click the [Create] button to display the "Azure Spring Apps" information screen, as shown in Fig. 4.

Azure Spring Apps Tile

Fig. 3

Azure Spring Apps Info

Fig. 4

The "Azure Spring Apps" creation dialog displays with the "Basics" tab selected, as shown in Fig. 5.

Basic Tab

Fig. 5

At the "Subscription" dropdown, select the Azure subscription in which you want to create the Azure Spring Apps service. Most of you will have only one subscription.

At the "Resource group" field, enter the name of the Resource Group in which you want to store this service or click the "Create new" link to create a new Resource Group.

At the "Name" field, enter a unique name for the Azure Spring Apps Service.

At the "Region" dropdown, select the Azure region in which to create the Azure Spring Apps Service. To minimize latency, consider the location of your users and any other services or data with which your apps will interact.

By default, the "Pricing" field selects the Basic tier pricing. Click the "Change" link to select a different pricing tier.

Click the [Review and create] buton to advance to the "Review and create" tab, as shown in Fig. 6.

Review Create Tab

Fig. 6

If you made any errors, they will display here. You will need to return to the tab with the error and correct it before you can proceed. If everything looks good, click the [Create] button to begin creating the Azure Spring Apps Service. This will take a few minutes.

After the Azure Spring Apps Service is created, the "Your deployment is complete" confirmation displays, as shown in Fig. 7.

Deployment Complete message

Fig. 7

Click the [Go to resource] button to navigate to the "Overview" blade for your Azure Spring Apps Service, as shown in Fig. 8.

Overview Blade

Fig. 8

Creating an Azure Spring App

Deploying a Spring App to Azure Spring Apps


In this article, I showed you how to create a new Azure Spring App Service. In the next article, I will show how to create a new Azure Spring App within this service.

Episode 738

Rob Richardson on Containerization

Rob Richardson talks about the advantages of running your applications in containers and using tools like Kubernetes to manage them.



Dave Mason BandI love when an artist opens a concert with one of my favourite songs. Dave Mason did just that Monday evening at the City Winery when he began his set with "Only You Know and I Know" - an early 1970s song that caught the ear of preteen David as I listened to my parent's AM radio.

Mason came to prominence in the late 1960s as a founding member of Traffic, a band known for its psychedelic blues numbers. Mason's band performed songs from this era, including "Rock And Roll Stew," "Low Spark of High Heeled Boys," and "Dear Mr. Fantasy." He followed up this set with a rendition of "Can't Find My Way Home," a song made famous by Blind Faith, the supergroup made up of Traffic alumni and others.

Mason sang lead on some songs and let his bandmates take the lead on others. And what a band it was! Martin Fera (drums), Johnne Sambataro (guitar), Ray Cardwell (bass), and Tony Patler (keyboards) were all top-notch.

David Giard and Dave MasonDave Mason has been around long enough to change his musical persona multiple times, and he drew on all these styles at his performance Monday evening at the City Winery.

His solo work from the 1970s appealed to me because that is when I first discovered him. He played selections from his "Alone Together" album, which he recently re-recorded because the original master tapes were destroyed in a Universal Studios fire. He broke out a 12-string guitar solely for his megahit "We Just Disagree." He sang the love song "Every Woman" to prove, in his words, "I'm a sensitive son of a bitch!" And he closed with "Feelin' Alright?" - a song written by Mason but made famous by Joe Cocker.

This finale brought the audience to its feet for a climactic conclusion.

Denny LaineDenny Laine has had a hand in more popular music than you probably realize.

He was a founding member and lead singer of The Moody Blues before Justin Hayward replaced him and the band took a different direction. In 1971, Paul and Linda McCartney recruited him to join their new band, Wings. That collaboration lasted ten years.

In between, Laine has recorded solo albums and worked with many of the biggest names in rock & roll. He spent much of his performance Sunday night at the City Winery dropping those names. He told stories of his interactions with McCartney, Jimi Hendrix, Sonny Boy Williamson, Paul Simon, and many others with whom he worked and befriended over the years. It was an evening of music and storytelling, and Laine drew on his over six decades in the business to provide both.

He told a story of the beautiful French girls who failed to show up for a Paris date with him and Mike Pender. While waiting for the girls, Laine wrote "Boulevard De La Madeleine" - a song that peaked at #2 in France.

He told of touring with Sonny Boy Williamson, who inspired him to write "Bye Bye Bird" - an early Moody Blues hit.

He talked of writing "Deliver Your Children" for Wings and of McCartney's suggestion to add a Spanish guitar to the arrangement.

He told of showing two partial songs to McCartney, who suggested combining them. When Laine admitted he had no words yet for the tune, Paul told him to call it "No Words." Denny later wrote words around this title.

Denny Laine and David GiardHe related the tale of co-writing and recording the classic "Band on the Run" album in Nigeria. Robbers stole the rehearsal master tapes from McCartney at knifepoint as he walked to his room. Laine closed by playing "Band on the Run," inspiring the audience to sing along.

Although most of Mr. Laine's career involved collaboration with a band, he performed solo on this night, accompanying himself on guitar. The 78-year-old no longer has the vocal range he boasted in his youth, but no one can question his guitar playing.

Nearly all of the evening's music was written or co-written by Laine. But he did insert his interpretation of Paul Simon's "Richard Coury" - a song that Wings would sometimes play in concert.

Laine endeared himself to the sold-out audience by his playing and his personality. After nearly two hours performing, he remained on stage to chat, sign autographs, and pose for photographs with fans.


Running an active YouTube channel can be hard work. You may want to offload some of that work to others. You likely do not want to share your password, so YouTube provides a way to grant access to other users, allowing them to perform actions on your account.

The user to whom you delegate much have a Gmail address and should have a YouTube channel (If they don't have one already, they will be prompted to create one when they accept your invitation.)

Granting Permission

The following section pertains the person granting permissions.

To begin, log into your YouTube account, click your account icon in the top right corner, and select [YouTube Studio] from the dropdown menu, as shown in Fig. 1.


Fig. 1

The "YouTube Studio" page displays. Select [Settings] from the left menu, as shown in Fig. 2.


Fig. 2

The "Settings" dialog displays, as shown in Fig. 3.


Fig. 3

Select [Permissions] to display the "Permissions" dialog, as shown in Fig. 4


Fig. 4

Click the [INVITE] button (Fig. 5) to display the Invitation dialog, as shown in Fig. 6.


Fig. 5

Invitation Dialogue

Fig. 6

At the "Email" field, enter the email address of the person to whom you wish to delegate permissions. This must be a valid Gmail address.

At the "Access" dropdown (Fig. 7), select the type of access you wish to grant to this user. A description appears below each access level. Only grant the amount of permission the user needs to perform the operations you wish to perform.

Access Dropdown

Fig. 7

After you select an Access permission, you return to the Invitation dialog, as shown in Fig. 8.

Invitation Dialogue

Fig. 8

Click the [DONE] button to close this dialog and return to the "Permissions" dialog, as shown in Fig. 9.


Fig. 9

Click the [DONE] button to grant permissions.

Accepting Permissions

The following instructions apply to the user to whom permission is granted.

You will receive an email similar to the one shown in Fig. 10.

Invitation Email

Fig. 10

Click the [ACCEPT INVITATION] button.

If you do not yet have a YouTube channel, you will be prompted to create one, as shown in Fig. 11.

How You'll Appear

Fig. 11

A confirmation message similar to the one shown in Fig. 12 displays, indicating what permissions you have on the channel.


Fig. 12

Click the [CLOSE] button to close this dialog and display your YouTube channel.

In order to act on the other channel to which you were granted permissions, click your account icon in the top right corner, and select [Switch account] from the dropdown menu, as shown in Fig. 13.


Fig. 13

Select the other channel, as shown in Fig. 14.

Switch Account

Fig. 14

You will now be able to perform any actions on that channel to which you were granted permission.


In this article, you learned how to grant permission to another user to manage your YouTube channel.

NOTE: Thank you to Peter Laudati for helping me work through and better understand this process.

Episode 737

Kira Soderstrom on Power Platform

Kira Soderstrom describes how to build low-code solutions using Microsoft's Power Platform.


Power Platform Training Material:



Power Platform Learning Resources and Customer Success Stories: 



PowerUp Online and Interactive Training Resources for Canvas Apps: 



Power Platform Admin Documentation: 



Power Platform Center of Excellence Overview: 



The Tannahill Weavers The Tannahill Weavers have been performing for 55 years. Dozens of musicians have come and gone over the years, but the two consistent members have been Roy Gullane on guitar and lead vocals; and Phil Smillie on various woodwind instruments. Saturday night at the Old Town School of Folk Music, they were joined by Malcolm Bushby on fiddle and Iain MacGillivray, who rotated between woodwind, fiddle, and bagpipes.

The Weavers have recorded some modern music over the years, but this concert consisted primarily of traditional Celtic songs - mostly from their native Scotland. Some of the music was written in the past century, but it still had a classic feel to it. They played jigs and ballads and reels, alternating between instrumentals and vocal compositions - many of which showed off the band's tight harmonies.

Roy Gullane took center stage, singing lead on most songs and chatting with the audience. He joked about the pleasantness of bagpipes and his younger romantic self. But it was MacGillivray who stole the shoe with his impressive bagpipe playing. This was the first time I had seen a bagpiper up close, and his melodies and rapid finger impressed me.

The show felt more intimate than most shows at the Old Town. The band performed in Szold Hall, which is much smaller than Maurer Hall, where most visiting artists perform.


Other bands have worked to keep Celtic music alive, but few have done so as long or as well as The Weavers.

Wuthering Heights cast I was unprepared when my friend took me to The Chicago Shakespeare Theatre Friday evening to see "Wuthering Heights."

I knew the Emile Bronte novel from reading it years ago. I remember very little of the 1939 William Wyler movie I saw decades ago. But I knew the story. Adopted Heathcliff, abused by his family and neighbors and haunted by the loss of his love, descends into madness and mistreats his own family in his quest for revenge. It is a dark tragedy that takes place on the depressing moors of northern England.

I was not expecting a musical.

This production by the UK's Wise Children Theatre Company is filled with song and dance. But, while the music entertains, the story retains the darkness of the source material.

Although this night's show elevated several understudies, I witnessed excellent performances! Ricardo Castro was brilliant as Heathcliff. We believe he was consumed by his anger and haunted by his lost love.

Among the regular cast, Georgia Bruce stands out in her portrayal of Heathcliff's abused wife Isabella, their sickly son Linton, and one of a group who portray the 18th-century Yorkshire moors.

In this adaptation, playwright and director Emma Rice omitted the character of Nelly, who served as a housekeeper and narrator of much of the story in the novel. Instead, she opted to bring to life the moors, casting multiple actors to speak, listen, sing, and dance as they advance the narrative. This technique works. The anthropomorphic moors frequently break the fourth wall to make sense of a plethora of characters, subplots, and deaths.


The entire performance exceeded my expectations.

GCast 142:

Security Defaults in Azure Active Directory

Security Defaults are a quick and easy way to set some basic security on an Active Directory tenant until you have time to define the policies appropriate to your organization.

Episode 736

Brian Korzynski on Machine Learning Challenges for a C# Developer

Brian Korzynski describes how write Machine Learning solutions in C# and the challenges creating, deploying, and consuming ML models.

Mavis Staples Mavis Staples is growing old. She turned 83 last year and has neither the energy nor the vocal range that made her famous in her youth.

But she pours into her performance all the energy that she has. She did so Saturday night at a sold-out Symphony Center. The Chicago Symphony Orchestra usually performs at this venue. However, Staples took the stage this night, accompanied only by a drummer, bass, guitarist, and two backing singers.

Inglewood native repeatedly told the delighted audience, "It's good to be home."

Although fans in the crowd cried out for "The Weight" and "I'll Take You There," Mavis skipped those songs. Still, the sold-out crowd loved her musical selection, as she mixed blues, soul, gospel, and R&B. My favourites were "Respect Yourself" and her version of The Talking Heads' "Slippery People."

Between each song, Mavis relaxed, sipped her tea, and gathered her strength before throwing herself into the following number.

There was no encore, but it was an entertaining evening. Even the warmup band (blues singer/guitarist Celisse) was excellent. Mavis Staples is a national treasure, and I am happy I finally had the chance to see her live.



Spafford Spafford has taken a non-traditional approach to building an audience. They self-produce their albums and release them on their own label, tour frequently, and live-stream their concerts. Much like the Grateful Dead and Phish (bands that clearly influenced Spafford), they expand their audience via word of mouth rather than radio airplay.

It works. Spafford has developed a large international following and sells out shows worldwide. Fans packed the Park West concert hall Friday night to see Spafford perform live.

The band's music did not disappoint. They filled two sets and an encore with funky jazz-influenced rock melodies. The musicians are first-rate and extended each song with impressive improvisational solos. Much of the music was hypnotic, intensified by the laser light show behind them. They played only eleven songs, each lasting 10-20 minutes, so the show continued well past midnight. Puzzlingly, their announced "short break" stretched to over a half hour.

Friday night's set consisted almost entirely of originals. The lone exception was a bluesy rendition of the Eagles' "Those Shoes," which bled into an extended instrumental break.

Each band member is a proficient musician. Jordan Fairless on bass, Cory Schechtman on keyboards, and Nick Tkachyk on drums all impress; but Brian Moss's guitar licks stood out. His fingers burned across the stream on solos and provided great rhythm when others took the spotlight.

If you missed this show, do not despair. There is a good chance they will play at a venue close to your home. And if you miss that, you can catch live streams and recordings of their concerts.

Episode 735

Jeffrey Miller on Building a Second Brain

Tiago Forte's book "Building a Second Brain" describes how to manage the flood of information we consume each day. Jeffrey Miller discusses the principles and practical applications of Forte's framework.

https://www.buildingasecondbrain.com/ https://www.skeeterbooks.com/

January 2023 Gratitudes

Comments [0]

Today I am grateful for some time off over the holidays and a chance to work on some non-work things.

Today I am grateful for a new power supply in my computer

Today I am grateful my chiropractor was able to see and treat me on short notice

Today I am grateful to attend an exciting Bulls - Nets game with my son last night.

Today I am grateful to replace the battery in my car key fob

Today I am grateful my replacement CPAP machine arrived

Today I am grateful to see "Improvised Jane Austen" at iO Theater last night.

Today I am grateful my back pain is finally subsiding after two weeks

Today I am grateful to arrive safely in Sandusky, OH.

Today I am grateful to Chris for a place to stay this week.

Today I am grateful to see so many old friends this week.

Today I am grateful for those who say nice things about me in public.

Today I am grateful to the organizers of #Codemash, their willingness to adapt, and their transparency toward the attendees.

Today I am grateful for my new electric kettle.

Today I am grateful to see "The Ripple, The Wave That Carried Me Home" at the Goodman Theatre last night.

Today I am grateful to see the Sheryl Youngblood band perform at SPACE last night.

Today I am grateful for a long conversation with an old friend last night

Today I am grateful:

-for lunch with my team to welcome the new guy

-to Jason for answering my questions about book publishing

Today I am grateful for lunch with Michael yesterday

Today I am grateful that I am still employed.

Today I am grateful to see John Ondrasik, a.k.a. Five for Fighting in concert last night.

Today I am grateful to schedule a bunch of interviews with smart people for my show over the next few weeks

Today I am grateful for a new wireless mouse and keyboard.

Today I am grateful to stay at home when the weather is bad.

Today I am grateful to see Patty Griffin in concert last night.

Today I am grateful for a bunch of minor repairs on my car.

Today I am grateful that the gym in my building is open again after being closed for 3 years.

Today I am grateful to see "Chicago - The Musical" from the front row of the CIBC Theatre yesterday.

Today I am grateful to deliver a virtual presentation at the SpartaHacks hackathon at Michigan State University.

Today I am grateful for exactly 5 years in my current home.

Today I am grateful for drinks with Dan and a group of MVPs last night.

Today I am grateful to see a live recording of "Wait Wait Don't Tell Me" last night at the Studebaker Theatre.

Today I am grateful to see Spafford in concert last night.


Today I am grateful to see Mavis Staples in concert last night.

Chicago in Chicago

Comments [0]

Roxy and Velma "Chicago - the Musical" was excellent! Great music! Great dancing! Great performance! Great seats!

I have seen the 2002 movie adaptation multiple times but had never experienced the live musical until Sunday afternoon at Chicago's CIBC Theatre.

For those few who don't know, "Chicago" is the story of Velma and Roxie - a sexy cabaret singer and a sexy wanna-be cabaret singer, each of whom is arrested for murder. Sleazy lawyer Billy Flynn takes on their cases and manipulates the media to move public opinion in favor of the ladies.

The play contains almost no good people, no lessons learned, and no tale of moral redemption. The only one who shows kindness is Roxie's husband, Amos, who is so mistreated and ignored that he musically refers to himself as "Mr. Cellophane." ("Mr. Cellophane shoulda been my name, 'cause you can look right through me; walk right by me; and never know I'm there!")

The cast of ChicagoBut the story is funny, and the songs are fantastic. And the production by this year's touring company featured great choreography and excellent singing from all the cast members. Logan Floyd and Katie Frieden are perfect as the amoral femme fatales Velma and Kelly Roxie, while Jeff Brooks shines as the sleazy Jeff Brooks. Other standouts included Brian Kainowski as the dimwitted Amos and Christina Wells portraying prison matron "Mama" Morton.

The music recalls the jazz of the 1920s and serves as a backdrop for the wild lives of the characters.

My seats in row 1 were labeled "Obstructed View" because we could not see the performers' feet. But this proximity to the stage made one feel a part of the show. On multiple occasions, the actors directed their lyrics right at us.

"Chicago" was a bucket list show for me. This was one of the most enjoyable performances I have attended.

GCast 141:

Conditional Access Policies in Azure Active Directory

Learn about Azure Active Directory conditional access policies and how to use them to apply policies for users, devices, or applications.

Episode 734

Peter Ritchie on Naming Things in Software Projects

Peter Ritchie discusses the importance of Naming Things consistently in your software development projects.


Patty Griffin There is something about Patty Griffin. It is not her vocal range, which time has diminished from its impressive peak two decades ago. It is not her musicianship. She is an adequate guitar, mandolin, and piano player; but recognizes her limitations enough to bring on tour David Pulkingham, whose instrumental mastery surpasses hers.

First, it is her songwriting. The simplicity of Patty's melodies hide the deepness of the lyrics and arrangements. Second, it is her emotional connection with an audience. When she sings, you can feel what she was feeling when she wrote the song. And when she talks, she connects with the audience as if we were old friends having a conversation.

She reinforced this connection Thursday night at The Old Towne School of Folk Music in Andersonville. A full house enjoyed two hours of music from Ms. Griffin, who captivated us all. She chatted with the audience between songs. She talked about the Chicago snow and reminded us to drive safely. She joked about growing up in Old Town, Maine, and how appropriate it was that she performed at a place with the same name. She told the story of the town's demise when the mills closed. She lamented the changes to her adopted home of Austin, Texas. She railed against Texas politicians, then apologized for talking politics.

Musical highlights included angelic melodies like "Mary" and "Heavenly Day" and the rousing finale, "No Bad News."

The night moved quickly as Griffin transitioned from song to song. Before I knew it, the show was over, and it was time to drive home in the Chicago snow.


When John Ondrasik signed with EMI Records in 1995, the record label convinced him to release his music under the name "Five for Fighting". They were convinced the era of the singer-songwriter had passed and wanted a name that sounded like a band.

EMI's American label folded shortly after the Five for Fighting's first album, but Ondrasik kept the stage name. 

On Saturday night at Evanston's SPACE, Ondrasik appeared under his real name. He was alone on stage, accompanied only by his guitar and piano.

Ondrasik announced that he would take requests and play any song that he could remember. Immediately, multiple audience members shouted for his 2003 hit song "100 Years". He replied, "If I play 100 Years now, it will be the earliest I have ever played it in a concert." He sat down and played it right away. The audience loved it, and Ondrasik joked, "I hope everyone doesn't leave now."

They did not leave, and the singer-songwriter entertained them for over two hours, drawing on his catalog of six studio albums. At 58, his voice still retains the great range that appealed to adult contemporary radio audiences in the 1990s.

In between songs, he told stories of his life. He explained how much he enjoys playing "100 Years," - a song describing changing feelings as one ages. "When I wrote the song," he explained, "I was in the second verse. Now I'm in the bridge."

Ondrasik has a passion for supporting American soldiers. He has performed for the troops many times and written songs about military struggles in Afghanistan and Ukraine. He spoke on this topic for some time during the show. It was an interruption in the music, but his passion held the audience. After his speech, he presented a slideshow of his recent trip to Ukraine while he performed "Can One Man Save the World?" - a tribute to Ukrainian President Volodymyr Zelenskyy, who is currently fighting the Russians invading his country.

His SPACE performance was not part of a tour. Ondrasik was in town to see the premiere of "Last Out" at Chicago's Steppenwolf Theatre - a play about a green beret attempting to rescue those left behind after America withdrew from Afghanistan. He decided to schedule a solo show while in the area. 

Chicagoland was fortunate on this night.


Azure Active Directory (AAD) provides groups as a way to manage multiple users together. After you create a Group, you can add Users to that Group. This article walks you through the process of adding Users to an AAD Group.

Adding a User to a Group

To add Users, first log onto the Azure Portal as an Administrator; then search for Azure Active Directory, as shown in Fig. 1.

Search For Azure Active Directory
Fig. 1

The "Overview" blade of Azure Active Directory displays, as shown in Fig. 2.

Azure Active Directory
Fig. 2

In the left menu, click the [Groups] button (Fig. 3) to open the "All Groups" blade, as shown in Fig. 4.

Groups Button
Fig. 3

All Groups Blade
Fig. 4

Find your Group by entering text in the search text box at the top of the blade, as shown in Fig. 5.

Search For Group
Fig. 5

Click the name of the group to display the group's "Overview" blade, as shown in Fig. 6.

Overview Blade
Fig. 6

Click the [Members] button (Fig. 7) in the left menu to display the "Members" blade, as shown in Fig. 8.

Members Button
Fig. 7

Members Blade
Fig. 8

To add members, click the [Add members] button (Fig. 9) to display the "Add members" dialog, as shown in Fig. 10.

Add Members Button
Fig. 9

Add Members Dialog
Fig. 10

Search for and Select the Users you wish to add to this Group. They will display under the "Selected items" section. You can click the [Remove] button next to a User to remove them from this list. Click the [Select] button to commit these changes. A list of all members of the Group will display, as shown in Fig. 11.

Members List
Fig. 11

NOTE: Click the [Refresh] button if you do not see the Users you just added to the Group.

Now, any permissions you apply to the Group will apply to all Users who are members of this Group.


In this article, you learned how to add Users to an Azure Active Directory Group.

The cast of The Ripple, The Wave that Carried Me Home "The Ripple, The Wave that Carried Me Home" tells of racism, segregation, family, and home, and it does so in barely 90 minutes.

Christian Anderson's play focuses on Janice, a young professional black woman with a career in Ohio, who receives a call requesting her to speak at a dedication ceremony in her hometown of Beacon, Kansas. The folks in Beacon have decided to name the local swimming pool after Janice's father, who was instrumental in integrating the city's pools.

The call brings back memories Janice of growing up in Beacon, the prejudices her family suffered, her parents' fight for social justice, and her strained familial relationships.

Chicago's Goodman Theatre production of "Ripple" was powerful, humorous, and moving. The story is told in flashbacks to the family history. Each actor had to play themself at different ages, and they did so perfectly. Among a small cast, Chrstiana Clar stood out as Janice, as did Ronald L. Conner and Aneisa J. Hicks as Janice's parents, Edwin and Helen.

We saw the passion and pain of growing up in segregated 1960s America. A police officer's assault of Helen during a traffic stop was particularly disturbing. Flashing forward to the "present," we saw the family's reaction to the Rodney King verdict as it played out on national TV.

Through it all, we saw the presence of water. A pool lit with fluorescent blue light was always visible on stage - a reminder of the segregation that existed explicitly for so long in this country - a symbol of every separate but unequal public service in places across America.

This play made me smile. But it also made me sorry for some of my country's history.

GCast 140:

Using the Microsoft Graph API

Learn how to use the Microsoft Graph API to manage resources in Microsoft 365, such as users' OneDrive files and emails.

I will cover how to call the API, as well as the prerequisites required to use this API.


Dealing with and managing individual Users in Azure Active Directory (AAD) can be a challenge - particularly when your organization has many Users. The same can be said for managing many Devices in AAD. To help, AAD allows you to create Groups and add Users and Devices into these Groups. You can then manage many Users or Devices simultaneously by managing the Group or Groups to which they belong. You can add Users or other Groups or Devices to an AAD Group.

Types of Groups

AAD provides two kinds of Groups: Security Groups and Microsoft 365 Groups.

A Security Group allows you to set security permissions on the entire Group. You can allow or deny an entire Group to perform a specific action (e.g., read, create, or update) on a specific asset or set of assets.

A Microsoft 365 (M365) Group is used for communication, allowing you to send email messages to an entire Group of Users at once. This replaces what was once called a Distribution Group.

Membership Types

AAD allows a Group to be either Assigned or Dynamic. You will explicitly add Users and Groups to an Assigned Group. For a Dynamic Group, you will enter a set of criteria. Only Users or Devices matching that criteria are added to the Group.

Creating a Group

To manage AAD Groups, log onto the Azure Portal as an Administrator; then search for Azure Active Directory, as shown in Fig. 1.

Search For Azure Active Directory
Fig. 1

The "Overview" blade of Azure Active Directory displays, as shown in Fig. 2.

Azure Active Directory
Fig. 2

In the left menu, click the [Groups] button (Fig. 3) to open the "All Groups" blade, as shown in Fig. 4.

Groups Button
Fig. 3

All Groups Blade
Fig. 4

Click the [New Group] button (Fig. 5) to display the "New Group" dialog, as shown in Fig. 6.

New Group Button
Fig. 5

New Group Dialog for Security Group Type
Fig. 6

At the "Group type" dropdown, select the Group type ("Security" or "Microsoft 365"). By default, the "Security" Group type is displayed. If you select "Microsoft 365" at the "Group type" dropdown, the dialog prompts change, as shown in Fig. 7.

New Group Dialog for Microsoft 365 Group Type
Fig. 7

As you can see, the Microsoft 365 Group includes one more prompt - for the Group email address.

At the "Group name" field, enter a name that is unique for this Azure Active Directory.

For a Microsoft 365 Group, enter an email address at the "Group email address" field. Every User in the Group will receive any message addressed to this email address. This prompt does not display for Security Groups.

At the "Group description" field, enter a brief description of the Group.

At the "Azure AD roles can be assigned to this Group" prompt, select "Yes" if you would the ability to add Azure Active Directory roles to this Group, in addition to Users and Groups. This setting cannot be changed after the Group is created. If you select "Yes", an extra "Roles" prompt will appear and the "Membership type" prompt will select "Assigned" and will be disabled, so you cannot change its value.

At the "Membership type" dropdown, select "Assigned" or "Dynamic User" or "Dynamic advice". Your selection will determine some proceeding prompts. Assigned membership type tells AAD that you will explicitly select the Users, Groups, and (potentially) roles that belong to this Group. Dynamic User and dynamic Device membership types allow you to define queries. Any User or Device that matches that query is automatically assigned to this Group.

Regardless which Membership Type you selected, you can assign Owners to the Group. A Group Owner is allowed to manage a Group - for example adding and removing Users from the Group. At the "Owners" link, select the Group's Owners, using the dialog shown in Fig. 8.

Add Owners dialog
Fig. 8

If you selected the "Assigned" Membership Type (Fig. 9), click the "Members" link to display the "Add members" dialog (Fig. 10) and select the Users and Groups that will be members of this Group.

Assigned Membership Type
Fig. 9

Add Members dialog
Fig. 10

If you selected the "Dynamic User" Membership Type (Fig. 11), click the "Add dynamic query" link to display the "Dynamic membership rules" dialog (Fig. 12) to build a query. Any User for which this query returns true will be a part of this Group.

Dynamic User Membership Type
Fig. 11

Dynamic Membership Rules dialog
Fig. 12

If you selected the "Dynamic Device" Membership Type (Fig. 13), click the "Add dynamic query" link to display the "Dynamic membership rules" dialog (Fig. 14) to build a query. Any Device for which this query returns true will be a part of this Group.

Dynamic Device Membership Type
Fig. 13

Dynamic Membership Rules dialog
Fig. 14

Click the [Create] button to create the Group.


In this article, you learned how to create an Azure Active Directory Group - a useful way to manage many Users or Devices at once.

<< Older Posts | Newer Posts >>