# Saturday, February 29, 2020

GravitysRainbowIt is near the end of World War II and the Germans have apparently developed a new weapon of unknown capability with the unlikely serial number "0000".

The allies are looking for it, while they analyze the pattern of bombs dropping on London. One pattern they cannot understand is why a bomb consistently falls on a location a few days after US Army Lt. Tyrone Slothrop has sex in that location. Eventually, Lt. Slothrop is sent to Germany to search for this mysterious weapon. On his journeys, he disguises himself as a superhero and as a pig.

Gravity's Rainbow by Thomas Pynchon follows Slothrop on his mission to find the bomb. But it does not take us on a straight line through his quest. Pynchon introduces us to hundreds of characters - many tangential or completely irrelevant to the story; and he weaves dozens of subplots - many of which have little to do with the broader narrative.

In between, we a lot of sex happens and a bit of scatology and some incest and a story of a sentient, immortal light bulb. It's often entertaining, but all very confusing.

Many parts of the novel are very well-written - told with humor and satire and emotion. The challenge is tying them together. I trust that Pynchon accomplished this, but he makes it a major challenge for the reader to recognize how he did so. Characters are introduced, then disappear for hundreds of pages, before they reappear.

The book was too long and complex for me to enjoy as a whole. It felt like a mashup of disconnected scenes.

This seems like the kind of novel one needs to read multiple times in order to appreciate. At some point, I may return to it and re-evaluate it; but, its nearly 800-page length and the pile other books awaiting my attention will delay that - maybe forever.

Saturday, February 29, 2020 9:03:00 AM (GMT Standard Time, UTC+00:00)
# Thursday, February 27, 2020

GCast 75:

Creating an Azure SQL Server Logical Server

How to create a logical SQL Server in Microsoft Azure.

Thursday, February 27, 2020 9:19:00 AM (GMT Standard Time, UTC+00:00)
# Monday, February 24, 2020

Episode 599

Bryan Glenn on the Right Mindset for Success

Bryan Glenn is a technology entrepreneur. His upcoming book "Life Adds Up" talks about thea characteristics necessary to acheive success. Bryan shares stories of successful people like Bill Gates and Albert Einstein, as well as lessons from his own life.

http://capitalglenn.com

Monday, February 24, 2020 9:27:00 AM (GMT Standard Time, UTC+00:00)
# Saturday, February 22, 2020

TheCorrectionsJonathan Franzen's 2001 novel "The Corrections" tells the story of a family that has lost its way. Alfred and Enid Lambert still live in their home in Iowa, but their three adult children have moved to New York and Philadelphia. The children initially enjoyed some success, but each has fallen hard in recent years.

Oldest son Gary has achieved financial success as a banker but is trapped in a loveless marriage in which he and his wife consistently torture one another emotionally. He struggles with alcoholism and depression.

Chip was a college professor until he was fired for sleeping with and then stalking one of his students. He tries to pull himself out of debt by assisting a corrupt Lithuanian politician scam people via the Internet.

Denise’s career as a famous chef is undone by a disastrous affair.

Patriarch Alfred is a retired engineer for a Midwestern railroad. His entire life, he has been hard-working and independent and in control. But Parkinson's and Alzheimer’s are now robbing him of that control.

Matriarch Enid tries desperately to keep her family together, inviting everyone home for "one last Christmas", while she tries to care for Alfred. Enid is easily the most sympathetic of the family. Her marriage to the emotionally unavailable Alfred has been unsatisfying, but she stayed with him; and her adult children have all but abandoned her, but she still loves them. Still, her efforts to control the lives of everyone in the family and heap guilt on her children prevent the reader from admiring her too much.

This novel grabbed me early and held me throughout. Franzen introduces each family member, shows or hints at their current problems - then takes us back in time to show us how they fell to where they are now.  He gradually reveals their lives and characters and motivations, and the fatal flaws that toppled them. Each character lives in denial of the seriousness of their problems. Each major character is damaged, but each has enough redeeming qualities that the reader pulls for them. They seemingly cannot resist acts of self-destruction.

Even the minor characters are interesting. I loved the neurotic Robin, who blamed herself for the violence chosen by her sociopath brother. And the pill-pushing cruise ship doctor reminded me of a used car salesman and had me laughing out loud. These characters exist to reflect the Lambert family, but Franzen took the time to give them shape, without distracting from the main story.

The Corrections is humorous and absurd and touching and tragic; and in the end, as the characters each experience their corrections, gives us hope for the future.

Saturday, February 22, 2020 9:46:00 AM (GMT Standard Time, UTC+00:00)
# Thursday, February 20, 2020

GCast 74:

Continuous Deployment with Azure DevOps

Implement continuous integration and continuous deployment by automatically triggering build and deploy pipelines when code is committed to a repository branch.

ALM | Azure | DevOps | GCast | Screencast | Video
Thursday, February 20, 2020 8:17:00 AM (GMT Standard Time, UTC+00:00)
# Tuesday, February 18, 2020

Azure Logic Apps allow you to create scalable workflows hosted in the cloud. Although each Logic App is self-contained, it is often helpful to share artifacts such as maps, schemas, and certificates among multiple Logic Apps.

An Azure Integration Account provides a container for storing these artifacts.

Creating an Integration Account

To create an Integration Account, navigate to the Azure Portal [https://portal.azure.com], sign in and click the [Create a resource] button (Fig. 1).

IA01-CreateResourceButton
Fig. 1

Search for and select "Integration Account", as shown in Fig. 2.

IA02-FindIntegrationAccount
Fig. 2

The "Integration Account" information page displays, as shown in Fig. 3.

IA03-IntegrationAccountIntro
Fig. 3

Click the [Create] button to display the "Create Integration Account" blade with the "Basics" tab selected, as shown in Fig. 4.

IA04-IntegrationAccountBasics
Fig. 4

At the "Resource group" field, select or create a resource group in which to store this Integration Account.

At the "Integration account name" field, enter a unique name for this Integration Account.

At the "Location" dropdown, select the region in which to store this account. This should be the same region in which your Logic Apps are located.

At the "Pricing Tier" dropdown, select which pricing tier you wish to use. The options are (in increasing order of cost) "Free", "Basic", and "Standard". Only one Free Account is allowed per Azure Subscription. You can change this setting after creating an Integration Account.

Click the [Review + create] button when you have completed this tab. The "Review + create" tab displays, as shown in Fig. 5.

IA05-ReviewCreate
Fig. 5

Review your choices. Switch back to the "Basics" tab if you need to make any corrections. Click the [Create] button to create the Integration Account.

After Azure creates the Integration Account, the "Your deployment is complete" message displays, as shown inf Fig. 6.

IA06-YourDeploymentIsComplete
Fig. 6

Click the [Go to resource] button to open the Integration Account, as shown in Fig. 7.

IA07-IntegrationAccountOverview
Fig. 7

Here you can manage reusable Schemas, Maps, and other Components.

Associating a Logic App with an Integration Account

An Integration Account can be associated with one or more Logic Apps, making components in the Integration Account available to each of these Logic Apps.

See this article to learn how to create a Logic App.

To associate a Logic App with an Integration Account, open the Logic App. The left menu of a Logic App is shown in Fig. 8.

IA08-LogicAppsLeftMenu
Fig. 8

Click the [Workflow settings] button (Fig. 9) under the "Settings" section of the left menu to open "Access control configuration" blade, as shown in Fig. 10.

IA09-WorkflowSettingsButton
Fig. 9

IA10-WorkflowSettings
Fig. 10

At the "Integration account" dropdown, select the Integration Account you wish to associate with this logic app, as shown in Fig. 11.

IA11-SelectIntegrationAccount
Fig. 11

Click the [Save] button (Fig. 12) at the top of the blade to save this configuration.

IA12-SaveButton
Fig. 12

You are now ready to use the artifacts in the Integration Account with this Logic App.

Tuesday, February 18, 2020 9:26:00 AM (GMT Standard Time, UTC+00:00)
# Monday, February 17, 2020

Episode 598

Jean Lange on Building Skills with Improv games

Jean Lange runs a workshop that uses games and improvisation to help people learn important skills when working with a group. Participants learn to communicate and to accept failure.

https://www.academypgh.com/

Monday, February 17, 2020 9:27:00 AM (GMT Standard Time, UTC+00:00)
# Friday, February 14, 2020

With a Logic App, you can create and run scalable workflows that are hosted in the Azure cloud. A graphical designer and connectors to hundreds of databases, APIs, and external applications and services make it possible to quickly create a workflow using Logic Apps.

To create a new Logic App, navigate to the Azure Portal, sign in and click the [Create a resource] button (Fig. 1).

LA01-CreateAResource
Fig. 1

Select Integration | Logic App, as shown in Fig. 2.

LA01-NewIntegrationLogicApps
Fig. 2

The "Create Logic App" blade with the "Basics" tab selected, as shown in Fig. 3.

LA03-NewLogicAppBlade
Fig. 3

At the "Resource group" field, select or create a resource group in which to store this Logic App.

At the "Logic App name" field, enter a unique name for this Logic App.

At the "Location" dropdown, select the region in which to store this Logic App.

Click the [Review + create] button when you have completed this tab. The "Review + create" tab displays, as shown in Fig. 4.

LA04-ReviewCreateTab
Fig. 4

Review your choices. Switch back to the "Basics" tab if you need to make any corrections. Click the [Create] button to create the Integration Account.

After Azure creates the Logic App, the "Your deployment is complete" message displays, as shown in Fig. 5.

LA04-ReviewCreateTab
Fig. 5

Click the [Go to resource] button to open the Start Page of your Logic App, as shown in Fig. 6.

LA06-LogicAppStart
Fig. 6

On the start page, a video is available if you want a brief introduction to Logic Apps.

Below the video is a set of buttons that allow you to create a new workflow with a common trigger. A trigger is an action that starts a Logic App workflow.

The next section lists buttons for templates to perform some common tasks. Each template contains a trigger and one or more actions.

These buttons help to accelerate your development by providing some of the activities in a workflow and allowing you to fill in the specific properties.

Fig. 7 shows the Logic App designer after you select the HTTP Request-Response template.

LA07-LogicAppsDesigner
Fig. 7

In this article, you learned how to create a new Logic App.

Friday, February 14, 2020 9:20:00 AM (GMT Standard Time, UTC+00:00)
# Thursday, February 13, 2020

GCast 73:

Build an Azure DevOps Release Pipeline

How to create a pipeline that will automatically deploy an ASP.NET Core Web Application to an Azure App Service.

ALM | Azure | DevOps | GCast | Screencast | Video
Thursday, February 13, 2020 8:14:00 AM (GMT Standard Time, UTC+00:00)
# Wednesday, February 12, 2020

Microsoft Power Automate (formerly Microsoft Flow) and Azure Logic Apps solve similar problems. You can use either one to create a workflow hosted in the cloud. However, Logic Apps tend to be more powerful. If you create a Power Automate flow, you may eventually run into its limitations and wish to recreate the same workflow in Logic Apps.

Fortunately, this can be done in just a few steps.

Navigate to https://flow.microsoft.com, sign in and select the flow you wish to migrate under "My Flows". The details of the flow displays, as shown in Fig. 1.

PALA01-FlowDetails
Fig. 1

From the top toolbar, select Export | Logic Apps template (.json), as shown in Fig. 2.

PALA02-ExportButton
Fig. 2

A JSON file will be created and automatically downloaded. Fig 3 shows a section of this file.

PALA03-JSON
Fig. 3

Navigate to the Azure Portal (https://portal.azure.com) and login. Click the [Create a Resource] button (Fig. 4) and search for "Template deployment (deploy using custom templates), as shown in Fig. 5.

PALA04-CreateResourceButton
Fig 4

PALA05-NewTemplateDeploy
Fig. 5

Select "Template deployment" to display the info page for this service shown in Fig. 6.

PALA06-TemplateDeployInfo
Fig. 6

Click the [Create] button to display the "Custom deployment" start page, as shown in Fig. 7.

PALA07-TemplateDeployStart
Fig. 7

Click "Build your own template in the editor" to display the template editor, as shown in Fig. 8.

PALA08-TemplateEditor
Fig. 8

Click the [Load file] button (Fig. 9); then navigate to and select the JSON file you exported above.

PALA09-LoadFileButton
Fig. 9

The exported JSON displays, as shown in Fig. 10.

PALA10-LoadedFile
Fig. 10

Click the [Save] button to open the "Custom deployment" dialog with settings from the JSON file, as shown in Fig. 11.

PALA11-CustomDeployment
Fig. 11

Fill in the desired Resource Group and Logic App name, check the "I agree" checkbox, and click the [Purchase] button to create the Logic App.

After a few seconds, your logic app will be available. At this time, you can open it and change any settings you wish, as shown in Fig. 12.

PALA12-LogicApp
Fig. 12

It may be necessary to authenticate against any API connectors, so check these before testing your Logic App.

In this article, you learned how to export a Power Automate flow and import it into an Azure Logic App.

Wednesday, February 12, 2020 9:10:00 AM (GMT Standard Time, UTC+00:00)
# Tuesday, February 11, 2020

Azure Logic Apps and Microsoft Power Automate (formerly Microsoft Flow) are tools from Microsoft that allow users to build custom workflows.

Each of these tools provides a robust workflow engine with a graphical front-end. Power Automate (PA) is built on top of Logic Apps and it is possible to export from a Power Automate flow and import it into a Logic App. Each provides a graphical interface to add connectors, workflow step, and control logic. Each supports an in-browser User Interface, so you don't need to install anything locally (although a VS extension lets you design workflows from within Visual Studio.) Each ships with a set of connectors to common databases, queues, APIs, and other systems, along with generic connectors to do things like calling a web service. Neither provides a great DevOps story, allowing easy integration with version control, automated testing, and automated deployment.

But there are differences. A primary difference is the way that Microsoft positions these 2 technologies: Microsoft is targeting PA at "Citizen Developers" - users with a strong knowledge of their systems and their business requirements, but without the knowledge or desire to write code. Logic Apps are targeted at developers and IT workers. As these products mature, expect PA to get more features around ease of use, while Logic App gets more focus on increased power.

Here are some other differences:

Logic Apps:

  • are hosted in Azure
  • are more scalable
  • have a code view, making it slightly easier to use source control
  • have more connectors (e.g., Liquid templates, SAP, IoT)
  • Support B2B and B2C Scenarios
  • triggers fire faster
  • have better monitoring

Power Automate flow:

  • are hosted in Office 365
  • includes a "Button" trigger for easy integration with PowerApps
  • provides some simple, common templates to get you started
  • has better SharePoint integration

When deciding between these tools, here are some questions to ask yourself:

  • Are you primarily using Azure or Office 365? Logic Apps runs in Azure; PA runs in Office 365. If you are not currently using the appropriate platform, you will need to start doing so.
  • What is the tech level of those who will be maintaining your workflows? Logic Apps are designed for tech professionals; PA is designed for business users with some tech knowledge
  • What are the scalability and performance requirements? PA can handle a lot, but the maximums are greater for Logic Apps.
  • Do many of your workflows read from and write to SharePoint? PA will probably make these easier to write.
  • With which external systems, databases, and APIs will your workflows interact? Logic Apps include access to many more connectors. Verify that the ones you need exist in the platform you choose.

One choice is to begin writing your workflows with PA; and, if you find that you need something more robust, use the import/export functionality to migrate your flows to Logic Apps and begin using that tooling.

Tuesday, February 11, 2020 8:49:00 AM (GMT Standard Time, UTC+00:00)
# Monday, February 10, 2020

Episode 597

Arthur Doler on Mental Health in the Workplace

Arthur Doler discusses how people can recognize and deal with mental health issues and how it affects the tech community.

Monday, February 10, 2020 8:08:00 AM (GMT Standard Time, UTC+00:00)
# Friday, February 7, 2020

Microsoft Power Automate (formerly Microsoft Flow) is a tool that allows people to design and build workflows without writing code.

In a previous article, I showed you how to create a flow from a template. In this article, I will show how to test a flow after you create it.

If your flow is not already open in the designer, you can navigate to https://flow.microsoft.com and sign in; then select "My flows" from the left menu, as shown in Fig. 1

PAT01-SideMenu
Fig. 1

Select your flow to open it; then click the [Edit] button (Fig. 2) in the toolbar to open the flow in Edit mode.

PAT02-EditButton
Fig. 2

With the flow open, you can test this flow by clicking the [Test] button (Fig. 3) in the top right toolbar.

PAT03-TestButton
Fig. 3

A "Test Flow" dialog displays, as shown in Fig. 4.

PAT04-TestFlowDialog
Fig. 4

This dialog gives you the option to either perform the trigger action manually (in this case, sending an email with an attachment to the mailbox you specified). Use using data from a previous test run. If this is the first time you've tested this flow, only the first option is available. Select the "I'll perform the action trigger" radio button and click the [Test] button. After a few seconds, this starts the flow running in test mode. It won't be activated until you trigger it.

If you are using the flow created in the previous article, the trigger involved sending an email with one or more attachments to an email address. In any event, a message displays telling you how to trigger the flow, as shown in Fig. 5.

PAT05-TestMode
Fig. 5

After the flow is triggered, each step will display with a green check indicating success or a red "x" indicating failure for each action attempted, as shown in Fig. 6.

PAT06-FlowAfterTest
Fig. 6

You can expand any step to view the inputs, outputs, and any relevant messages of that step, as shown in Fig. 7.

PAT07-ExpandStep
Fig. 7

As you make changes to your flow, you can continue to test it with the same data from the original test, without having to run the trigger again. Do this from the "Test Flow" dialog

  1. Select the "I'll perform the action trigger" radio button
  2. Select the test run that includes the data you want to use.
  3. Click the [Test] button.

An example is shown in Fig. 8.

PAT08-TestFlowDialog
Fig. 8

Repeat this until the flow works the way you expect it.

In this article, you learned how to test a flow in Microsoft Power Automate.

Friday, February 7, 2020 9:03:00 AM (GMT Standard Time, UTC+00:00)
# Thursday, February 6, 2020

GCast 72:

Creating an Azure DevOps Build Pipeline

Learn how to automate a build and test process with an Azure DevOps Build pipeline.

Thursday, February 6, 2020 8:52:00 AM (GMT Standard Time, UTC+00:00)
# Wednesday, February 5, 2020

Microsoft Power Automate (formerly Microsoft Flow) is a tool that allows people to design and build workflows without writing code.

It ships with a workflow engine and a designer. The design work is done in the browser.

To make it easier to get started PA includes hundreds of templates - workflows to accomplish common tasks.

You can get started quickly by selecting one of these templates.

Navigate to flow.microsoft.com and sign in.

A workflow in Power Automate is known as a "flow". From the left side menu (Fig. 1), select "My flows".

PAT01-SideMenu
Fig. 1

This will list all flows that you have created so far. If you haven't yet created any, the list will be empty, as shown in Fig. 2.

PAT02-MyFlows
Fig. 2

To get started creating a new flow, click the [+New] button above this list. A dropdown menu displays, as shown in Fig. 3.

PAT03-NewFlow
Fig. 3

Select "Create from Template". A list of available templates displays, as shown in Fig. 4.

PAT04-TemplateList
Fig 4

You can use the "Search templates" box to search for a template by its name or description or you can click the [See More Templates] button (Fig. 5) at the bottom of the list to display another page of available templates.

PAT05-SeeMoreTemplates
Fig. 5

One simple template allows you to save email attachments to a OneDrive folder. To get started, click the [Save Outlook.com email attachments to your OneDrive] card, as shown in Fig. 6.

PAT06-SaveEmailToOneDrive
Fig. 6

A summary page for this template displays, as shown in Fig. 7.

PAT07-TemplateSummary
Fig. 7

Click the [Use this template] button. The connectors used by this template will display, as shown in Fig. 8.

PAT08-Connectors
Fig. 8

You will need to configure these 2 connectors to specify and authenticate against your specific email account and OneDrive account.

When, you have finished configuring these, click the [Continue] button.

A new flow is created based on this template. The Flow Designer for this flow displays, as shown in Fig. 9.

PAT09-FlowDesigner
Fig. 9

This workflow consists of 2 steps: One Trigger and one Action.

The Trigger ("On new email", in this case), specifies what must happen in order to run this flow. For this flow, it is the receipt of an email. The connector configured above specified the email account, but there are more options. For example, by default, we only look at messages in the Inbox, but we can check a different folder if we only want to consider emails routed to a specific Outlook folder.

Click the "Show advanced options" link to display advanced options (Fig. 10).

PAT10-AdvancedOptions
Fig. 10

Here, you can filter the trigger, so it is only activated by messages to and/or from certain parties or with a specific word or words in the subject.

Look at the first action in this flow with the title "Apply to each attachment on the email". (Fig. 11)

PAT11-Action
Fig. 11

Notice that it contains another action. This is a type of "Control" action, known as an "Apply to each control" and it works similarly to a LOOP or FOREACH construct in a programming language. It will exit all contained actions for every email attachment that the trigger finds.

The contained action is a "Create file" action. So, it will create a file in your Dropbox folder for every email attachment that arrives in your inbox. You have the option to modify the name and contents of the file created, but the default behavior is to use the name and contents of the attached file.

You can add more actions to this flow if you like. To add an action inside the control, click the [Add an action] button (Fig. 12) at the bottom of the control.

PAT12-AddAnActionButton
Fig 12

To add an action after the control, click the [New Step] button (Fig. 13) below the control.

PAT13-NewStepButton
Fig. 13

To add an action between actions or before all actions, hover your mouse over the arrow connector and click the [+] button (Fig. 14) that appears.

PAT14-PlusButton
Fig. 14

You can save the flow by clicking either the [Save] button at the bottom (Fig. 15) or in the top right toolbar (Fig. 16).

PAT15-SaveButton
Fig. 15

PAT16-SaveButton
Fig. 16

Now your flow is ready to test, which I will cover in the next article.

In this article, I showed how to create a new flow based on a template in Microsoft Power Automate.

Wednesday, February 5, 2020 8:10:00 AM (GMT Standard Time, UTC+00:00)
# 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
Flows

  • Connectors
  • Triggers
  • Actions
  • Templates
  • Solutions

Flows

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

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. 

Triggers

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.

Actions

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.

Templates

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.

Solutions

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.

Examples

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.

https://www.codemash.org/kidzmash/

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

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

2/1
Today I am grateful for 2 years in my condo.

1/31
Today I am grateful for Coffee with Andy

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

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

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

1/27
Today I am grateful to watch the Grammy Awards last night

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

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

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

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

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

1/21
Today I am grateful for Inbox Zero.

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

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

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

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

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

1/15
Today I am grateful for a new bike chain.

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

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

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

1/11
Congratulations to the North Dakota State Bison on another title!

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

1/9
Today I am grateful for dinner with J. last night.

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

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

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

1/6
Today I am grateful for the NFL playoffs.

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