# Tuesday, February 4, 2020

A few months ago, Microsoft Flow was rebranded as Microsoft Power Automate.

Power Automate (PA) is a tool and platform for building workflows. It is specifically targeted at business users and business analysts. These foods are often referred to as "Citizen Developers". They understand the business logic to be encoded but lack the skill or desire to write custom code.  Because PA provides a graphical interface directly within the browser, these Citizen Developers can create many workflows without writing any code.

PA consists of the following key components

  • Connectors
  • Triggers
  • Actions
  • Templates
  • Solutions


A flow is a workflow created with Microsoft Power Automate. It consists of a set of steps, along with some logic to decide when and how often those steps are executed.


Connectors provide a way for your flow to connect to external data sources and applications. They are wrappers to APIs to those external components. PA ships with hundreds of connectors, but you can also build your own, if the one you want is not available. 


A trigger defines an event that kicks off a flow. This can be a document saved somewhere, an email message received, a database change, or any of a number of possible activities.


An action is a step for the flow to perform. You build your flow by chaining together different actions and the logic around their execution. Most actions use connectors to interact with external data or an external application.


A template is a predefined flow on which you can base a new flow. This makes it easy to create a flow to accomplish many common tasks, such as automatically saving an email attachment to a OneDrive folder or send an email when someone saves a file. More complex workflows also have templates. For example, there are several templates that support manager approval processes.


A solution is a set of related flows that you can manage together. Use this to deploy multiple flows at the same time to the same environment.


The built-in connectors and templates make it possible to build flows for a variety of scenarios. Want to automate the process of approving expense reports? Done! Want to be notified when important data is updated? Done! Want to know the weather every morning? Done! You can start with a template or build a flow from scratch.

What if it’s not enough?

Some workflows may require more complex logic or lots of custom code. For these, Microsoft offers Azure Logic Apps – a more powerful workflow engine hosted in Azure.

Getting started

If you are an Office 365 or Dynamics 365 customer, you already have access to Power Automate.

If not, you can sign up for free at https://flow.microsoft.com

You can build flows with the free version; but there are limitations on the number of flows, the available connectors, and the frequency they can be invoked. You can move past these limitations this by signing up for a paid version.

Tuesday, February 4, 2020 9:46:00 AM (GMT Standard Time, UTC+00:00)
# Monday, February 3, 2020

Episode 596

Courtney Eaton and Gabrielle Sempf on KidzMash

KidzMash is a tech conference for children, run in parallel with the CodeMash conference.

Courtney Eaton and Gabrielle Sempf talk about what goes into KidzMash and what makes it successful.


Monday, February 3, 2020 9:44:00 AM (GMT Standard Time, UTC+00:00)
# Sunday, February 2, 2020

Today I am grateful for a visit to the Henry Vilas Zoo in Madison, WI yesterday.

Today I am grateful for 2 years in my condo.

Today I am grateful for Coffee with Andy

Today I am grateful for those who offered to help me learn a new technology, without me even asking.

Today I am grateful to attend a Lunar New Year celebration yesterday.

Today I am grateful to reconnect with some old friends via email this past week.

Today I am grateful to watch the Grammy Awards last night

Today I am grateful to attend the Microsoft holiday party last night.

Today I am grateful for my first visit to Charlotte, NC.

Today I am grateful for dinner last night with Emiel after 15 years.

Today I am grateful for Carolina bbq last night in North Carolina.

Today I am grateful for dinner last night in Charlotte with Richard.

Today I am grateful for Inbox Zero.

Today I am grateful to get Emilija's car running again.

Today I am grateful to watch the harsh weather this week through my window from inside my warm living room.

Today I am grateful that the Michigan State basketball and ice hockey teams are both in first place.

Today I am grateful to attend an Andy Warhol exhibit at the Art Institute of Chicago last night with Julie.

Today I am grateful to watch Nick's team's first conference victory last night in Kalamazoo.

Today I am grateful for a new bike chain.

Today I am grateful for dinner last night with Julie and David.

Today I am grateful that I had a chance to know Scott Allen before he left us.

Today I am grateful for the blanket of white covering the city this morning.

Congratulations to the North Dakota State Bison on another title!

Today I am grateful for the hospitality and generosity of Chris Chris this week.

Today I am grateful for dinner with J. last night.

Today I am grateful for dinner last night with Kendall and Gary.

Jan 8, 2020, 8:34 AM
David Giard updated his status.

Today I am grateful to come to the Kalahari for the 12th consecutive January.

Today I am grateful for the NFL playoffs.

Sunday, February 2, 2020 12:56:53 PM (GMT Standard Time, UTC+00:00)
# Thursday, January 30, 2020

GCast 71:

Integrating Visual Studio Solution with Azure DevOps Repo

Learn how to configure your Visual Studio 2019 solution to integrate with an Azure DevOps repository.

ALM | Azure | DevOps | GCast | Screencast | Video | Visual Studio
Thursday, January 30, 2020 9:27:00 AM (GMT Standard Time, UTC+00:00)
# Monday, January 27, 2020

Episode 595

Tibi Covaci on Migrating to the Cloud

Tibi Covaci discusses strategies and factors companies need to consider when migrating their applications to the cloud.

Monday, January 27, 2020 8:02:00 AM (GMT Standard Time, UTC+00:00)
# Saturday, January 25, 2020

AHouseforMrBiswasMisfortune followed Mr. Biswas his entire life. He was born slightly handicapped and grew up weak in body and spirit. When he was a boy, his father accidentally drowned as a result of his negligence. He was sent to live first with a craftsman, then with an abusive uncle and each stay ended disastrously. As a young man, his flirtation with a local young lady is misinterpreted as a proposal and he is pressured by her family into marriage. From that moment on, he finds himself dependent on the wealthy Tulsi family - a dependence he comes to bitterly resent.

A House for Mr. Biswas by V.S. Naipaul takes place before and during World War II among the east Indian community of the West Indian island of Trinidad.

The house that Mr. Biswas craves is a symbol of his freedom and independence - evidence that he will no longer rely on others for shelter or status or anything else - and for the respect that will accompany that independence.

The reader wants to pity Mr. Biswas, but it is often hard because so much of his pain is self-inflicted. He alienates everyone around him with his rages and his pettiness. The book must have been painful for Naipaul to write, as the title character is based on his own father. At times, it was painful to read as I recalled the times in my own life when I acted against my own best interest out of anger or spite.

There isn't much action in this book and Naipaul removes suspense by revealing the ending in the prologue; but he makes it work for several reasons:

He builds characters that the reader can care for, even if they are not likeable.

His prose and dialogue are wonderful - sometimes tragic; often humorous.

He weaves together large themes, such as the changing cultures in a post-colonial world and the conflicts of toxic relationships.

A House for Mr. Biswas is an excellent story of a limited man struggling to free himself.

Saturday, January 25, 2020 12:59:02 PM (GMT Standard Time, UTC+00:00)
# Thursday, January 23, 2020

GCast 70:

Deleting an Azure DevOps Project

Deleting a project from an Azure DevOps organization is not intuitive (at least it wasn't for me). Here is how to do it.

Thursday, January 23, 2020 6:08:00 AM (GMT Standard Time, UTC+00:00)
# Monday, January 20, 2020

Episode 594

Christian Geuer Pollmann on Erlang and Elixir

Christian Geuer-Pollmann describes the Erlang ecosystem, the Elixir language, and open source Azure tools he has built with Elixir.



Monday, January 20, 2020 9:34:00 AM (GMT Standard Time, UTC+00:00)
# Saturday, January 18, 2020

MIsForMagicM is for Magic collects 11 short stories by fantasy author Neil Gaiman.

The title is a tribute to Ray Bradbury's short story anthologies R Is for Rocket and S Is for Space and Gaiman's style is not dissimilar to Bradbury's.

The collection opens with "The Case of the Four and Twenty Blackbirds" - A detective story in the style of Dashiell Hammett's or Raymond Chandler's pulp novels, but featuring characters from nursery rhymes. Hard-boiled private eye Jack Horner attempts to solve the mystery of whether Humpty Dumpty fell from a wall or was pushed. The story is often laugh-out-loud funny.

10 more stories and a poem follow; they cover various subjects and styles, but revolve around the genres of fantasy, horror, and science fiction. These tales were written by Gaiman over a period spanning over 20 years. Many of them have appeared in other collections, but they were all new to me.

My favourite was "Chivalry", which tells of an old lady who buys the Holy Grail in a local thrift store for 70 pence and likes the way it looks on her mantle. When Sir Galahad arrives on his quest for the Grail, he offers her priceless treasures in exchange; but she really likes the way it looks between a ceramic figurine and a photo of her late husband.

Most of the stories are a bit scary, but none is terrifying. There is a bit of nudity and sex, so I would not recommend M is for Magic for young children. But teenagers and young adults will enjoy Gaiman's wit and creativity; And grown-ups like me will also like it.

The stories:

The Case of the Four and Twenty Blackbirds

Detective Jack Horner investigates the fall of Humpty Dumpty.

Troll Bridge

A young boy stumbles upon a giant troll, who declares he will eat the boy's life. The boy dissuades the troll by promising to return when he has experienced more life.

Don't Ask Jack

A mysterious and malevolent jack-o-lantern frightens the family

How to Sell the Ponti Bridge

An elaborate scam that impresses other grifters

October in the Chair

Each of the months of the year gather around a fire to exchange stories


An old lady discovers the Holy Grail in a secondhand shop. A few days later, Sir Galahad comes to her house on his holy quest.

The Price

The devil shows up and battles an adopted stray cat

How to Talk to Girls at Parties

Teenage boys attend a party hosted by alien females


An epicurean club travels to Egypt to capture and eat an extremely rare bird

The Witch's Headstone

A boy encounters the ghost of witch burned centuries ago and tries to help her


A poem about what to do if you find yourself in a fairy tale.

Saturday, January 18, 2020 11:43:00 AM (GMT Standard Time, UTC+00:00)
# Friday, January 17, 2020

The C# string class provides a convenient method for replacing one string with another. The syntax is

string.Replace (<old string>, <new string>);

So the following code:

var oldName = "David";
var newName = "Mr. Giard";
var oldSentence = "My name is David";
var newSentence = oldSentence.Replace(oldName, newName);

stores the value "My name is Mr. Giard" in the variable newSentence.

It is simple and it works. But I recently discovered a limitation: Searching for the old string is always case-sensitive. If I want to do a case-insensitive search and replace instances of "David" or "david" or "DAVID" (or even "daVid"), the string.Replace method does not support this.

The following code:

var oldName = "DAVID"; 
var newName = "Mr. Giard"; 
var oldSentence = "My name is David"; 
var newSentence = oldSentence.Replace(oldName, newName);

Results in the value "My name is David" being assigned to newSentence. In other words, the Replace method did nothing.

Fortunately, I can use the regular expression library to do this. The code is below:

var oldName = "DAVID"; 
var newName = "Mr. Giard"; 
var oldSentence = "My name is David"; 
var regex = new Regex(oldName, RegexOptions.IgnoreCase); 
var newSentence = regex.Replace(oldSentence, newName);

It is only one more line than using Replace and it allows for much more flexibility. And, as Regular Expressions go, this one is quite simple.

Friday, January 17, 2020 7:16:13 PM (GMT Standard Time, UTC+00:00)