Episode 860

Mike Shelton on PostgreSQL and AI

Partner Solution Architect Mike Shelton discusses
- the features of PostgreSQL
- the advantages of PostgreSQL on Azure (Azure Database for PostgreSQL), including scalability and reliability, and flexibility
- AI extensions for PostgreSQL, pgvector and Azure AI
- Solution accelerators
- Learning resources

Links:

https://azure.microsoft.com/en-us/blog/product/azure-database-for-postgresql/
https://learn.microsoft.com/
https://developer.microsoft.com/en-us/reactor/events/25047/


I grew up in Grosse Pointe, MI—a quiet Detroit suburb that also happens to be the hometown of author Jeffrey Eugenides. In Grosse Pointe, there is a street named "Middlesex." In his 2002 novel "Middlesex," Eugenides has the Stephanides family move to this street to escape the 1967 Detroit riots. But "Middlesex" has a different meaning in this story. The protagonist of the book was born with a chromosomal mutation that gave them both male and female characteristics. Despite being a genetic male, the child's parents named them "Calliope" and raised them as a girl. Calliope learned the truth at age 14, when a doctor revealed the anomaly and suggested sexual reassignment surgery to reinforce female traits. Threatened with castration, Calliope ran away to California, changed their name to Cal, and began living as a male.

But this book is more than Calliope/Cal's story. Eugenides takes us back to the child's grandparents - a brother and sister from a small town in Turkey, whose marriage passed on a recession gene to their son, Milton. When Milton married his cousin, the inbreeding resulted in their hermaphrodite child.

Eugenides takes us through the lives and struggles of three generations: immigrants trying to assimilate into American society, the stress of building a business amid the urban unrest of the 1960s, and the identity crisis of the protagonist. It is an epic tale that frequently switches characters and time periods, but always moves forward.

In addition to the shifts in time, the book also shifts the perspective of the characters, and even shifts the narration from first to third person. Adult Cal relates the story, but often shifts to the third person when talking about his time as Calliope.

Sometimes, Eugenides makes the story surreal. A scene late in the novel reveals the hallucinations that go through the mind of a man dying in a car crash. Cal refers to some characters only by nicknames. He refers to his first crush only as "Obscure Object" and to his brother as "Chapter 11."

"Middlesex" is a story of generational trauma, family secrets, and significant life transitions. It is an epic tale that warns of external and internal dangers.


Years ago, Dave Barry was in a Hyatt hotel room when he noticed a sign warning guests that they would be charged $75 if they stole towels from the rooms. So he stole the sign. He displayed it in his home bathroom to amuse visitors. Years later, Oprah Winfrey invited Dave onto her show, asking him to confess some sin and make amends for it. He decided to admit to the sign theft and hand it to Oprah so that she could return it to the Hyatt. Unfortunately, Oprah's show was recorded in a Chicago studio, while the sign was at his home in Florida. Thinking fast, Barry realized he was staying at another Hyatt, so he stole another sign from that hotel, so he would have something to give to Oprah.

These are the kind of anecdotes Dave Barry tells in his new memoir, "Class Clown: The Memoirs of a Professional Wiseass: How I Went 77 Years Without Growing Up."

Barry discusses his life, career, and family, interspersing the narrative with excerpts from the columns he wrote as a humorist for decades.

I read Dave Barry's column regularly for years. The Miami Herald syndicated it into numerous newspapers where I lived. I remember the column he wrote, finding issue with a Neil Diamond lyric in which Diamond complains that the chair cannot hear him saying "I Am, I Said." According to this book, Dave received a lot of hate mail from Neil fans over that one.

I recall some of his catch phrases, as he mentioned "alert readers," who had sent him quirky local news items. I grew to love his style, which often consisted of wildly implausible tales, followed by "I'm kidding, of course" or absurdly bad advice to the reader. His columns contained so much misinformation that he had to include a parenthetical "I am not making this up)" when writing something crazy-sounding, but true.

Not everything in "Class Clown" is played for laughs. Mr. Barry loved his parents but tells an honest story about his father, whose alcoholism led to an early death, and his mother's battle with depression, which ended in her suicide.

But most of this book is light-hearted and much of it is laugh-out-loud funny. Seriously, even the footnotes are often hilarious. Dave even reveals why he stopped writing a regular column: He wanted to quit before he stopped finding himself funny.

He concludes with some life lessons that I will share:

  1. You should not confuse your career with your life.
  2. A person who is nice to you but rude to the waiter is not a nice person.
  3. No matter what happens, somebody will find a way to take it too seriously.
  4. Your friends love you anyway.
  5. Nobody cares if you can't dance well. Just get up and dance.

I finished "Class Clown" in a couple of days and (I am not making this up) I loved it!


Episode 859

Sudeep Goswami on Traefik

Traefik is a modern HTTP reverse proxy and load balancer that makes deploying microservices easy. Traefik Labs CEO Sudeep Goswami talks about their Open Source project, and the features of its free and commercial tiers: Traefik Proxy, Traefik, API Gateway, and Traefik API Management.

Links:

https://github.com/traefik/traefik
https://doc.traefik.io/
https://traefik.io/


Taylor Jenkins Reid's 2017 novel, "The Seven Husbands of Evelyn Hugo," tells the story of famous fictional actress Evelyn Hugo, her rise to stardom, and her personal struggles.

The book is a story within a story. Reclusive 79-year-old Hugo invites young, unknown journalist Monique Grant to her home on the pretense of writing a story about a charitable contribution. When Grant arrives, Hugo reveals that she wants to tell her life story to Grant so that Grant can write her biography after Hugo's death. For a reason she does not explain until the end of the novel, Hugo has decided that only Grant can tell her story. The enigmatic Hugo was once among the most glamorous and successful actresses in the Hollywood film industry.

Most of the book is a chronological recounting of the actress's life, from her abusive upbringing in New York's Hell's Kitchen to her tumultuous Hollywood career and her equally tumultuous love life. Periodically, the narrative shifts from Evelyn's past to the present-day interview, revealing the relationships between Grant and Hugo, Grant and her ex-husband David, and Grant and the editors of her magazine. Although both narratives are told in the first person (the past by Evelyn and the present by Monique), I had no trouble switching contexts and establishing where the story was in time and place.

Evelyn was confident and self-centered. She used some of her marriages to get what she wanted. She married her first husband to escape her abusive childhood home and pursue an acting career; then, she divorced him as soon as she achieved that goal. To be fair, some of her husbands used her as well. Two husbands she loved. One began beating her a few months after their wedding; the other only married her to boast of a movie star wife. Her fourth husband, Harry, was a gay man who knew her secrets. He was her best friend.

Each of the seven chapters is named for one of Evelyn's husbands. But these marriages only frame the timeline of her life. The book is less about her husbands than about her personal life outside marriage, particularly her homosexual relationship with actress Celia St. James. The two beautiful women fell in love, but recognized that revealing a lesbian affair would destroy their careers. So they married men to hide their sexuality, met clandestinely, and suffered the inevitable strain of their secret liaisons.

Reid builds a fascinating set of characters, highlighted by Harry, Evelyn, and Celia, who struggle to hide their sexual identities and to remain close. Evelyn hides both her bisexuality and her Cuban upbringing - dying her hair blond and refusing to speak Spanish. She is likeable but manipulative, often using her beauty to advance her ambitions. She tells Monique that she has no regrets about her "scandalous" behavior.

There are two significant twists in this story. One comes early when Evelyn and Celia fall in love. Reid waits until the end to uncover the final twist - one that involves Evelyn, Harry, and Monique, and reveals why the actress chose an unknown journalist to write her biography.

Although Evelyn expresses no regrets for her actions and decisions, she experiences definite growth in her life, learning to accept who she is as she grows older. Some of this self-assurance rubs off on Monique as a result of the brief time they spend together.

"Seven Husbands" is a story of the effects fame can have on a personal life. It is about the suffocating nature of a homophobic, patriarchal society. Evelyn survives this society and even succeeds. But she can never be her true self.


The title of "Number One is Walking" by Steve Martin and Harry Bliss confused me. Martin clarifies this early in the book. The top-billed star in a movie is referred to as "Number One." When that star leaves his trailer and heads to the set, an assistant radios ahead that "Number One is walking" to indicate they should prepare for the next scene. Steve Martin was Number One in his first few movies, which fed his ego, so he was surprised and disappointed when he heard an assistant on "It's Complicated" announce: "Number Three is Walking."

"Number One" is half a show business autobiography and half a graphic novel. Bliss illustrates the conversations he had with Martin as they stroll through a park, drive through a country, or enjoy a meal together. Martin recounts anecdotes from his moviemaking days, and Bliss illustrates these as well, complete with dialogue in word balloons. We hear about Steve's interactions with Martin Short, Carl Reiner, and Robin Williams.

The stories are not deep insights. Instead, the authors rely on amusing interactions. When talking about a pleasant afternoon with Helena Bonham Carter, Martin thought she was normal until she walked in a circle multiple times before entering an elevator. When questioned, Carter explained that she was walking off a fart. These are the kind of stories you get in this book.

The book tells these stories with the wit we have come to expect from Steve Martin and with a style that Harry Bliss perfected during his years as a cartoonist for the New Yorker.

The second half of this volume consists of single-panel, full-page comics, each telling a single joke. Presumably, the idea originated from Steve, and Harry created the artwork.

Steve Martin is no longer the wild and crazy guy of his youth. He has matured into a thoughtful adult who is not afraid to make fun of himself. He does so in this book with the help of Harry Bliss.


GCast 197:

Forking a GitHub Repository and Creating a Pull Request

Collaborating on code can be risky. This video shows you how to Fork a Repository (make a copy in your GitHub account) and merge your changes back into the original repository with a Pull Request


I am working with the Azure Kubernetes Service team to create videos showcasing Microsoft partners and how they use AKS to add value to their solutions.

Recently, I spoke with Stas Stolposki and Achilles Chalkyotas from Grid Dynamics about their project.


Episode 858

Jerry Nixon on Using an MCP Server to Add OpenAI to an Application

Jerry Nixon shows an architectural approach to building that uses a chat interface to maintain data, taking advantage of AI and an MCP server, while minimizing risk. He even shows a demo of his code!

Links:
https://aka.ms/dab
https://aka.ms/dab/docs
https://aka.ms/dab/mcp
https://aka.ms/sql/vector
https://aka.ms/sql/dev/path
https://aka.ms/SqlServer2025


June 2025 Gratitudes

Comments [0]

7/6
Today I am grateful to celebrate the birthday of someone very special yesterday.

7/5
Today I am grateful for a bike ride around Lemont, IL yesterday.

7/4
Today I am grateful to spend time with my niece Amanda yesterday in Chicago.

7/3
Today I am grateful for a visit to the Union Stockyard Gate yesterday.

7/2
Today I am grateful to visit the Art Institute of Chicago at lunchtime yesterday.

7/1
Today I am grateful for a visit to the Museum of Science and Industry yesterday.

6/30
Today I am grateful for a visit to the Museum of Science and Industry yesterday.

6/29
Today I am grateful to see "The Color Purple - The Musical" at the Goodman Theatre last night.

6/28
Today I am grateful to see Del McCoury in concert last night.

6/27
Today I am grateful to renew two certifications yesterday

6/26
Today I am grateful to attend an End-of-Fiscal-Year party in Lombard, IL yesterday.

6/25
Today I am grateful to attend a Woman at Microsoft event yesterday featuring Dr. Lynessa Rico talk about empathy.

6/24
Today I am grateful for good health insurance.

6/23
Today I am grateful for a late Father's Day celebration this weekend.

6/22
Today I am grateful to attend the birthday party of a 1-year-old yesterday

6/21
Today I am grateful for:
- a visit to the Museum of Modern Art yesterday.
- a brief vacation in New York City this week

6/20
Today I am grateful
- for my first visit to the Statue of Liberty and Ellis Island
- to see "Hell's Kitchen" on Broadway last night

6/19
Today I am grateful:
- to host a hackathon in New York City yesterday
- to see "Stephen Sondheim's Old Friends" on Broadway last night

6/18
Today I am grateful to arrive safely in New York late last night.

6/17
Today I am grateful to spend time with our new interns the past few weeks.

6/16
Today I am grateful for a virtual visit with my sons to celebrate Father's Day yesterday!

6/15
Today I am grateful to spend a day resting and recovering from a bad cold.

6/14
Today I am grateful to deliver a fun presentation on playing pickleball to my team yesterday.

6/13
Today I am grateful to see Garrison Keillor last night in an evening of stories, poetry, and music.

6/12
Today I am grateful to catch up on video editing

6/11
Today I am grateful to study Spanish on Duolingo every day for the last year.

6/10
Today I am grateful to attend an interesting ADPList panel of product design last night.

6/9
Today I am grateful to return to Maxwell Street Market yesterday for the first time in years.

6/8
Today I am grateful to see a lecture by Alison Bechdel yesterday.

6/7
Today I am grateful to see Judy Collins in concert last night.

6/6
Today I am grateful to re-launch the Chicago Cloud Computing User Group with Eric after a multi-year hibernation and to deliver a presentation on Azure AI Search at last night's meeting.

6/5
Today I am grateful:
- to attend Beth's 20-year celebration yesterday
- to speak at the Pittsburgh .NET User Group yesterday
- to attend an exciting Tigers-White Sox game with my sons last night

6/4
Today I am grateful to hear Ron Chernow talk about his new biography of Mark Twain last night.

6/3
Today I am grateful to see a dominant Tigers victory at Rate Field last night.

6/2
Today I am grateful to help clean up McKinley Dog Park this weekend.


When Laura was nine years old, her father drove off and did not return for four years, leaving her to raise her two younger sisters alone in the woods of Ontario.

For years, Peter's mother locked him in an attic every day of his childhood until she returned from work. He grew up without human contact and without learning to speak.

The Canadian government forcibly removed Danny from his parents' home and sent him to a boarding school, where he was physically, emotionally, and sexually abused and forced to reject his Indigenous culture and heritage.

Alana's father raped her repeatedly, beginning when she was four years old, and punished her if she did not pretend to enjoy it.

Madeline's mother was incapable of love and repeatedly called her a "monster." Her father was afraid of both her mother and stepmother and refused to protect Madeline from either.

Each of these was a patient of psychologist Catherine Gildiner. Gildiner's 2019 book "Good Morning, Monster" includes the stories of five people who suffered through a horrible childhood that left emotional scars well into their adult lives. But her narrative emphasizes their recovery from those scars and their journey to a more successful adulthood. She calls them "heroes" because of what they overcame.

Laura, Peter, Danny, Alana, and Madeline came from different backgrounds but shared some experiences. They suffered child abuse and neglect at the hands of adults who should have been protecting and caring for them. They lacked good role models, so they grew up without knowing how to behave, cope, or choose a good partner.

And they had the courage to survive, recover from unimaginable childhood trauma, and improve themselves.

Dr. Gildiner's therapy helped these recoveries, but Gildiner does not take the credit. Rather, she points out mistakes she made as a psychologist that sometimes threatened to derail the recovery process. In Madeline's case, she analyzed her own motivations for taking on the case.

Her book also humanizes the story's villains - those who tormented the five heroes when they were children. Many of them suffered their own abuses growing up, which affected the way they dealt with their children. One heroic action is that the five subjects were able to break this generational trauma, some of them raising children of their own.

"Good Morning, Monster" is a heartbreaking story of people experiencing abuse that no one should have to endure. I sometimes had trouble sleeping the night after reading about these horrific experiences. But it is also a story of hope and courage. Most of us have never experienced the nightmares of these heroes. But we can draw inspiration from their recovery.


I am working with the Azure Kubernetes Service team to create videos showcasing Microsoft partners and how they use AKS to add value to their solutions.

Recently, I spoke with Sudeep Goswami CEO Sudeep Goswami about the their project.


I was invited to speak about Data Visualization at the NDC London conference earlier this year.

Here is a video of my presentation.



Episode 857

Jerry Nixon on SQL Server Extension for VS Code

Visual Studio Code is a great tool for developers. The SQL Server extension for VS Code gives developers access to data tools from within the IDE. Jerry Nixon describes the new and preview features of this plug-in and demonstrates their use.


The Color Purple at the Goodman Theatre, 2025One wonders if Alice Walker ever envisioned her Pulitzer Prize-winning 1982 novel "The Color Purple" being adapted into a musical. But songwriters Brenda Russell, Allee Willis, and Stephen Bray did just that in 2005. And Saturday evening, I was able to see the latest adaptation of this musical at Chicago's Goodman Theatre.

While the show's story remained faithful to Walker's novel, director Lili-Anne Brown brings a fresh perspective. Gone are the series of letters that composed the book, replaced by actions, words, music, and dancing. I enjoyed the periodic appearance of three muses who sang the latest gossip as a way of delivering exposition.

Brittney Mack was excellent as Celie, who overcame a life of tragedy to achieve self-actualization. Raped by her father and husband in her early teens, she grows throughout the show - mainly through the influence of glamorous Shug Avery, played tonight by Reneisha Jenkins. Curtis Bannister and Nicole Michelle Haskins delivered outstanding performances as the sadistic Mister and the rambunctious Sofia, respectively.

The book was ambiguous about the passage of time in this period piece, setting its story in some time in the early nineteenth-century Georgia. This play displayed the years in large, illuminated letters to indicate the passage of decades clearly.

The music of Russell and Willis combines jazz, blues, gospel, and modern show tunes wonderfully. Each song brought out emotions in the audience.

The show's running time (almost three hours) may turn off some attendees, but its compelling story and beautiful music kept me engaged throughout the evening.


DelMcCoury2025Del McCoury grinned at the sold-out crowd and told them: "I feel kind of silly tonight." He smiled often during his tour hour performance in front of a packed house at the SPACE nightclub in Evanston.

The band planned the setlist for the first hour, drawing on McCoury's dozens of albums released over many decades. They mixed upbeat instrumentals with sad, slow country tunes and at least two songs bout murder.

Halfway through the show, Del announced to the audience that the band would take requests. The audience shouted their favorites, and the band obliged for the next hour.

McCoury is not afraid to step back and let his band members take the spotlight on their solos. And what a band he has - highlighted by his sons Ronnie (mandolin) and Rob (banjo). The entire band was excellent, but Ronnie's solos were outstanding. Rob's young son joined the band on stage to play guitar, adding one more generation to the McCoury family.

This concert was my first time at SPACE since their renovations earlier this year. The place looks beautiful, especially the entrance area. A spacious bar replaces the narrow hallway in which patrons used to wait. The Sullivan Sisters - local teenage siblings on guitar and banjo - were an impressive start to the evening.

But tonight belonged to Del McCoury. At 86, he shows no signs of slowing down. He enjoys the music and the audience, and he showed this to us on Friday evening.


GCast 196:

Deleting a GitHub Repository

Learn how to permanently delete a GitHub repository.


Adding GitHub Copilot Custom Instructions

GitHub Copilot is an AI agent that can assist developers in writing code. By simply typing a prompt in a natural language (like English), GitHub Copilot can generate code for you.

If you are using Visual Studio or Visual Studio Code, you can make GitHub Copilot even more powerful by adding Custom Instructions to your project. Custom instructions are sent with every prompt you enter. This is useful if you want to apply rules or guidance to all code in your project.

To take advantage of Copilot Custom Instructions, create a folder named ".github" in the root of your project and add a file name "copilot-instructions.md". In this markdown file, enter any natural language instructions you like. These instructions can refer to coding styles, naming conventions, or preferred frameworks and tools.

Below is an example of instructions in a "copilot-instructions.md" file:

Method names should be descriptive with mixed case and an underscore between words
Always use hungarian notation for variable names
Use 2 spaces for indentation
Use single quotes for strings
Use double quotes for docstrings
Prefix private class members with underscore (_)
Use ALL_CAPS for constants
For methods and classes, place the curly braces on a different line from the method or class name.

For error handling:
- Add try/catch blocks to all methods
- Use specific exceptions
- Avoid using generic exceptions
- Use custom exceptions for specific cases
- Log errors with a logger
- Always log errors with contextual information

Add triple slash comments at the top of each class and method. Include a brief description of the class or method, its parameters, and return values.

After saving the above file, I entered the following prompt:

Create a class to manage customers with CRUD methods. Allow passing in objects or properties

This prompt generated the following code. Note that the conventions in the code match those in my instructions file.

/// 
/// CustomerManager class manages customers with CRUD methods.
/// Methods accept Customer objects or individual properties.
/// 
public class CustomerManager
{
    private List _lstCustomers = new List();
    private const int NOT_FOUND = -1;

    /// 
    /// Add_Customer adds a new customer.
    /// Params: objCustomer or (nCustomerId, strName, strEmail)
    /// Returns: bool (success)
    /// 
    public bool Add_Customer(Customer objCustomer)
    {
        try
        {
            _lstCustomers.Add(objCustomer);
            return true;
        }
        catch (Exception ex)
        {
            Console.WriteLine('Add_Customer error: ' + ex.Message);
            return false;
        }
    }

    /// 
    /// Add_Customer adds a new customer by properties.
    /// 
    public bool Add_Customer(int nCustomerId, string strName, string strEmail)
    {
        try
        {
            var objCustomer = new Customer
            {
                nCustomerId = nCustomerId,
                strName = strName,
                strEmail = strEmail
            };
            return Add_Customer(objCustomer);
        }
        catch (Exception ex)
        {
            Console.WriteLine('Add_Customer(props) error: ' + ex.Message);
            return false;
        }
    }

    /// 
    /// Get_Customer retrieves a customer by id.
    /// Params: nCustomerId
    /// Returns: Customer or null
    /// 
    public Customer Get_Customer(int nCustomerId)
    {
        try
        {
            return _lstCustomers.FirstOrDefault(c => c.nCustomerId == nCustomerId);
        }
        catch (Exception ex)
        {
            Console.WriteLine('Get_Customer error: ' + ex.Message);
            return null;
        }
    }

    /// 
    /// Update_Customer updates a customer by object.
    /// Params: objCustomer
    /// Returns: bool (success)
    /// 
    public bool Update_Customer(Customer objCustomer)
    {
        try
        {
            int nIndex = _lstCustomers.FindIndex(c => c.nCustomerId == objCustomer.nCustomerId);
            if (nIndex == NOT_FOUND)
                return false;
            _lstCustomers[nIndex] = objCustomer;
            return true;
        }
        catch (Exception ex)
        {
            Console.WriteLine('Update_Customer error: ' + ex.Message);
            return false;
        }
    }

    /// 
    /// Update_Customer updates a customer by properties.
    /// 
    public bool Update_Customer(int nCustomerId, string strName, string strEmail)
    {
        try
        {
            var objCustomer = Get_Customer(nCustomerId);
            if (objCustomer == null)
                return false;
            objCustomer.strName = strName;
            objCustomer.strEmail = strEmail;
            return true;
        }
        catch (Exception ex)
        {
            Console.WriteLine('Update_Customer(props) error: ' + ex.Message);
            return false;
        }
    }

    /// 
    /// Delete_Customer removes a customer by id.
    /// Params: nCustomerId
    /// Returns: bool (success)
    /// 
    public bool Delete_Customer(int nCustomerId)
    {
        try
        {
            var objCustomer = Get_Customer(nCustomerId);
            if (objCustomer == null)
                return false;
            _lstCustomers.Remove(objCustomer);
            return true;
        }
        catch (Exception ex)
        {
            Console.WriteLine('Delete_Customer error: ' + ex.Message);
            return false;
        }
    }

    /// 
    /// Get_All_Customers returns all customers.
    /// Returns: List
    /// 
    public List Get_All_Customers()
    {
        try
        {
            return new List(_lstCustomers);
        }
        catch (Exception ex)
        {
            Console.WriteLine('Get_All_Customers error: ' + ex.Message);
            return new List();
        }
    }
}

Custom Instructions can increase your productivity when using GitHub Copilot. Try this on your next project.


Grid Dynamics and AKS

Comments [0]

The Azure Kubernetes Service team asked me to host some interviews with their partners, talking about how they are using AKS to help their customers.

Check out my first interview - with the Grid Dynamics team!
https://youtu.be/jmHy3w5w4dY?si=iBcnvJlM5b87ZFTw


Episode 856

Jeremy Miller on Lessons Learned from Building a Public Open-Source Tool

Jeremy Miller has been building open-source software for many years. He has had much greater success with his most recent tools - Marten and Wolverine - than with his earlier attempts. He shares what he learned from his first projects that he applied to later projects. Lessons include listening to users, providing good documentation, and returning useful error messages.


Hell's Kitchen 2025I confess that I was not a fan of Alicia Keys before attending Thursday's production of "Hell's Kitchen" at Broadway's Shubert Theatre. I never disliked her music, but I was born too early to be her target audience, and I never caught up.

"Hell's Kitchen" tells the story of a young girl growing up in the lower Manhattan neighborhood from which the show derives its title. The girl's name is "Ali," but her story may or may not accurately reflect Alicia's teen years. Ms. Keys's music threads its way throughout this jukebox musical. The daughter of a musician, Ali's single mother raised her while working two jobs. Left on her own for much of the time, Ali skips school and begins an affair with a young man in the neighborhood. She is saved from delinquency when Miss Liza Jane, an elderly neighbor in her apartment building, discovers her and begins teaching her piano. Ali's aptitude (presumably inherited from her father) inspires and focuses her. She begins to grow up and take responsibility.

Newcomer Amanda Reid is brilliant as Ali, but Kecia Lewis as Miss Liza Jane steals the show each time she appears on stage. Shoshana Bean is also excellent as Ali's stressed and overprotective single mother.

But, after seeing this show, I have been listening to Keys's music a lot. And I like it!


Stephen Sondheim's Old Friends 2025There is an old show business saying: "There are no small parts!" In many shows, this is not correct. When a show consists of dozens of actors, most of them are relegated to the part of "ensemble." But things were different with "Stephen Sondheim's Old Friends," which I saw Wednesday evening at Broadway's Samuel J. Friedman Theatre. In a cast of about twenty, everyone took center stage for multiple musical numbers.

The show consisted of music from at least ten shows written by Sondheim. The cast treated the audience to shortened versions of "Into the Woods," "Sweeney Todd, the Demon Barber of Fleet Street," "Company," and other musicals for which the late American composer contributed music and lyrics. The entire company recreated Georges Seurat's famous painting while singing "Sunday in the Park with George," the song and show it inspired. In addition, we heard selections from "West Side Story" and "The Mad Show" - two plays for which Sondheim was the lyricist.

Highlights of the evening included a moving version of "Send in the Clowns," the tongue-in-cheek relationship song "Little Things You Do Together," and the bawdy "Everybody Ought to Have a Maid."

Most of this run featured Bernadette Peters and Lea Salonga, but Maureen Moore replaced Peters at this evening's performance. No reason was given for Ms. Peters's absence, but Salonga hinted at it when she attempted to play the trumpet during "You Gotta Get A Gimmick." Before lifting the instrument to her lips, she painfully sighed: "Get better soon, Bernadette!" Moore joined in the tribute/fun when she pleaded with her piano accompanist to play it "like Bernadette Peters! I looooove her!!!"

I benefited from Peters' absence. Her announced vacancy from the Wednesday evening production reduced ticket demand enough that I could afford main floor seats at a reduced rate. Even better, an usher asked if we wanted to move up the fifth row, where we had a clear view of every musical and dance number.

This show was a treat for fans of Stephen Sondheim (like me) and for those just discovering his music.



Episode 855

Scott Hanselman on New Technology and Old Friends

Microsoft Vice President Scott Hanselman and I talk about podcasting, communication, ethical uses of AI, and understanding tech more deeply.


Lanny Budd was a rich American living in Europe when the Nazis rose to power in 1930s Germany. He struggled to remain neutral, to navigate society, and to maintain his respect for human decency. But he could no longer look away when his Jewish friends began to disappear.

Upton Sinclair's 1942 novel "Dragon's Teeth" tells Lanny's story.

This is the third in a series of eleven novels about Lanny. Lanny's half-sister has married famous Jewish violinist Johannes Robin. When the Nazis sieze Robin and is family, Lanny works with his friends in the German government to secure their release, which costs the entire Robin fortune. Although most of the family escapes, Johannes's son Freddi remains hidden in a concentration camp at Dachau. Lanny spends the rest of the novel trying to find and rescue Freddi. Lanny has high connections in the Nazi government and even meets with Hitler, Goerring, and Goebels, but their hatred of Jews causes them to stonewall him.

Most disturbing about this story is the tactics used by the Nazis to solidify their power - demonizing outsiders, blaming others for the nation's problems, suppressing dissent, and drowning out unfavorable news with false propaganda. We see many of these strategies being used by government officials today.

The story examines the choices people make when facing evil within power. Lanny's wife Irma rationalizes Hitler's policies, in hopes of preserving her entitled way of life. Her husband recognizes the danger of the Third Reich and does his best to oppose it. But he finds that he must work within the corrupt system in order to free his friend. Lanny grew up in a privileged household. Even after the 1929 stock market crash, he remained rich enough to travel the world and enjoy frequent cruises. Yet he cares about others, working against the oppressive forces rising in power during the 1930s. Even Lanny's choices are full of moral ambiguity. The Budd family made its fortune by manufacturing munitions and was willing to sell them to anyone for a profit. And Lanny often works within the Nazi system he despises - gaining the trust of high-ranking Nazi officials.

"Dragon's Teeth" takes time to get going. But the action moves quickly when Lanny sets out to find and free his friend. It is a well-told story with lessons we should not forget.


Garrison Keillor 2025A decade ago, I saw Garrison Keillor record a live episode of his long-running radio show "A Prairie Home Companion." I had lawn seats at Ravinia, which did not afford a view of the stage. But Garrison delighted the crowd by marching across the lawn just prior to the show, singing to the audience in the cheap seats, before heading for the stage and beginning his show.

When I heard he was coming to Chicago's City Winery, I logged on as soon as the presale began, securing seats right next to the stage. I thought this location gave me the perfect vantage point. But Garrison fooled me. As at Ravinia, he began by walking to the middle of the theater, singing an original song about growing old. But he remained among the audience during the entire evening, never setting foot on the stage, never taking a seat on the stool in front of the microphone a few feet from where I sat. Instead, he walked through the audience with a wireless microphone, telling stories, reciting poetry, and leading the sold-out crowd in song.

"I'm 82 years old, and I'm going to do what in want," Keillor announced in the first five minutes of Thursday evening's show. "I used to host a radio show, but I cannot remember what it's called," he joked. That show - "A Prairie Home Companion" - ran for over forty years, from 1974 to 2016.

This evening's performance was not dissimilar to his "Prairie" shows. He told a long story about his childhood in the fictional town of Lake Wobegon, Minnesota. He interjected this story with a tale of returning to the small town for the funeral of a friend who had a rival for the affection of a pretty girl when they were all in high school together. The narration sometimes seemed disjointed and rambling, but all storylines converged by the time Mr. Keillor finished. The only thing missing was his famous closing line: "That's the news from Lake Wobegon, where all the women are strong, all the men are good-looking, and all the children are above average."

Keillor drew recitations from classic poets like Robert Frost, Robert Herrick, and William Shakespeare. But he also recited some of his original poetry, which skewed toward the quirky side. "I don't need to write like Robert Frost," he explained, "because Robert Frost already did  that." Keillor's poems included an ode to urination, a tribute to human sperm, and a rant about his daughter's clothing that revealed her butt crack.

He also sang in the rich baritone that he still retains, which helped make him ideal for radio. He encouraged the audience to sing along to Handel's "Alleluia," "My Country 'Tis of Thee," "Summertime, "Michael Row the Boat Ashore," and other traditional tunes. Near the end, he moved into more recent music, singing songs by The Beatles, Prince, and Van Morrison .

Although my choice of seats was not as good as I hoped, the performance was delightful. Garrison Keillor projects charm and kindness that puts his audience at ease.


GCast 195:

Creating a GitHub Repository

Learn how to create a new GitHub repository from the GitHub portal


Episode 854

Laurent Bugnion on Coordinating Hands on Labs

Laurent Bugnion recently returned from the Microsoft Build conference, where he coordinated the 48 hands-on labs available at the conference over three and a half days.

He talks about how they prepared for and executed this event, and which labs resonated the most with attendees.


Judy Collins 2025No one would blame Judy Collins for retiring from performing and relaxing, living off the proceeds of dozens of albums released over the last seven decades. But she continues to tour, sharing her music with her fans.

This is good news to those of us who attended her concert Friday evening at Evanston's Cahn Auditorium.

The lush tones of her 12-string guitar complemented her still-strong voice, but Russel Walden added so much to the music, sitting behind her and providing a brilliant accompaniment on the grand piano. The music needed nothing more than vocals, guitar, and piano to fill the hall.

The 86-year-old singer showed remarkable energy standing at the front of the stage for most of the concert, entertaining us with songs, stories, and jokes. The music took center stage. For two hours, she sang the songs of John Denver ("Jet Plane," "Country Roads"), Bob Dylan ("Mr. Tambourine Man"), Jacques Brel ("Marieke"), and Joni Mitchell ("River," "Both Sides Now"). At one point, Walden surrendered his piano to Judy, who recited two of her original poems while playing softly on the keys.

Between songs, she charmed the audience with stories from her life (her father was a musician with his own radio show, and her husband of 48 years had recently passed away) and threw out corny jokes. (Each cigarette you smoke takes an hour from your life and gives it to Keith Richards). She introduced herself as the American Idol of 1956 and joked that "86 is the new 27!"

The concert finished strong with a moving rendition of Stephen Sondheim's "Send in the Clowns," followed by an encore of "Amazing Grace," to which the audience sang along.

The show was not perfect because Collins's memory is not perfect. The artist frequently glanced at a lyric sheet in front of her, and sometimes Walden had to provide the name of a person or place that she had forgotten. But it was far better than I expected, and Judy Collins proved that she is still a national treasure.


Chaka Khan 2025This may be the most efficient concert I've ever attended. In the past, it is not uncommon to take almost an hour between an opening act and the headliner. The folks running the 3 Queens concert at Chicago's United Center Friday evening switched quickly between acts by Gladys Knight, Stephanie Mills, Patti LaBelle, and Chaka Khan.

The concert began promptly at the announced 8:00 start time, with Gladys Knight performing for thirty minutes before departing the stage. Minutes later, Stephanie Mills stepped out and started her performance backed by the same band. A few minutes followed Stephanie's 30-minute performance, but only to rotate a new band and instruments from behind the curtain before Patti LaBelle launched into her performance. Patti's show lasted a bit longer and included a costume change. It concluded with an instrumental jam by her backing band until headliner Chaka Khan stepped forward to complete the evening.

Gladys Knight 2025Each of the four ladies boasts a decades-spanning career that included major hits on the R&B and the pop charts. Gladys Knight and Patti LaBelle each celebrated their eighty-first birthday this week (yes, they were born four days apart) and Chicagoan Chaka Khan is now 72 years young. At a spry 67 years, Stephanie Mills is the youngest of the quartet. Chaka and Stephanie showed a great deal of energy this evening. Gladys was slow but elegant, while Patti seemed the most diminished by her age.

Regardless of their point in life, each woman has had a remarkable career and projected a love of entertaining before a full United Center.

They closed each set with an iconic song ("Midnight Train to Georgia" for Knight, "Never Knew Love Like This Before" for Mills, "Lady Marmalade" by LaBelle, and "Ain't Nobody" by Khan.

I appreciated the amount of music the organizers packed into the evening. And I appreciated a chance to see four legendary performers who have dedicated their lives to entertaining us.

      Stephanie Mills 2025   Patti LaBelle 2025


I survived. I still have a job after my employer, Microsoft, laid off 2% of its workforce last month.

On the one hand, I breathed a sigh of relief that I was not among the 6,000 employees let go. On the other hand, I am experiencing survivor's guilt. I know some of the people who lost their jobs, and I can attest that they are intelligent, conscientious, and qualified.

I want to help those who are affected, but I struggle to find ways to do so.

What Can I Do?

Here are some things you can do to help those who recently lost their job.

Write a recommendation

This applies only to people with whom you have worked. Write about what they did, how it helped, and the skills they demonstrated. Be as specific as possible. Before you write, ask them if there are things they would like to highlight in this recommendation. LinkedIn provides a convenient platform for posting recommendations. DO NOT click LinkedIn's endorsement button. That feature is entirely useless and ignored by employers. If you or they do not use LinkedIn, consider typing, printing, and signing a letter, as our ancestors used to do when writing these letters.

Share job openings

When you learn of a job opening at your company or another company, ask yourself if it could be a good match for your unemployed friend. If so, forward it to them.

To facilitate this process, I created a spreadsheet of friends and acquaintances who were actively seeking employment. My spreadsheet had the following columns:

  • Name
  • Skills
  • Misc Notes
  • Found Job? (Y/N)

Whenever I learned about a job opening, I checked my list to see who was still looking and possessed the required skills for that job.

I frequently see social media posts in which a friend announces they are seeking employment (#OpenToWork is a popular hashtag to communicate this status.) Clicking the "Share" button takes almost no time and can help spread the word. Sometimes, I take a minute to add a public note telling my network how awesome the person is.

Offer to Review Resumes

A resume provides a jobseeker's first impression to a potential employer, and many resumes can be improved. If you know something about crafting a resume, offer to review theirs. Sometimes, a fresh set of eyes can spot potential problems. Here are a few common issues to watch for:

  • too long
  • contains irrelevant information
  • emphasis on the skills
  • errors in spelling and grammar

Listen to them

Losing a job and looking for a new one almost always adds stress to one's life. Sometimes, it helps to talk about it. Even if they do not feel like talking, it is good to know others are thinking of them. Send a text or email letting them know you care and are willing to listen if they want to talk.

Conclusion

I know the stress of going through a job search, and I appreciate those who helped me. This article is my way of paying that help forward.


Episode 853

Tommy Falgout on Bad AI in a Box

Partner Solution Architect Tommy Falgout has created a device that can deliver on demand:

- bad advice
- insults
- fake facts
-  cocktails
- conspiracies

He shows this combination of hardware, software, and cloud services, and describes how he built it.

Links:
https://aka.ms/baiiab


May 2025 Gratitudes

Comments [0]

6/1
Today I am grateful to attend a Chicago Hounds game yesterday - my first time at a rugby match!

5/31
Today I am grateful to see Chaka Khan, Gladys Knight, Stephanie Mills, and Patti LaBelle last night on their 4 Queens tour.

5/30
Today I am grateful for kind words from my manager during my annual review yesterday.

5/29
Today I am grateful:
- to attend the GenAI Collective meetup last night
- for lunch with my team and to meet our new intern yesterday

5/28
Today I am grateful to fix the issue with my hearing aid.

5/27
Today I am grateful for a 3-day weekend.

5/26
Today I am grateful to see "R.U.R. (Rossum's Universal Robots)" at City Lit Theater yesterday.

5/25
Today I am grateful to see Paul Simon in concert last night.

5/24
Today I am grateful to see Vince Gill in concert last night.

5/23
Today I am grateful for coffee with Tobias yesterday.

5/22
Today I am grateful to attend the Chicago AWS User Group 10th birthday party, yesterday.

5/21
Today I am grateful to Devanshi for answering my AI questions yesterday.

5/19
Today I am grateful for a tour of Frank Lloyd Wright's Robie house yesterday

5/18
Today I am grateful for breakfast this morning with Gary, Debora, Dave, and Sue.

5/17
Today I am grateful to the organizers of #DynamicsCon and to Bobby for a ticket to the conference

5/16
Today I am grateful to meet humorist Dave Barry last night.

5/15
Today I am grateful to Alex for a tour of the Uber Chicago headquarters yesterday

5/14
Today I am grateful to talk with Jayson yesterday for the first time in years.

5/13
Today I am grateful to see Lalah Hathaway in concert from the front row last night.

5/12
Today I am grateful to celebrate Mother's Day with some wonderful ladies yesterday!

5/11
Today I am grateful for a BBQ dinner yesterday with new friends.

5/10
Today I am grateful to see Alan Parsons in concert last night.

5/9
Today I am grateful to Eric for organizing Global Azure and to George for hosting the event this year.

5/8
Today I am grateful to attend the "1 Million Cups" entrepreneur meetup and networking event for the first time yesterday.

5/7
Today I am grateful to see an exciting Chicago Sky - Minnesota Lynx game last night!

5/6
Today I am grateful to complete all my required training for the fiscal year.

5/5
Today I am grateful that my knee pain has lessened enough that I could play pickleball yesterday.


The Cast Of R.U.R. at City Lit Theater 2025You don't have to be interested in artificial intelligence to enjoy "R.U.R. (Rossum's Universal Robots)."

I caught the Sunday afternoon performance at the City Lit Theater, which is located in an intimate space on the second floor of the Edgewater Presbyterian Church.

Bo List adapted this version from Czech writer Karel Čapek's 1920 play "R.U.R." List eschewed a direct translation in favor of a modern interpretation. The tone and clothing of Director Brian Pastor's production suggest a steampunk version of the world seen from a century ago, but the story has a timeless air. The original script has the historic distinction of coining the term "robot" to describe artificially created humans.

The story begins with a giddy Harry Rossum announcing the creation of his most lifelike version of robots that look and act like humans. These robots are improved because they can learn and act outside their original programming. He insists this will forever free people from work, but he ignores warnings about the dangers of enslaving sentient beings. Rossum's factory is located on an island across from the capital city of a fictional country. The President's daughter, Helena Glory, arrives on the island to announce her opposition to his robots and her plans to speak out against them at an upcoming conference. She changes her mind when Rossum proposes marriage and offers a job for her safeguarding the ethics of robot creation. When robots discover her planned speech, things take a terrible turn, inspiring them to revolt against their overlords.

Brian Breau, who was excellent as Stan Lee in last year's "House of Ideas," provides an over-the-top performance as Harry Rossum, and Madelyn Loehr is fun as the naive Glory. As Harry's stepmother, Dr. Gall, Mary Ross adds enough mad scientist flavor to her character that Harry remarks that she thinks she is a fascist - a line that drew laughs from the audience. But Alex George stole the show as the robot Sulla, who leads the inevitable uprising. Her shift from stoicism to anger to tragedy is subtle and delivered with understated perfection.

City Lit brought to life a classic tale. It is easy to forget that the dangers of A.I. were once a fresh idea. "R.U.R." is a morality play, a comedy, and a tragedy. It warns of the potential risks of artificial intelligence, told decades before "The Terminator" and a century before the current hype around A.I.

This play was entertaining, funny, tragic, and fun!


Episode 852

Dee Peterson on An M365 Copilot Success Story

Dee Peterson helped a bank to implement M365 Copilot. She describes how this AI tool increased their efficiency and saved them millions.


Paul Simon And His Band 2025Paul Simon chose the Symphony Center to host his three-night stand in Chicago last week. The Center is the home of the Chicago Symphony Orchestra, which is currently performing in Wrocław, Poland.

Fittingly, Simon filled the stage with talented instrumentalists, including a large variety of percussionists and their mavens. The singer/songwriter has been releasing albums for years as a solo artist and as half of the legendary duo Simon and Garfunkel. After six decades of writing, he has a massive catalog of songs from which to choose. But he decided to open with a new work.

While isolated during the COVID-19 epidemic, Paul wrote and recorded "Seven Psalms" - a suite inspired by the Psalms book of the Old Testament. The band performed this suite for the first thirty-five minutes without pausing between each number. They presented each song like the movements of a symphony. The audience politely enjoyed the freshness of these acoustic numbers.

But the real treat came after a brief intermission. In the second set, Mr. Simon drew from his vast catalog, performing numerous favorites from his solo work ("Graceland," "Slip Slidin' Away," "Me and Julio Down by the Schoolyard") and from his S&G days ("Homeward Bound"). Hearing familiar tunes felt like revisiting an old friend. In between, he brought out some deep album tracks ("The Late Great Johnny Ace," "St. Judy's Comet," "Rene and Georgette Magritte With Their Dog After the War").

As a bonus treat, Paul's wife, Edie Brickell, came on stage to accompany him on a few songs.

Paul Simon 2025The band reached into the vault for his encore set. He and the band opened the set with "50 Ways to Leave Your Lover," followed by "The Boxer," which inspired the audience to sing the "Lie-la-lie" chorus enthusiastically. At the end of this song, everyone left the stage except for Simon, who accompanied himself on guitar for a haunting version of "Sounds of Silence."

I caught the last of his Chicago shows Saturday evening. This tour began last month - his first in seven years and the first since the 83-year-old singer's recent diagnosis with partial hearing loss. He dubbed this tour: "A Quiet Celebration," as it focused on acoustic arrangements with complex yet subtle percussion, violins, woodwinds, and acoustic guitars. The stage design assisted his hearing - the band surrounded Mr. Simon, and the music remained soft and understated.

No one left disappointed.


Vince Gill 2025Not only is Vince Gill one of the more talented country music songwriters working today, but he projects warmth and charm when he performs, as he did Friday evening at the Chicago Theatre.

This tour is a return to performing his own music after filling in for the late Glenn Frey with the Eagles for the last few years.

Gill brought plenty of backup for this show. Two lead guitarists, two rhythm guitarists, two keyboardists, and Vince (who played lead and rhythm guitar) provided plenty of redundancy. The band was solid, but the steel guitarist seated to Gill's left frequently stole the show with his impressive solos.

Between songs, the singer told stories of his life, his music, and his inspirations for songs. A joke by a friend in a Nashville cafe inspired "Down to My Last Bad Habit," while an offhand remark by Mavis Staples inspired "These Times." A songwriter convinced him to change the lyrics of "Look At Us" to a happy ending - advice that paid off in the song's popularity.

Although many of his songs feature sad lyrics, he played one song about infidelity. "If it weren't for all these cheating songs, we wouldn't need all these Gospel songs," he quipped as an introduction to "Pocket Full of Gold."

His first set mainly consisted of country music, with the notable exception of the pop-sounding "Feels Like Love." He drew on his extensive song catalog but also mixed in covers of Merle Haggard's "The Bottle Let Me Down" and Buck Owens's "Together Again." Near the end of the set, he invited guitarist Jedd Huges to the front to sing his original composition "Loving You is the Only Way to Fly." Next, longtime backup singer Wendy Moten belted out Bobbie Gentry's "Ode to Billie Joe" before Gill returned to the microphone to close the set with "When Amy Prays," a tribute to singer Amy Grant, his wife of twenty-five years.

After a brief intermission, the band returned and played a selection of new songs from Gill's pen, many of which have not been released yet. He asserted that he was going through the most creative period of his career, and these songs provided strong evidence that he remains an impressive songwriter. Halfway through set two, Chicago blues harmonica player Billy Branch joined the band onstage for one song.

Vince Gill joked that his doctor ordered him not to sing two fast songs in a row. Mostly, he complied, as much of his music tells sad stories. (He insisted that the saddest song of all time is "Old Shep," which his father sang to him about a boy forced to shoot his dying dog.) But Vince broke the consecutive fast song rule at the end of set two when he followed the rowdy "What Cowgirls Do" with the upbeat "Oklahoma Borderline."

The show closed with a rousing 10-minute jam session of "Liza Jane" before exiting a final time.

Vince Gill poured his heart into this evening's performance for nearly three and a half hours. The audience left, feeling they knew him better because of it.


Azure AI services provide a set of REST APIs that developers can call to quickly add artificial intelligence to their applications. Services include language, speech, vision, document intelligence, Decision, and Metric Advisor.

You can create many of these services individually, but it makes sense to create an Azure AI Vision Service if you want to use a service from more than one category.

Navigate to the Azure Portal and log in.

Click the [Create a resource] button (Fig. 1) and search for "ai services," as shown in Fig. 2.

Create Resource button

Fig. 1

Search For AI Services

Fig. 2

From the list of results, select the "Azure AI services" panel (Fig. 3), expand the menu, and select the [Create | Azure AI services] option, as shown in Fig. 4.

Azure AI Services Pane

Fig. 3

Create Button

Fig. 4

The "Create Azure AI services" dialog displays with the "Basics" tab selected, as shown in Fig. 5.

Create Azure AI Services Dialog, Basics Tab

Fig. 5

At the "Subscription" dropdown, select the subscription in which you want to create this OpenAI service. Many of you will have only one subscription, so you will not need to choose anything here.

At the "Resource group" field, select the resource group where you want to create the OpenAI service or click the "Create new" link to create a new resource group to add the OpenAI service. A resource group is a logical grouping of Azure resources you would like to manage together.

At the "Region" dropdown, select an Azure region in which to create the OpenAI service. Consider the location of the people and services that will be using this service to minimize latency.

At the "Name" field, enter a unique name for this OpenAI service.

As of this writing, the "Pricing tier" dropdown lists only "Standard S0." Select this option.

Check the checkbox indicating that you will adhere to the Responsible AI terms listed at the bottom.

Fig. 6 shows the "Network" tab. It is unnecessary to change anything on this tab, but it allows you to restrict access to the service to specific networks and configure private endpoints for the account.

Create Azure AI Services Dialog, Network Tab

Fig. 6

Fig. 7 shows the "Identity" tab. It is unnecessary to change anything on this tab, but it allows you to assign user managed identity for these services.

Create Azure AI Services Dialog, Identity Tab

Fig. 7

Fig. 8 shows the "Tags" tab. It is not necessary to change anything on this tab, but you can apply name-value pairs to this resource that you may use to filter or sort your reports.

Create Azure AI Services Dialog, Tags Tab

Fig. 8

Fig. 9 shows the "Review + create" tab. If you made any errors, such as leaving a required field empty or selecting an inconsistent combination of options, these errors will be listed here, and you will need to correct them before you can proceed.

Create Azure AI Services Dialog, Review + Create Tab

Fig. 9

After correcting any errors, click the [Create] button (Fig. 10) to start creating the Azure OpenAI service.

Create Button

Fig. 10

After a short time, a confirmation message similar to the one in Fig. 11 will display, indicating that the Azure OpenAI service has been created.

Deployment Confirmation

Fig. 11

Click the [Go to resource] button (Fig. 12).

GoToResource Button

Fig. 12

Currently, this button navigates to the resource group. Click the Azure OpenAI service to show the "Overview" blade of the newly created Azure OpenAI service, as shown in Fig. 13.

Azure AI Services Overview Blade

Fig. 13

In this article, I showed you how to create an Azure AI service, giving you access to Artificial Intelligence functionality through simple REST API calls.


Azure OpenAI provides access to OpenAI's language models, enabling developers to integrate advanced AI capabilities into their applications. To use Azure OpenAI, you must first create an Azure OpenAI service. This article describes how to create that service using the Azure Portal.

Navigate to the Azure Portal and log in.

Click the [Create a resource] button (Fig. 1) and search for "azure openai," as shown in Fig. 2.

Create Resource Button
Fig. 1

Search For OpenAI
Fig. 2

From the list of results, select the "Azure OpenAI" panel (Fig. 3), expand the menu, and select the [Create] option, as shown in Fig. 4.

Azure OpenAI Panel
Fig. 3

Create Azure OpenAI Button
Fig. 4

The "Create Azure OpenAI" dialog displays with the "Basics" tab selected, as shown in Fig. 5.

Create Azure OpenAi Dialog - Basics Tab
Fig. 5

At the "Subscription" dropdown, select the subscription in which you want to create this OpenAI service. Many of you will have only one subscription, so you will not need to choose anything here.

At the "Resource group" field, select the resource group where you want to create the OpenAI service or click the "Create new" link to create a new resource group to add the OpenAI service. A resource group is a logical grouping of Azure resources you would like to manage together.

At the "Region" dropdown, select an Azure region in which to create the OpenAI service. Consider the location of the people and services that will be using this service to minimize latency.

At the "Name" field, enter a unique name for this OpenAI service.

As of this writing, the "Pricing tier" dropdown lists only "Standard S0." Select this option.

Fig. 6 shows the "Network" tab. It is unnecessary to change anything on this tab, but it allows you to restrict access to the account to specific networks and configure private endpoints for the account.

Create Azure OpenAi Dialog - Network Tab
Fig. 6

Fig. 7 shows the "Tags" tab. It is not necessary to change anything on this tab, but you can apply name-value pairs to this resource that you may use to filter or sort your reports.

Create Azure OpenAi Dialog - Tags Tab
Fig. 7

Fig. 8 shows the "Review + create" tab. If you made any errors, such as leaving a required field empty or selecting an inconsistent combination of options, these errors will be listed here and you will need to correct them before you can proceed.

Create Azure OpenAi Dialog - Review + Create Tab
Fig. 8

After correcting any errors, click the [Create] button (Fig. 9) to start creating the Azure OpenAI service.

Create Button
Fig. 9

After a short time, a confirmation message similar to the one in Fig. 10 will display, indicating that the Azure OpenAI service has been created.

Deployment Complete
Fig. 10

Click the [Go to resource] button (Fig. 11).

Go To Resource Button
Fig. 11

Currently, this button navigates to the resource group. Click the Azure OpenAI service to show the "Overview" blade of the newly created Azure OpenAI service, as shown in Fig. 12.

Azure OpenAi Overview Blade
Fig. 12

You can work with this Azure OpenAI Service using the Azure AI Foundry portal. Click the [Explore Azure AI Foundry portal] button (Fig. 13).

Explore Azure AI Foundry Portal Button
Fig. 13

A message similar to Fig. 14 displays in a new tab, indicating that you are leaving the Azure portal.

Leaving Portal Message
Fig. 14

Click the [Continue] button to open the Azure AI Foundry page, as shown in Fig. 15.

AzureAI Foundry
Fig. 15

In this article, I showed you how to create a new Azure OpenAI Service in the Azure Portal. In future articles, I will show some of the capabilities of this service.


Episode 851

Peter Van Vliet on Separating the Development Model From the Deployment Model

Masking Tech developed the Jitar (short for "Just In Time Architecture") open source project to allow you to decide at deployment time whether to deploy a modular application as a monolith or as microservices. Peter Van Vliet discusses how this works and how to architect an application to take advantage of deferring this decision.


Willa Cather's 1922 novel "One of Ours" is two stories relating the two phases in the life of young Claude Wheeler.

The book begins on the Wheeler family farm in Nebraska, where Claude struggles to find his purpose in life. He marries a woman who mistreats him before abandoning him.

He decides his destiny lies in the United States Army, fighting in the First World War, so the story takes him to Europe.

Cather details Claude's relationships at home and overseas - how they differ and how they affect his life differently. In young Claude, she shows us the part of ourselves that longs for meaning. Working on the family farm and a loveless marriage meant little to Claude. But fighting for his country gave him a reason to go on.

"One of Ours" is a different novel for Cather, who gained fame writing about the American West and Great Plains. The second half of this novel takes us far from the shores of America. But the death of her cousin on a World War I battlefield inspired her to tell this story.

This novel is a solid coming-of-age story told in a very personal way.


LalahHathaway2025-aA singer as talented as Lalah Hathaway deserved a better sound system than the City Winery supplied Monday evening.

I attended the first of six Hathaway performances at the West Loop venue. I was excited to see her return to her hometown and to hear her live for the first time in over thirty years.

LalahHathaway2025-bOur front row seats provided an excellent vantage point to experience her charm and engaging smile. Her band, which went by the name "Legally Blynd," highlighted by singer/guitarist Jubu Smith, was top-notch. They played two songs before Lalah took the stage, and Jubu joined her in a duet during her set.

I had the pleasure of seeing Ms. Hathaway perform decades ago in suburban Detroit when she toured with legendary keyboardist Joe Sample. She was early in her career, and her voice was fresh and youthful. That voice has matured since then, adding a range of tone and emotion.

It is no surprise that Lalah knows how to handle an audience. She is the daughter of legendary soul singer Donnie Hathaway, who passed along talent and influence to his daughter.

Ms. Hathaway's voice is as amazing as you would expect from the daughter of soul legend Donnie Hathaway. She dazzled the nearly sold-out venue with her selection of soulful melodies. Songs like "Baby Don't Cry" and "Angel" inspired he crowd to sing along. But the bass and drums overpowered her vocals throughout the night. And no one was here to listen to the bass and drums. We came for Lalah's voice. It was great, but we wanted more.


Azure AI Search provides a fast, scalable, reliable vector search service that you can extend with RAG and other AI services.

In this article, I will show how to create an Azure AI Search service.

Navigate to the Azure Portal and log in.

Click the [Create a resource] button (Fig. 1) and search for "ai search" or "azure ai search," as shown in Fig. 2.

Create Resource button
Fig. 1

Search For AI Search
Fig. 2

From the list of results, select the [Create] button in the "Azure AI Search" panel (Fig. 3) to expand the menu, and select the [Create] option, as shown in Fig. 4.

Azure AI Search Panel
Fig. 3

Create Button
Fig. 4

The "Create a search service" dialog displays with the "Basics" tab selected, as shown in Fig. 5.

Create AI Search Blade -Basics Tab
Fig. 5

At the "Subscription" dropdown, select the subscription in which you want to create this AI Search service. Many of you will have only one subscription, so you will not need to choose anything here.

At the "Resource group" field, select the resource group in which you want to create the Search service, or click the "Create new" link to create a new resource group in which to add the Search service. A resource group is a logical grouping of Azure resources you want to manage together.

At the "Service name" field, enter a unique name for this Search service.

At the "Location" dropdown, select an Azure region in which to create the Search service. Consider the location of the people and services using this service to minimize latency.

The "Pricing tier" field defaults to "Standard." If you want to change this, click the "Change pricing tier" link and select an appropriate tier from the list of options, as shown in Fig. 6.

SelectPricingTier
Fig. 6

These pricing tiers are listed in ascending order of price and capacity. You should select one that meets your needs, but resist paying for more than you need.

Fig. 7 shows the "Scale" tab. It is unnecessary to change anything on this tab, but it allows you to add more Replicas and partitions. Increasing Replicas increases the availability of the service, while increasing Partitions increases the capacity of the service. You should set the Replicas to at least 3 for production environments to achieve high availability for read and write operations.

Create AI Search Dialog - Scale Tab
Fig. 7

Fig. 8 shows the "Networking" tab. It is unnecessary to change anything on this tab, but it allows you to restrict access to the account to specific networks and configure private endpoints for the account.

Create AI Search Dialog - Networking Tab
Fig. 8

Fig. 9 shows the "Tags" tab. It is not necessary to change anything on this tab, but you can apply name-value pairs to this resource that you may use to filter or sort your reports.

Create AI Search Dialog - Tags Tab
Fig. 9

Fig. 10 shows the "Review + create" tab. If you made any errors, such as leaving a required field empty or selecting an inconsistent combination of options, these errors will be listed here, and you will need to correct them before you can proceed.

Create AI Search Dialog - Review + Create Tab
Fig. 10

After correcting any errors, click the [Create] button (Fig. 11) to start creating the Azure AI Search service.

Create Button
Fig. 11

After a short time, a confirmation message like the one in Fig. 12 will display, indicating that the Search service has been created.

Deployment Complete message
Fig. 12

Click the [Go to resource] button (Fig. 13) to show the "Overview" blade of the newly created Azure AI Search service, as shown in Fig. 14.

Go To Resource Button
Fig. 13

AI Search Overview Blade
Fig. 14

This article showed you how to create an Azure AI Search service.


GCast 194:

Creating a Chatbot with the Question Answering feature of Azure Language Service

Question Answering is an optional feature of the Azure Language service that allows you to create a chatbot from a document of questions and corresponding answers. Learn how to use this tool without writing any code.


By default, a newly created Azure Storage Account has some restrictions. These restrictions are necessary to enhance security, but can cause frustration when using the portal to work with your data.

Recently, I received the following warning when I accessed a blob container in the portal:

Error Message
Fig. 1

When I tried to upload a file to the container, Azure prevented the operation and reported only "Forbidden," as shown in Fig. 2

Error Message
Fig. 2

After some research and experimentation, I discovered the solution was to add my user account to the "Storage Blob Data Contributor" role. This solution surprised me because I had created the Storage Account, so I was already a member of the "Owner" role. However, adding myself to this other role was sufficient to allow me to upload files to a blob container within the portal.

You can find step-by-step instructions on how to add a user to a role in an Azure Storage Account in this article.

The "Storage Blob Data Contributor" role is a good role to assign to new users who need to read and write data without giving them any extra rights within the account.


The 2025 Global Azure Chicago Speakers (photo by Donna Vade Bon Coeur)Finding space for this year's [Global Azure]() event was a challenge, but Eric Boyd worked his network, and George Roberts was able to reserve a hall inside the McDonald's world headquarters in Chicago's West Loop.

Global Azure has a long history. It began over twelve years ago as the Global Windows Azure Boot Camp. I hosted an event in 2013 in Southfield, MI, years before I joined Microsoft. Community organizers host events the same week in cities around the world.

Saturday's Chicago event started with a presentation by Microsoft MVP and Regional Director Eric Boyd, who gave a history of Azure in the context of how he worked with the platform. Eric was an early adopter and proponent of Azure and has built a business focused mainly on Azure services. Dan Rey spoke next, educating us about Azure data centers and how they have evolved to meet growing demand. George Roberts then told us how McDonald's migrated to Entra from Active Directory and the challenges they had to overcome. After lunch, Dee Peterson spoke about using the Well Architected Framework to create resilient applications in the cloud. To close the day, I gave a presentation on Azure Monitor and Application Insights.

Over thirty people attended the event - an impressive number given that we scheduled it late and the sunshine tempted folks to enjoy outdoor activities. The audience was engaged for the six hours of presentations, asking many relevant questions and hanging out afterwards to connect with the speakers and organizers.

This event was an excellent opportunity to engage the community, educate people about Azure, and promote in-person events. As we closed, Eric and I announced a rebirth of the Chicago Cloud Computing User Group, which will host a meeting at the Downtown Chicago Microsoft office on June 5.


Episode 850

Damian Synadinos on Trust

Damian Synadinos discusses the role that trust plays in our lives an in the workplace, and when it is appropriate to trust without verification. He warns against over-trusting and under-trusting, advising us to use critical thinking when deciding who and what to trust. He applies these principles to Artificial Intelligence, discussing how much we should trust the results produced by AI.

https://www.ineffable-solutions.com/


Alan Parsons Live Project 2025Some leaders lead from the back. Record producers, audio engineers, composers, and music directors like Alan Parsons fall into this category. They allow others to handle instrumental solos and lead vocals.

Parsons took this a step further at the Rivers Casino Event Center in Des Plaines Friday evening. Throughout the performance, he sat at the back of the stage while the spotlight shone on his band of singers and instrumentalists. Parsons sang lead on only two songs - "Don't Answer Me" and "Eye in the Sky." For the rest of the show, he strummed an acoustic guitar while others in the band alternated lead vocals and performed solos on guitar, bass, drums, and keyboards. Guy Erez's creative bass solo on "I Wouldn't Want to Be Like You" was especially impressive.

Alan Parsons gained worldwide fame as the co-leader of The Alan Parsons Project, along with the late Eric Woolfson. Although Eric sang lead on many songs, Alan's name appeared in the band title. The two hired many session musicians and singers to perform on their eleven studio albums. Before teaming with Woolfson, Parsons made a name for himself by producing classic albums like Pink Floyd's "Dark Side of the Moon" and engineering the latter of the Beatles' albums.

Alan Parsons Live Project 2025Parsons has been releasing albums under his own name (sans "Project") since the breakup of The Alan Parsons Project thirty-five years ago. But Friday evening's performance consisted almost entirely of songs from his collaboration with Woolfson in the 1970s and 1980s. This set list delighted a crowd that sported a lot of gray hair. I was happy to hear compositions from the underrated "Tales of Mystery and Imagination," APP's first album that failed to chart on its 1976 release. The classic "Breakdown" from the more commercially successful second album "I Robot" led seamlessly into "The Raven" from the debut album. The encore set began with "(The System of) Dr. Tarr and Professor Fether" - one of my favourite songs!

The 76-year-old Parsons is showing his age. He walks with a cane and requires assistance climbing on and off the stage. However, the progressive rock music he created decades ago holds up well, and he has assembled a collection of top musicians to share that music with the world.

Photos


Marie Benedict's novel "The Only Woman in the Room" tells the story of Hedy Lamar, who was born Hedwig Kiesler into an Austrian Jewish family before the rise of Adolf Hitler and Naziism.

Kiesler was an Austrian actress when her family encouraged her to marry wealthy industrialist Friedrich Mandl as a way to increase their social standing and financial stability. She converted from Judaism to Christianity for the marriage and lived the life of a socialite, but Mandl proved to be an abusive, controlling husband. Her life became worse when her husband aligned himself with Adolf Hitler and began selling arms to the Nazis after Germany's takeover of Austria.

Hedwig escaped Austria before Hitler began to execute his plan to exterminate Jews. She moved to Hollywood, California, changed her name to Hedy Lamar, and starred in a series of successful movies for Lous Mayer's MGM Studio.

But Hedy was much more than a beautiful actress. She learned that American remote-controlled torpedoes were ineffective because Germans could easily jam their signals, so she developed a new wireless communication system that was nearly impossible to jam. The U.S. military rejected her invention, refusing to believe that a woman could create this, but her technology is used in many cell phone systems today.

"Only Woman" is a fictional autobiography. The author puts words into the heroine to tell the stories of her life as she transitions from daughter to wife to refugee to actress to scientist. Although Benedict invents the thoughts in Lamar's head, the events she relates are based on history, and the inner monologue we read is plausible.

Hedy Lamar was a remarkable woman who led a remarkable life, and her story deserves to be told. A novelization of that life is a good way to tell that story.


In the last article, I showed you how to create an Azure Storage Account. One way to secure a storage account is to assign users to roles that allow each user only the access that they require and no more. In this article, I will show you how to assign users to roles in an Azure Storage Account.

Log in to the Azure Portal and navigate to the Azure Storage Account, as shown in Fig. 1.

Overview Blade
Fig. 1

From the left menu, select [Access Control (IAM)] (Fig. 2) to display the "Check Access" tab of the "Access Control (IAM)" blade, as shown in Fig. 3.

Access Control Button
Fig. 2

Access Control Blade
Fig. 3

The "Role Assignments" displays a list of existing role assignments for this Storage Account, as shown in Fig. 4.

Role Assignments Tab
Fig. 4

On the "Check Access" tab, click the [Add role assignment] button (Fig. 5) to display the "Add role assignment" dialog, as shown in Fig. 6.

Add Role Assignment Button
Fig. 5

Add Role Assignment Dialog
Fig. 6

This dialog is separated into two tabs, representing the different types of roles: Job function roles, intended for users of the services and its data; and Privelged administration roles, intended for those who are managing the Storage Account. Search for the role to which you wish to add a user. In the figure, we searched for "Storage Blob Data Contributor," so the dialog filters the list of rows to show us this role. Select the role.

On the "Members" tab (Fig. 7) you can add users to the selected role.

Add Role Assignment DialogMembers Tab
Fig. 7

Click the [Select members] button (Fig. 8) to display the "Select members" dialog, as shown in Fig. 9.

Select Members Button
Fig. 8

Select Members Dialog
Fig. 9

Search for a user, select that user, and click the [Select] button (Fig. 10) to add the selected user or users to the selected role.

Select Button
Fig. 10

The User should now appear in the list of members, as shown in Fig. 11.

Add Role Assignment Dialog
Fig. 11

At this point, the user has not yet been assigned to the selected role. Click the [Review + assign] button (Fig. 12) to activate the "Review + assign" tab. Then select the [Review + assign] button again to assign this user to the selected group.

Review Assign Button
Fig. 12

The user is now assigned to the group and should appear in the list of role assignments and should have rights appropriate to that group.

In this article, I showed you how to secure an Azure Storage Account by assigning users to appropriate roles in that account.


Azure Storage Accounts allow you to store data in the cloud in a secure, scalable, and highly available way. A Storage Account provides storage of four broad categories of data objects: blobs, tables, queues, and files. In this article, I will focus on blobs, showing you how to use the Azure Portal to upload files into an Azure Storage Account Blob Container.

Log in to the Azure Portal and navigate to the Azure Storage Account, as shown in Fig. 1.

Overview Blade
Fig. 1

Select [Storage browser] (Fig. 2) in the left menu to display the "Storage browser" blade, as shown in Fig. 3.

Storage Browser Button
Fig. 2

Storage Browser Blade
Fig. 3

Click the "Blob containers" panel (Fig. 4) to display a view with "Blob containers" selected, as shown in Fig. 5.

Blob Containers Panel
Fig. 4

Blob Containers Blade
Fig. 5

Click the [Add container] button (Fig. 6) to display the "New container" dialog, as shown in Fig. 7.

Add Container Button
Fig. 6

Add Container Dialog
Fig. 7

At the "name" field, enter a name for a container.

The Anonymous Access dropdown is enabled if you have enabled anonymous access for the storage account. In this case, it is disabled, so anonymous access is not an option for this container.

Click the [Create] button (Fig. 8) to create the container.

Create Button
Fig. 8

The dialog closes, and the new container should display in the view, as shown in Fig. 9.

Blob Containers View
Fig. 9

Click the container to open it and click the [Upload] button (Fig. 10) to open the "Upload blob" dialog, as shown in Fig. 11.

Upload Button
Fig. 10

Upload Blob Dialog
Fig. 11

Click the "Browse for files" link and select files on your computer, or drag files from Windows Explorer onto the dialog. If files with the same name are already stored in the container, check the "Overwrite" checkbox to overwrite these files with new ones.

Click the [Upload] button to begin uploading files.

When the files finish uploading, they should appear in the container view, as shown in Fig. 12.

Container With Files
Fig. 12


<< Older Posts