GCast 2:

Azure Machine Learning Studio

Azure Machine Learning Studio is a graphical designer that allows you to quickly build Machine Learning solutions without writing a lot of code.



Romanian Rhapsody 2018

Comments [0]

Romania

Achievement unlocked: I played Dungeons and Dragons last night for the first time in my life. And I did it in Transylvania!

I am writing this while sitting in the Cluj-Napoca airport, waiting for my flight to Bucharest and my connection to Oslo this evening.

IMG_0762This is the fifth consecutive year I have visited Romania to attend IT Camp. I enjoy it more each time I come - the conference, the people, and the country.

IT camp has become like a family reunion for me. I look forward to seeing old friends from Romania and from Europe and America. Most of them I only get to see once a year, so it is a real treat for me to come here. And, as always, the Hotel Grand Italia spoils me with their excellent service.

IMG_0824The conference continues to grow. Attendance was 500-600 this year (about 10% more than last year) and the speaker list grew to over 40. Session times were shortened to 45 minutes this year in order to accommodate the larger number of sessions. I delivered 2 presentations: "Own Your Own Career – Advice from a Veteran Consultant" and "How Cloud Computing Empowers a Data Scientist". I had a packed room for the first session, with many people standing in the back. A number of people approached me during the conference to ask more questions about my topics and to tell me they enjoyed my talks, which is always a treat.

In between sessions, I met new people, re-connected with old friends, recorded 4 interviews, learned a few things, and Tudy taught me how to play Dungeons and Dragons, even though I was so tired I nearly fell asleep an hour into the game.

IMG_0807Some inclement weather and a need to prepare my presentations kept me close to the hotel during the conference; but IT Camp always includes a field trip the day after the conference. This year, they took us to Sighișoara, a small city in central Romania most famous as the alleged birthplace of Vlad the Impaler, the inspiration for Count Dracula.

IMG_0818I am grateful to Mihai and Diana and Tudor and Noemi and the many volunteers who work hard to make IT Camp a success and to make me feel welcome. I got a lot out of this trip.

And how many people can say their first game of Dungeons and Dragons took place in Transylvania?


SilverthornSilverthorn by Raymond Feist continues the Riftwar Saga, begun in Magician: Apprentice and Magician: Master.

The interplanetary war has ended, the rift between the world has closed, and Lyam has been named king.

But evil forces still lurk on Midkemia and an assassination attempt on Anita, the betrothed of Lyam's brother Arutha leaves her dying from a poison-dipped crossbow bolt. Most of this book follows Arutha and his companions in their quest to find the rare silverthorn plant, which promises to provide an antidote for the poison that is slowly killing Anita.

Pug, the title character of the first two novels is relegated to a minor role until the last few chapters, when he returns to Kelewan to seek a way to battle an evil magician hoping to take over and destroy Midkemia. The journey is perilous because Pug is an outlaw in Kelewan, thanks to his disruption of the High Magicians and a powerful warlord.

Feist does a good job of keeping the action flowing and the reader engaged. This book's story is more straightforward than that of its 2-volume predecessor. It does not suffer from the weakness of the earlier volumes - having characters summarize certain events, rather than letting the reader experience them directly. We follow the characters as the action unfolds.

Silverthorn stands well on its own; but is best enjoyed as part of the Riftwar Saga. I have already begun the next book in the series.


MagicianMasterA warning: You are much more likely to enjoy Raymond Feist's "Magician: Master", if you first read his novel "Magician: Apprentice". This story was originally published as a single volume, titled simply "Magician"; but after the success of this novel, Feist convinced his publisher to allow him to expand the story into 2 books and release those separately. As a result, neither book stands well on its own, but together they form a solid story.

"Magician: Master" continues the story of Pug, who was captured by the Tsurani of Kelewan during the Riftwar and sold into slavery before rising to power via his magical abilities. He ultimately returns to his home world of Midkemia in attempt to gain a truce; but he is confounded by evil forces and by a senile king.

This book and its predecessor hold up well as a high fantasy novel. Numerous characters are developed and cross paths through multiple subplots.

The greatest weakness of the story is Feist's tendency to skip significant events, then relay them later in retrospect. A character dies, but we don't hear of it until his girlfriend relays the news;  Pug transforms into a master magician, but we have very little insight into how this happens; he goes away and somehow is more powerful than his teachers when he returns. Showing the reader these actions would almost certainly have more impact than telling us about their results.

Despite its weaknesses, I enjoyed the 2-volume story and I have already begun reading the next book in the series.


GCast 1:

A Lap Around Cloud and Azure

What is cloud computing, why is it important, and how does Microsoft Azure fit in?


I have twice begun a screencast web series; but each time it fizzled as I ran out of time, motivation, and/or subject matter.

This time, I'm optimistic and I have a lot to say.

So, starting tomorrow, I am re-booting "GCast", a technical screencast in which I will walk through a technical topic in a short video.

My new computer and a fresh install of Camtasia Studio and Adobe Premiere Elements will help.

I’ve recorded a few episodes and I’ll be releasing them here once a week, for now. The first 2 are about 20 minutes long, but I plan to keep most videos 5-10 minutes.

Tomorrow's episode is A Lap Around Microsoft Azure and talks about the advantages of cloud computing in general and Azure in particular. 

I hope you like it an I hope you keep watching.


HollowHills"he Hollow Hills continues Mary Stewart's Arthurian Saga, begun with Merlin's early years in The Crystal Cave.

In this second volume, King Uther, hoping to avoid the shame of conceiving Arthur via Ygraine on the night her husband was killed, commits the infant to the care of Merlin. Merlin keeps the boy safe until it is time for him to become king.

Merlin places the future monarch in the care of trusted friends; then, travels across Europe, where he learns of the sword of King Maximus - a sword prophesied to belong to the rightful ruler of Britain. Merlin then begins his quest to find this sword and get it to Arthur.

In some ways, The Hollow Hills is even stronger than The Crystal Cave. It continues its focus on Merlin, but it is Merlin the man, cognizant of his destiny and responsibility that we see, and his story is compelling.

I love the very-human Merlin that Stewart creates. His only "magic" is his advanced education and his ability to (sometimes) see the future and the distant present; but that is enough to grow his legend as a powerful wizard.

I love the way Stewart brings to life the legend in a very real sense. Merlin seeks and discovers the legendary sword of a long dead king and leaves it where Arthur can find it, cementing the boy's claim to the crown of his father.

The story follows Merlin from Arthur's birth to his ascension to the throne after Uther's death. Because Arthur's story is so well known, there are few surprises; but Stewart's prose and her gift of building characters makes this an enjoyable read.



May 2018 Gratitudes

Comments [0]

6/3
Today I am grateful for a walk along the Fox River in St. Charles yesterday

6/2
Today I am grateful to get my photos and videos transferred to and organized on my new computer.

6/1
Today I am grateful for the NBA Finals and the NHL Finals

5/30
Today I am grateful for a hot bath last night.

5/30
Today I am grateful for Taco Tuesday.

5/29
Today I am grateful for a walk around Irving Park last night.

5/28
Today I am grateful for a boat ride around Vancouver, BC yesterday

5/27
Today I am grateful to participate in a successful Imagine Cup Finals yesterday.

5/26
Today I a m grateful to make it safely to Vancouver after a full day of travel yesterday.

5/25
Today I am grateful to spend time this week with my boys while Nick was in town.

5/24
‪Today I am grateful to Nick for helping me set up my TV and DVD player yesterday. ‬

5/23
Today I am grateful to watch the Cubs-Indians game at Wrigley Field last night.

5/22
Today I am grateful for online training courses

5/21
Today I am grateful to speak at the Chicago Data Science conference this weekend at the University of Chicago

5/20
Today I am grateful for an afternoon in Kenosha, WI

5/19
Today I am grateful for a long walk along the river in Chinatown last night.

5/18
Today I am grateful for
-Dinner with Carol last night
-Seeing the Chicago Symphony Orchestra for the first time

5/17
Today I am grateful for the Marvel Cinematic Universe

5/16
Today I am grateful for my first Personal Training session in months.

5/15
Today I am grateful to watch a series of storms yesterday through a large window from the shelter of my living room.

5/14
Today I am grateful to celebrate Mother's Day with someone else's mother.

5/13
Today I am grateful to see Freddy Cole at the Jazz Showcase last night.

5/12
Today I am grateful to attend and present at my first Toastmasters meeting in months.

5/11
Today I am grateful to finally catch up on my sleep.

5/10
Today I am grateful for all these free drinks and food that Starbucks now owes me.

5/9
Today I am grateful for:
-Dinner with Tim last night
-5 days in California

5/8
David Giard updated his status.
Today I am grateful for:
-The hospitality and generosity of Greg and Sharon and their family
-Lunch with Gail yesterday
-An afternoon with my Uncle Bill and Aunt Jean
-A drive to the Pacific Ocean at Point Reyes National Seashore

5/7
Today I am grateful to Kim for a ride to San Rafael yesterday.


After creating an Azure Virtual Machine (VM), you may wish to add one or more disks. Maybe you want to increase your VM's storage; capacity or maybe you want to separate some data from the operating system disk. Either way, open your Virtual Machine properties in the Azure Portal and select "Disks", as shown in Fig. 1.

Di01-DisksMenu
Fig. 1

The Disks blade displays, as shown in Fig. 2.

Di02-Disks
Fig. 2

Under the "Data Disks" section, click the "Name" dropdown of the first empty line; and select "Create Disk", as shown in Fig. 3.

Di03-DisksCreateDiskDropdown
Fig. 3

The "Create Managed Disk" blade displays (Fig. 4).

Di04-CreateManagedDisk
Fig. 4

Provide a disk name, resource group, region, type, and size. I generally prefer to create a disk in the same resource group and region as the VM. You can create a new empty disk, or one based on an existing snapshot.

Click the "Create" button to begin creating the disk, which will take a few minutes.

When finished, you should see your new disk listed in the VMs' Disks blade, as shown in Fig. 5.

Di05-Complete
Fig. 5

Repeat this process to add any more disks you like.

When you connect to the VM (via Remote Desktop for a Windows VM and via SSH for a Linux VM), you will see the extra disk and you will be able to read to and write from this disk.


MagicianApprenticePug is an orphan on the Midkemia world. He is apprenticed to the wizard Kulgan, learns a bit of magic, saves a princess, and is granted a lordship. Then a war breaks out between the people of his homeworld of Midkemia    and the Tsurani of Kelewan, who travel to his world through a "rift" in space.

"Magician: Apprentice" Tells the story of Pug, of his friend Tomas, who receives a magic gift from a dying dragon, and of the war between the invading Tsurani and the people of Midkemia. The stories are straightforward tales of high fantasy, in the tradition of Lord of the Rings, but simpler. Major themes are Pug's coming of age and the contrasting cultures of the two warring societies.

I enjoyed reading it, but found the book unsatisfying by itself.  This book and "Magician: Master" were originally published as a single volume titled simply "Magician". Following the success of "Magician", Feist expanded the story and released it as two separate novels. But it the two together form a single story and Book 1 does not hold up well on its own. To appreciate the story, you must read both volumes.

Still, it is a good start to a good story and it is well told.


Creating a virtual machine (VM) may be the simplest thing to do in Azure. Azure VMs are very similar to on-premises VMs; in fact, they are built using the same technology - Microsoft Hyper-V.

You can create an Azure VM with just about any operating system, software, and data that you want. Hundreds of templates are available, pre-installed with a variety of configurations.

Azure supports Windows machines and Linux machines. (Did you know that about a third of the VMs in Azure are running Linux?)

The first step in creating an Azure VM is the same step when we create any Azure resource - Navigate to the Azure Portal, log in, and click the [Create a resource] button (Fig. 1) at the top left of the portal.

VM01-CreateAResource
Fig. 1

From the list of resource categories, select the "Compute" category; then select the template on which you want to base your VM, as shown in Fig. 2.

VM02-Compute
Fig. 2

If you don't see the VM you want, you can search for it by typing a partial description in the search box. This will display matching templates from which you can select, as shown in Fig. 3.

VM03-Search
Fig. 3

After selecting a template, a blade with a brief description displays. Fig. 4 shows the blade for an Ubuntu server. Click the [Create] button at the bottom of this blade.

VM04-VMDescriptionBlade
Fig. 4

The "Create virtual machine" dialog displays with the first tab - "Configure basic settings" - active, as shown in Fig. 5. Complete the forms on this tab.

VM05-BasicSettings
Fig. 5

  • At the name field, enter a unique name for your VM. Choose one that will make it easy for you to identify it when you return to the portal to manage this VM.
  • At the "VM disk type" dropdown, select "SSD" for a Solid State Drive or "HDD" for a standard hard drive.
  • At the "User name" field, enter a name for the local administrator account on this VM.
  • At "Authentication type", select either "SSH public key" or "Password" to specify how you want to log into this VM. I have selected "Password", which causes the "Password" fields to appear, requiring me to enter a password twice. Passwords must meet complexity requirements, including a length of at least of at least 12 characters and inclusion of numbers, alpha characters, and special characters.
  • If you have an Azure AD configured, you can configure your VM to use this for authentication by selecting "Enabled" under "Login with Azure Directory".
  • You will likely have only one Azure subscription; but if you have more than one, you can select the subscription with which to associate this VM.
  • At the "Resource group" fields, select an existing resource group or create a new one. Resource groups are a logical grouping of resources that you want to manage together. If there are existing Azure resources that will interact with this VM, you may want to place them all in the same Resource Group.
  • At the "Location" dropdown, select the region in which you want to create this VM. Location considerations include proximity to the people managing this VM; proximity to people using this VM; and proximity to any other resources that will interact with this VM.

When the tab is complete, click the [OK] button at the bottom.

The second tab - "Size" - will display, as shown in Fig. 6.

VM06-Size
Fig. 6

On the "Size" tab, select the size machine you want to create. This is a long list, but you can filter or search to make it more manageable. Note that not every size is available in every region.

After highlighting the desired size, click the [Select] button at the bottom of the tab.

The "Settings" tab will display as shown in Fig. 7.

VM07-OptionalFeatures
Fig. 7

Azure provides default values for every setting on this tab, so it is not necessary to change anything. However, you can configure your VM to connect to a specific virtual network or subnet or assign a specific IP address or change any of the settings you like.

When you are satisfied with the settings, click the [OK] button at the bottom of the tab.

The "Summary" tab displays what you have configured, in case you want to change anything at the last minute. It also validates that all your selections are complete and consistent. If the validation lists any problems, you should go back and correct these. 

After validation passes and you are satisfied with your selection, click the [Create] button at the bottom of the blade.

After a few minutes, Azure will create and deploy the VM based on your configuration.

Once it is created, it is your VM and you can connect to it as you would any local VM. Use Remote Desktop to connect to a Windows VM or use SSH to connect to a Linux VM.



IMG_0659Two weeks ago, I attended my first Imagine Cup event - the US Finals in San Francisco. Yesterday, I attended my second.

The Canadian Imagine Cup Finals took place in Vancouver, BC. Six finalists competed for the right to advance to the International Finals in Redmond in July.

This event was smaller and shorter than the corresponding US event; but equal in energy. Every one of the teams showed great creativity, strong technical skills, and impressive presentations.

I was excited that all 6 finalists came from schools with which I work. First place went to SmartArm - a project that provides affordable prosthetic arms for amputees - a team I helped mentor at the UTHacks hackathon in January in Toronto.

I'm getting used to these Imagine Cup projects and competitions and I'm looking forward to the world finals.


One of the challenges of working with data is what to do with missing data.

A missing column in a dataset can be, but is not limited to the following:

  • No text or numbers between 2 column delimiters
  • An empty string ("")
  • A blank string (e.g., "   ")
  • The number 0
  • A special indicator, such as "NA" or "NONE"
  • An inconsistent data type, such as a number where a string is expected
  • A value that makes no sense in the context of the data.

The last one requires some domain knowledge about the data, so it is often difficult to spot.

There are two strategies for dealing with missing data

  1. Delete or ignore the entire row
  2. Replace the column with a reasonable value.

If only a few rows contain missing data, it may be efficient to simply delete these rows.

But if many rows contain missing data, it probably makes sense to keep them as other columns may contain valuable information. In this case, we will want to replace the missing data with a reasonable value.

But what is a reasonable value?

Options include replacing the column with an average value, such as the mean or median of the non-missing values. Of course, this is only valid for numeric data that is ordinal, that is data in which higher numbers indicate a higher value and not simply a discrete category.

The Pandas library contains some simple functions for deleting rows and replacing values. The fillna function is the simplest way to do this.

# Replace all missing values with 0
df.fillna(0)

# Replace all missing values with the string 'Missing'
df.fillna('Missing')
  

You can delete invalid or missing rows by overwriting a dataset with a filtered version of that set, as in the following examples

# Delete all rows with area = 0 
df = df[df.area != 0]

# Delete all rows with null area 
df = df[df.area.notnull()] 
  

But for values that are not missing, but are inappropriate (e.g., using 0 to represent a missing data point, when 0 could be a valid measurement), we can use the map function.

Below, we use the map function to want to replace any value in the 'area' column that has a value of 0 with the mean value for this column.

# Replace 0 area with the mean
mean_area = df['area'].mean()   
df['area'] = df['area'].map({0: mean_area})    
  

In this article, we discussed ways to use Pandas handle missing data in a dataframe.



I was working with a dataset in Azure ML Studio and I needed to replace values in a column.

Reasons for replacing value include:

  • Replacing codes with a more readable word or words
  • Consistency when combining 2 sets of data
  • Converting to numeric values in order to assign values to discrete strings
  • Converting to numeric values in order to work with an algorithm that only accepts numeric values

There is no built-in shape to do this, but you can do so with a couple lines of code.

I can demonstrate by creating a new ML studio experiment and dragging the "Automobile Price Data" sample dataset onto the experiment design surface, as shown in Fig. 1.

MLRe01-AutomobilePriceData
Fig. 1

If we click on this shape and select "Visualize" (Fig. 2), we can see the data in the dataset. Click the "drive-wheels" column to see details about the data in that column (Fig. 3).

MLRe02DataSetMenu
Fig. 2

MLRe03VisualizeData-Before
Fig. 3

You can see from the visualization that the "drive-wheels" column contains 3 distinct values: "fwd", "rwd", "4wd"
Imagine I wanted to replace these with "FRONT", "REAR", and "FOUR", respectively. (Maybe to be consistent with a second dataset I plan to merge with this one.)

Drag an "Execute Python Script" shape to the  Experiment and connect its input to the output of the data shape (Fig. 4).

MLRe04-TwoShapes
Fig. 4

In the Properties of the "Execute Python Script" shape, replace the existing code with the following:

import pandas as pd
def azureml_main(dataframe1 = None):
    dataframe1['drive-wheels'] = dataframe1['drive-wheels'].map({'fwd': 'FRONT', 'rwd': 'REAR', '4wd': 'FOUR'})
    return dataframe1,
    

The azureml_main function is required by ML Studio. It accepts one parameter - a dataframe, which we name “dataframe1”

The first line of code maps the 3 existing drive-wheels values to 3 new values for every row and saves these 3 new values back to the dataset. By returning that dataframe, we make this updated data the output of this shape, so it can be used by later steps in our experiment.

After running this experiment, we can click the script shape and Visualize the output and see that each value in "drive-wheels" has been replaced, as shown in Fig 5.

MLRe05-VisualizeData-After
Fig. 5

This article shows a simple way to replace values in a dataframe column with new values in Azure ML Studio.


Many Machine Learning solutions have the same steps in common. For example, you will need to retrieve data from one or more sources; you will want to split your data into training and testing subsets; and you will want to clean up your source data. I refer to these as "plumbing tasks” because they are common to so many projects; and spending time coding these tasks takes time away from working on your data and your solution.

Azure Machine Learning Studio can help.

Azure Machine Learning Studio or "ML Studio" is a graphical design tool for building machine learning solutions. It includes a design surface and a set of shapes to perform specific tasks.

To work with ML Studio, drag a shape onto the design surface, set some properties, and connect the inputs and/or outputs to other shapes to build the workflow of your solution. For example, you can drag an "Import Data" shape onto a form and set information about the data source and data type. This is "plumbing" code that you do not have to write.

MLStudio-01

If a shape for a desired task does not exist, there are shapes that allow you to write custom code. Supported languages are Python and R.

When you finish building and testing your solution, buttons at the bottom allow you to configure and deploy a web service, so that your model is accessible via a simple API. There is even a test page, allowing you to call this API from within your browser.

You can get a free trial at https://studio.azureml.net/

There are limits to the free version. You cannot configure the size and number of instances on which it will run, and you are limited to 10 GB storage. If you cannot work within these restrictions, you can sign up for an Azure account and pay for the resources you use. Current pricing is available at this link.

MLStudio-02

If you are looking for a quick and simple way to build a machine learning solution, Azure Machine Learning Studio may be the tool for you.


I have been working with North American universities since joining Microsoft almost 5 years ago.

The school year is winding down for most colleges, so I'd like to talk about ways that Microsoft is helping university students in North America.

Azure for Students

This offering provides $100 Azure cloud computing credit free to any student. It is a good opportunity to learn about cloud computing and test the services in Azure. You can sign up with an EDU email address at http://aka.ms/Azure4Students. No credit card is required.

  • $100 credit for 1 year
  • Access to all of Azure
  • No credit card required

Microsoft Student Partner

Microsoft Student Partners (or MSPs) serve as Microsoft advocates on campus, providing workshops and information about Microsoft technology. In exchange, they receive education from Microsoft and (sometimes) a few prizes. It is a good way to increase the networking, education, and employability of a student. You can learn more at https://imagine.microsoft.com/msp

Student Ambassador

This program is similar to the MSP program, but it is run by the Microsoft Recruiting organization.

Student Hackathons

Student hackathons have become very popular the last few years. At a hackathon, students get together on campus and build hardware and software projects in teams. Many hackathons offer prizes for the best projects and students from other universities are often welcome. Microsoft has sponsored a great many hackathons over the years, offering money, prizes, Azure credits, hardware, and mentors to answer student questions. I have personally been involved in dozens of hackathons the last 3 years.

Imagine Cup

Imagine Cup is an international competition for teams of students who build amazing projects and want to turn them into a business. The top teams in each participating country are invited to the national finals for a chance to pitch their projects to a panel of judges, who select a few teams to advance to the International Finals. The top prize for this competition is $100,000 US and a mentoring session with Microsoft CEO Satya Nadella. You can learn more about Imagine Cup at https://imagine.microsoft.com/Compete

DataFests

Recently, I have been involved in a few DataFests. A DataFest is a competition on campus in which students are provided a set of data they have not yet seen; and asked to provide insights into the data. Students are free to use any tools they want and many present summaries, visualizations, and predictive analyses about the data. For the 3 DataFests in which I was involved (two at the University of Toronto and one at Duke University), Microsoft provided funds for food, free Azure credits, a workshop to show how to use MS's data science tools, and mentors to answer student questions.

Internships

Microsoft offers opportunities for university students to intern with the company. Most take place in Redmond in the summer. This is a great chance to work with a product team, learn new skills, and enhance your resume. These internships are very competitive, so students are encouraged to apply early in the school year. You can learn more and apply for internships at https://careers.microsoft.com/us/en/students-and-graduates

Academic CSE Team

This is the team for which I have been working this past year. We have coordinated and executed many of Microsoft's programs around university education. My responsibilities have included talking with professors, TAs, and students about how to incorporate Azure into their classes, meeting with MSP, and mentoring at hackathons and DataFests.

And So...

Microsoft is committed to helping students learn about software and computer science. The above list is some of the opportunities for students provided by Microsoft. Microsoft’s new fiscal year begins in a few weeks and there is not guarantee these programs will remain the same next year. In fact it’s likely there will be some changes.I don't know what programs will be offered going forward, but I expect a continuing strong commitment from my employer.



Freddy Cole at the Jazz ShowcaseFreddy Cole looked every bit of his 83 years as he was helped onto the stage last night at the Jazz Showcase in Chicago's Printer's Row.

Until he sat at the piano. At that point he was transformed. For an hour and a half, he showed a strength and grace that belied his 8 decades. His command of piano and vocals was a strong as a man half his age.

He launched from one song to the next, never taking a break to chat with the audience until the final few minutes.

Although Cole can claim 3 Grammy nominations, he will always be remembered as the younger brother of legendary singer Nat "King" Cole. But he does not shun that comparison, as his set included three of Nat's songs (Paper Moon, L-O-V-E, and A Blossom Fell) and he recently released an album of songs made famous by his brother. Close your eyes and the richness of Freddy's voice is reminiscent of his late brother's talents.

Cole stuck mostly to ballads, but pleased the local crowd near the end of his set with a rendition of Ray Price's swinging "On the South Side of Chicago", which brought an ovation from his hometown.

His piano and vocals were accompanied by drums, upright bass, and guitar. Of course, the attention was mostly on Cole, but his talented Adam Moezinia took many solos. Bassist Elias Bailey stayed in the background until the last few songs when he became more and more bold with his solos and complex playing.

Freddy and DavidIn the end, Freddy Cole closed the set with a song called "Goodbye", accepted a standing ovation, and was helped from the stage, again transformed into a fragile old man. Until the night's second set.


Day 2 of Microsoft's annual Build conference began with a keynote presentation hosted by Corporate Vice President Joe Belfiore. This was much shorter than the Day 1 keynote and focused on Microsoft 365. The presentation was split into the following "chapters":  

  • Windows  
  • Windows Developers  
  • Office Development  
  • Microsoft Graph

For me, the most interesting topic was Adaptive Cards - a technology that allows you to add functionality to Office Applications, Microsoft Teams, or SharePoint. Organizations can create Cards that access user and group data in Microsoft Graph and share data across applications.

Many of the features discussed in the keynote are available by joining the Insiders Program and using early releases of Windows and Office. Information on the Insiders Program is here.

You can watch the full keynote below or click this link.

Below are my raw notes as I watched.

Windows
    Timeline
    Apps save data to Graph (in cloud)
    Data available across devices
   
    Shipping in-box PC app
        Data from phone available on PC
        e.g., read and reply text from PC
        Sets (available in Windows insider build)
            Office / Graph / Web working together
           
   
Windows Developers
    Fluent Design System
    Decoupling parts of Windows to make it easier to add to apps
    UWP XAML Islands
        All Windows Application can access Fluent Design System
        No threading across processes
    Some controls designed for Win10
   
         Edge-based
        Available in WPF app
    Microsoft is using ML to improve products
        e.g., Grammar checking in Word
    Windows UI Library (WinUI)
        available via NuGet
    .NET Core 3 preview available later this year
    MSIX
        Application Containers
        Simpler deployment
    Android Emulator compatible with Hyper-V
    Notepad now supports Linux line feeds
    Change to MS Store revenue sharing
        Consumer apps: Increase dev revenue share to 85%
        95% if your campaign drives user to store (via web site or app)
   
Office Development
    Deployment
        Deploy custom functions to all users in your organization
        Deployment centralized
    Adaptive cards
        Post / update GitHub comments and issues from Outlook
        Payments from Outlook email message
        Build Your own cards at adaptivecard.io
    Customization to MS Teams
        Tab Extension
        Same as SharePoint extension
     Sample app: Click in teams to launch PowerBI report
    Build Adaptive Card for MS Teams
    MS Store has "Teams" section
        
Microsoft Graph
    Microsoft Graph Powers Microsoft 365
     Users sign into app with Microsoft Graph identity
    Get user data across apps: Provide personalized experience
    Extend Graph group or user schema: Add new properties
    Microsoft Graph UWP Controls available today
        Open Source
        https://aka.ms/windowstoolkit


Microsoft held its annual Build conference this week in Seattle. Years ago, these large developer conferences were a chance for Microsoft to reveal everything they had been working on for the past year. In recent years, the company has been much more open, allowing users and customers to see products as they develop. But that did not mean that Microsoft did not have some big announcements this year.

The Day 1 keynote was hosted by CEO Satya Nadella and CVP Scott Guthrie and focused on developer tools and cloud computing. Microsoft Azure, Microsoft 365, and the Visual Studio ecosystem took center stage.

For me, the most interesting announcements were Azure Dev Spaces, Azure Cognitive Search, Azure Databricks, Kubernetes as a Service, and DevOps Projects.

Of course, the most exciting part came 3 minutes into the keynote, when they announced that the 2 youngest Build attendees were the 10- and 12-year-old daughters of my friends Tibi and Nicoleta!

You can watch the full keynote below or click this link.

Below are the notes I took during the keynote.


3 core pillars
     Privacy
        Privacy is a Human right
     Platforms
         Azure
        Microsoft 365

Key Technologies
    Ubiquitous computing
        Distributed, event-driven, and serverless
         Azure:
            50+ regions
            70+ certifications
            Open Sourcing Azure IoT Edge
    Artificial Intelligence
        Project Kinect for Azure
            Ultra-wide field of view
   
    Multi-Device, Multi-Sense experience
         near field, far field
        mixed reality
        Microsoft 365
        Cortana
        Cortana + Alexa integration
       
Microsoft Remote Assist
    Video calling
    Image sharing
     Mixed reality
    Integration with MS Teams
Microsoft Layout
     Share and edit designs in real time
    Mixed Reality
   
Accessibility

Azure areas
    Dev Tools + DevOps
    Containers + Serverless
    Internet of Things
    Data
    Artificial Intelligence
   
Dev Tools + DevOps
    Visual Studio Live Share
         Works across PC and Mac
        Works across VS and VS Code
        Watch co-workers code, keyboard, mouse, and debugging context
        Work independently or together
        Secure connection
        Free!
    Open Source
        Microsoft is the single largest contributor to GitHub
        Launching today: Text API (Linting and Code analysis)
        App Center + GitHub integration
            Continuous integration app from within GitHub
            Testing on physical mobile devices hosted in Azure
    DevOps
        Branch from Kanban board tasks.
        Azure Portal: DevOps Projects
            CI/CD pipeline
             Integrated with VSTS project
            Deploy to App Services or Kubernetes
            Any language or platform

Containers + Serverless
    Kubernetes as a Service
        View health of each container
        Logging available
            Query, show charts
    Azure Dev Spaces
        Run and debug in a private space in Azure
    Azure Event Grid
        Serverless composition
        Workflow executed
       
Internet of Things
    IoT Edge
    VS Code project consisting of containers
    Containers running on local device
    Azure Function running on local device

Data
    Cosmos DB
        New pricing options
        Global Scale
        Multi-Master Write Support (much faster writes: trillions of reads & writes per second)
        Reduced Write Conflicts
        Graphical interface in Azure Portal: Deploy data globally

Artificial Intelligence
    Azure Cognitive Search
        Index and analyze data in Azure
    Azure Databricks
         Spark-based analytics


$image[5][6].png

IMG_0442We stood in San Francisco's Creativity Museum, waiting for the announcement of the top six teams at the Imagine Cup US Finals. Twelve teams from universities across the country had qualified for the US Finals, earning a trip to California and a chance to pitch and demonstrate their software, hardware, and business ideas to a panel of judges. Coding, planning, pitching, and judging were complete on this warm California evening and all that remained was the award announcements. The top six teams would win cash prizes up to $10,000 and a chance to compete in the International Imagine Cup Finals held in Redmond, WA in July.

IMG_0425One by one, the finalists heard their names called and were called to the stage to accept their awards. The winners jumped with joy and hugged one another when they were called. It was a reward for months of planning and hard work.

IMG_0434I was able to be a part of this event for the first time this year, serving on the selection committee, advising as a team mentor, and assisting the judges during and after the presentations. I was impressed by the projects, which showed remarkable creativity; I was impressed by the presentations, which were far more polished than anything I could have done at their age; I was impressed by the judges and their commitment doing to a thorough evaluation and providing constructive feedback; and I was impressed by the team that pulled together this amazing event, involving hundreds of students, professors, mentors, judges, contractors, and volunteers.

IMG_0424Students elected to solve real world problems, including

  • Using cameras and artificial intelligence to assist wheelchair-bound people;
  • A drone that captures and analyzes images to detect potential forest fires;
  • A HoloLens app to assist with remote, real-time training;
  • Using Facial Recognition AI to reunite separated refugee families

IMG_0444Every student with whom I spoke told me that Imagine Cup was a great experience and I have to agree. I am looking forward to the Canadian Imagine Cup Finals in Vancouver, BC later this month!

 

IMG_0422

IMG_0423


IMG_0394The DataFest concept was created back in 2011 by the American Statistical Association. Students are provided a large data set and are given 2 full days to report on some useful insights and/or visualizations about the data.

IMG_0388I attended the ASA DataFest at the University of Toronto May 1-2. The event was organized by UT Professor Nathan Taback, who served as host.

The students – all from U of T - worked in teams of 2-4 and presented their findings on the evening of the second day. This was a judged competition with prizes for the top 4 teams.

Students had no knowledge of the data set before it was made available to them when they showed up at the venue. Data was provided by the Indeed job search engine and included information on job postings in the United States, Canada, and Germany.

IMG_0406 Following Dr. Taback's opening remarks, I delivered a presentation on Data Science tools in Azure, including demos of Machine Learning Studio and Azure Notebooks. Over half the teams ended up using these tools in their analysis.

IMG_0407In addition to the opening ceremonies, I served as a mentor during the DataFest and a judge at the end. Several professors and students donated their time as mentors during the event and judges included professors and industry professionals. I also recruited local MVPs Atley Hunter and Vivek Patel, along with user group leader Ashraf Ghonaim to serve as mentors and/or judges.

Almost 200 students attended, and 19 teams presented their findings on Day 2.

IMG_0414The winning team used Azure ML Studio to split users into low, medium, and high salary ranges and determine the factors required to move from one level to the next level above.

Microsoft donated prizes and money for food to the event (along with my time) and Azure credits for the students to use.



April 2018 Gratitudes

Comments [0]

5/6
Today I am grateful for:
-My first time attending and mentoring at an Imagine Cup Finals event
-A post-event party at the Creativity Museum in San Francisco last night

5/5
Today I am grateful to meet new people in far-away cities.

5/4
Today I am grateful to play ping pong for the first time in years.

5/3
Today I am grateful for a successful DataFest at the University of Toronto and that I was asked to present the awards at the end.

5/2
Today I am grateful for all the students who signed up for an Azure account after my presentation yesterday.

5/1
Today I am grateful for nice weather in Ontario yesterday.

4/30
Today I am grateful to make it safely to Waterloo, ON yesterday.

4/29
Today I am grateful for a visit to the Field Museum yesterday with Jeff and Lynn.

4/28
Today I am grateful to spend the week working with smart engineers to build a cool app for the Seattle Storm WNBA team.

4/27
Today I am grateful to see Infinity War last night.

4/26
Today I am grateful for a team dinner last night at the Hard Rock Café.

4/25
Today I am grateful for a visit to the Museum of Pop Culture last night in Seattle.

4/24
Today I am grateful to those who had a kind word for me yesterday when I was feeling down.

4/23
Today I am grateful for my new computer

4/22
Today I am grateful to Michael and his team for 10 years of hard work to host a consistently excellent Kalamazoo X conference.

4/21
Today I am grateful to wake up to this view.
Image may contain: sky, cloud, skyscraper, tree and outdoor

4/20
Today I am grateful to deliver my final lecture of the UIUC academic year.

4/19
Today I am grateful to attend an OpenHack event in the Willis Tower and learn about IoT.

4/18
Today I am grateful for a Polsky Center mentor reception at The Kitchen in River North last night.

4/17
Today I am grateful to finish my taxes on time.

4/16
Today I am grateful to work from home on a bad weather day.

4/15
Today I am grateful for:
-My first visit to the Museum of Broadcast Communications and the SNL exhibit
-An excellent concert by the Average White Band last night in Hyde Park

4/13
Today I am grateful to return home safely after a week on the road.

4/12
Today I am grateful to see a Clippers - Lakers game at the Staples Center last night.

4/11
Today I am grateful for my first visit to the University of Southern California yesterday.

4/10
Today I am grateful for my first Azure University Tour stop in Austin, TX.

4/9
Today I am grateful for dinner and a Durham Bulls game yesterday with Christine and Cosby last night.

4/8
Today I am grateful for
-an exciting overtime Hurricanes-Lightning hockey game last night
-my first time at PNC Arena.

4/7
Today I am grateful for my first visit to Durham, NC.

4/6
Today I am grateful for my first bike ride of the year.

4/5
Today I am grateful I was able to find some badly-needed Advil in my unpacked boxes yesterday morning.

4/4
Today I am grateful for Superdawg with Tim last night

4/3
Today I am grateful for:
-Lunch with Jimmy yesterday
-Attending the NCAA Men's Basketball Final Four last night

4/2
Today I am grateful for Yelp, which helps me find a good meal in an unfamiliar city.


A Spell For ChameleonEveryone in Xanth has a magical power. Everyone except Bink.

Some of Xanth's citizens are accomplished wizards, while others can do simple tricks like make a spot appear on a wall. But, Xanthian law states that if you reach the age of 25 without showing evidence of some magical ability, you are forced to leave to the non-magical land of Mundane.

Bink is 25 and is banished to Mundane.

In Mundane, he meets the evil wizard Trent, who was banished decades before for trying to usurp the throne of Xanth. He then meets Fanchon, an intelligent ugly woman, who fled Xanth for reasons of her own. The three travel together, encounter adventures, overcome dangerous magical creatures and plants, collaborate, and fight. Bink wrestles with moral questions, such as: What does it mean to be an Evil Wizard; and is it ok to be attracted to females of another species if she has big breasts; and do I prefer dumb pretty women or smart ugly women or something in between or a variety?

A Spell for Chameleon was so popular that author Piers Anthony decided to convert his planned trilogy into an ongoing series that now extends

Anthony creates an imaginative world, filled with wonders and dangers and his characters are relatable, even if he spends a bit too much time explaining their motivations, rather than letting the reader discover these themselves.

Anthony also brings a lot of puns and other wordplay into his narrative, which can be entertaining.

The book is a fable with a couple morals - everyone is special and worthwhile in their own way, even if it is not obvious to others; and evil is defined by those in power, rather than by absolute laws. The messages are a bit heavy-handed, but they mostly work.

However, I found parts of the story to be troubling.

Anthony comes across as sexist, giving undue attention to the physical appearance of females. Also, Bink participates in a rape trial and the conclusions (the judge's remarks and Bink's opinions) made me more than a little uncomfortable.

A Spell for Chameleon reads like a children's book, but there is too much sex for it to be appropriate to children. Still, it had enough creativity to hold my attention.



WrinkleInTimeIt is a strange experience to read a book twice with a gap of nearly 50 years between.

I think I was in fourth grade when I first read A Wrinkle in Time by Madeleine L'Engle. This week, I read it again.

I enjoyed this book as a boy, but I didn't remember many of its details. I didn't recall the book's ending, but I recalled the characters and a few scenes here and there. This re-read was like visiting an old friend. I would read a passage and remember its effect on 9-year-old me. I believe this was the first time I heard the idea of more than 3 dimensions in the Universe and that one could consider time as a fourth dimension.

"A Wrinkle in Time" is the story of the Murray family. Mom and Dad are brilliant scientists and their four children are all brilliant, but some have quirks. Meg is an outsider, who struggles to fit in at school. And Charles Wallace is a 5-year-old with the mind of an adult, even though the rest of the town believes him to be mentally handicapped because he seldom speaks in public.

Meg and Charles - along with their new friend Calvin - set out to find their father, who has been missing since he set out on a secret government mission years ago. They are assisted by 3 mysterious ancient women. Their journey takes them across time, space, and dimensions, where they encounter other sentient races and an evil force determined to conquer the universe.

It is an adventure and a morality play, involving a galactic struggle of Good versus Evil. It's a delightful story with a good characters and imaginative worlds.

The ending is a bit rushed, but the journey is very rewarding.

It was a rewarding adventure for me to read this book twice with a gap of almost 5 decades between. I look forward to reading it again in another 50 years.



GardensOfTheMoonGardens of the Moon by Steven Erikson is the first book in his 10-volume "Malazan Book of the Fallen" series. It takes place on the continent of Genabackis, where the Malazan empire holds power through force and where men and gods and magicians and dragons and various sentient races exist together - often in violent battle with one another. This first book follows many characters and plotlines, taking the reader through the battle for the continent.

I'm unsure exactly why Gardens of the Moon failed to hold my attention. It's a decent story and some of the characters are quite good (especially Anomander Rake, the giant ancient warrior wizard king). I liked when two storylines would finally converge as their characters crossed paths. And Erikson does a decent job of building an imaginative world filled with its own rules and politics and even a fortress that floats in the sky.

But I found the plethora of characters to be confusing. I found the non-linear storytelling confusing. I found the constant death and resurrection of characters and the multiple names of characters to be confusing.

I frequently found my mind wandering away from the story. More than a few times, I had to re-read a chapter to understand it. And I would often completely forget a character shortly after he disappeared from a story, so that I was confused by his appearance in a later chapter.

Complexity is fine if I am committed to reading (or re-reading) an entire series. But I was unfamiliar with this series before I picked up Volume One and Erikson did nothing to draw me in and encourage me to complete the journey.

I know that many people love this book and I wonder if it is more enjoyable in the context of the entire 10-volume series.

I don't think I will find out.


Forgiveness

Comments [1]

The last few years, I've been thinking a lot about forgiveness.

By far, the biggest things that keep me awake at night are the pain of wrongs inflicted on me and regret for the wrongs I've done to others. I have consciously tried to address both.

Requesting Forgiveness

A few years ago, I made a list of people to whom I felt I owed an apology. These are people I treated thoughtlessly; or I made a joke at their expense or at the expense of someone close to them.

Years had passed (in some cases decades) since I committed these transgressions. But I sought out every person on this list and I apologized to his or her face. One by one, I pulled them aside and told them exactly what I did wrong and I offered my apology. I made no excuses and I waited for them to accept my apology. Some told me it was unnecessary; some told me how much I had hurt them. I think all were surprised that I did it. But every one of them remembered the events I addressed and every one of them accepted my apology.

I completed this list about a year ago and I have slept better since then.

Here are my rules for effective apology.

Be specific. Rather than saying "I'm sorry for anything wrong I may have done", say something like "I was very insensitive to your feelings and I am sorry for that."

Be sincere. Don't apologize unless you mean it. People sense insincerity and will react accordingly.

Accept responsibility. Don't say "I'm sorry if you're mad." Say "I'm sorry for what I did" or "I'm sorry for hurting you"

Don't make excuses. There may be reasons why you behaved the way you did, but an apology is not a time to explain or justify your behavior. If they ask why you did what you did, then go ahead and answer. But generally, this is a separate issue from your wrongdoing and should not affect your apology. Qualifying an apology dilutes its sincerity.

Ask if they accept your apology. It doesn't work unless it is both offered and accepted. It might take them time to accept it; but at least you have started the process. I was lucky that all my apologies were accepted, but I was prepared for the possibility they might need time to think about it or might reject it completely. That is their choice.

Forgiving Others

During this same period, I listed the people who had wronged me; and, one at a time, I consciously and deliberately forgave them. I did not approach them in person; this was a personal thing for me. None of these people ever offered me a sincere apology or even acknowledged their wrongdoing. I suspect nearly all of them have forgotten what they did. Most of them probably did not even know the pain they caused. Some may be embarrassed by their actions and are hopeful that I have forgotten. But it was important for me to offer forgiveness. I was only harming myself by hanging onto my anger.

I don’t have to offer forgiveness to everyone. There are some bad people in the world and those people I try to exclude from my life and move on. The ones I target are good people who happened to do something unkind to me. Those are the ones that stay in my mind.

I have found both giving and receiving forgiveness to be liberating. A weight was lifted from me - almost in a physical sense - when I began and advanced this journey.

Lessons Learned

This process has taught me a few things.

Most emotional pain is not caused via deliberate malice; most is caused by thoughtlessness and self-absorption. Most of us are completely unaware of the damage we cause others through an unkind word or action. What seems trivial to us can leave scars in others.

Apologies are not easy - especially sincere ones; But, if done right, they help both the giver and the receiver.

Forgiveness is even harder than apologizing. At least, it is for me. Especially forgiving those who never ask for it. I'm not done forgiving. There are some people I want to forgive that I have not yet been able to, which troubles me. I'm working on this.

And finally, the hardest person I've found to forgive is myself. I've lost a lot of sleep over the years dwelling on regrets. But the process I've described here has helped.


CrystalCaveThe Crystal Cave by Mary Stewart tells the story of Merlin, the legendary wizard and advisor to the legendary King Arthur.

Unlike most books on this topic, this is the story of young Merlin - the bastard son of a Welsh princess, who discovers he has visions that predict the future or reveal events happening far away.

The Merlin of The Crystal Cave is more human than the one we encounter in most Arthurian stories. Here, Merlin has no powers other than his vision, a keen mind, and a solid education. But he uses these powers to become advisor to kings and to influence the coming of Arthur.

This book is a coming of age story in which young Merlin meets his first mentor, discovers his birth father, and searches for his place in the world. It is set against the backdrop of fifth century England, after the departure of the Romans and before the unification of Britain under a single king. As such, it is also an adventure story. And Stewart tells the adventure well, expertly building the character of Merlin and those he encounters.

Mary Stewart originally won fame as a writer of romance novels; but this departure from her familiar genre was a great success. The Crystal Cave offers a fresh take on an old story. I enjoyed it enough that I plan to read the sequels in this series.



AWBThe Average White Band are anything but average.

45 years ago, a group friends in Dundee, Scotland got together to play funky music, then moved to America to launch a recording career.

Saturday night at the Promontory in Hyde Park, two of those original Scottish band members - Alan Gorrie and Onnie McIntyre - joined with 5 newer band members to prove they still have the magic that launched an international career decades ago.

AWB-83 I attended the second of their two sets, where they played a few ballads mixed in with their signature funk. Vocalist Brent Carter, formerly of Tower of Power, showed impressive range for the band and tenor saxophonist Fred Vigdor led the 2-person horn section. They were helped along by alto saxophonist Cliff Lyons, drummer Rocky Bryant, and keyboardist Rob Aries. But it was Gorrie who led the way with excellent bass playing, backing vocals, and a charming persona for the audience.

They played many of their hits, such as "Cut the Cake", "Work to Do", and "Oh Maceo". The room was full and the level of energy rose as as the show went on. The band returned to the stage for a single encore - their only US #1 single "Pick Up the Pieces".

By the end of the evening, most of the audience was on their feet, including yours truly. It was a show I wish could have continued for longer into the night. Despite their name, Average White Band was exceptional. I find myself playing AWB and other funk bands as I write this on Sunday evening.


More photos



ConsiderPhlebasBora Horza Gobuchul (aka "Horza") is a Changer - a shape-shifter, able to alter his appearance to look exactly like anyone else. He is also a mercenary working for the Indiran galactic empire.

"Consider Phlebas" begins with Horza imprisoned, tortured, and condemned to death by the Culture - a rival galactic Empire at war with the Idirans.

Horza is rescued by the Idirans and given a mission to travel to the planet Schar's World and capture a "Mind" - an advanced artificial intelligence designed by the Culture.

Along the way, he is attacked, ejected into space, rescued by space pirates, captured again, escapes, captures a spaceship, nearly arrested, and he meets other beings who follow him or subvert his mission or fall in love with him or try to eat him. Yes, it's a lot.

On Horza's journey, we encounter bizarre - sometimes hedonistic - societies. He is captured by a cult that worships a morbidly obese creature who eats people alive; and a card game in which the ultra-rich use the lives of poor people as the stakes in the game.

At times, the story seems disconnected as the players jump out of one predicament and into another.

The book's basic formula is a familiar one - a space opera set in the far future in which a lone mercenary takes on the might of an Empire. But there is plenty of action to keep the reader engaged. And plenty of dciverse characters to make the journey interesting.

But Banks does a good job of expressing the moral ambiguity of the universe - both in the main characters and in the two sides of the galactic war.

"Consider Phlebas" is the first of a 10-volume series. It was not enough to convince me to read the remaining 9 novels immediately. But it was good enough that I will consider returning to the series in the future.


March 2018 Gratitudes

Comments [0]

4/1
Today I am grateful for a walk around the Alamo yesterday with Nick and Adriana.

3/31
Today I am grateful for:
-My first time attending a home Texas Rangers game at Globe Life Park in Arlington
-Lunch with Nik yesterday in Austin

3/30
Today I am grateful for:
-Coffee with Chander yesterday
-My first course lecture at the University of Texas

3/29
Today I am grateful for my first iPhone.

3/28
Today I am grateful for a busy day yesterday at the University of Illinois in Champaign.

3/27
Today I am grateful for a new pair of gym shoes from Tim

3/26
Today I am grateful I finally got my wireless Internet access set up in my new home.

3/25
Today I am grateful to deliver a keynote at the Global Integration Boot Camp yesterday.

3/24
Today I am grateful to return to Michigan for a couple days.

3/23
Today I am grateful to teach at Michigan State University for the first time.

3/22
Today I am grateful to return to #MIGANG last night.

3/21
Today I am grateful for a visit from Nick; and to spend time with him and Tim.

3/20
Today I am grateful for dinner with Nick and Tim last night.

3/19
Today I am grateful to live in a building with a good gym.

3/18
Today I am grateful to go to the movies last night for the first time this year.

3/17
Today I am grateful to spend this past week focused primarily on learning.

3/16
Today I am grateful for dinner with Becky last night.

3/15
Today I am grateful for my family.

3/14
Today I am grateful to write and deploy my first HoloLens app yesterday.

3/13
Today I am grateful to write my first Unity app yesterday.

3/12
Today I am grateful for dinner with Kent last night in downtown Seattle.

3/11
Today I am grateful to see C.J. Chenier in concert last night.

3/10
Today I am grateful to Christine for answering my questions yesterday.

3/9
Today I am grateful I had a chance to attend the Microsoft MVP Global Summit this week for the first time in years.

3/8
Today I am grateful
-to teach at the University of Washington yesterday for the first time ever;
-for an invitation to the MVP Summit attendee party
-to attend a MetaConference of community organizers

3/7
Today I am grateful for
-Dinner at Lot#3, courtesy of Sam and Ed
-The famous chezneward party at Ted and Charlotte's house

3/6
Today I am grateful to see so many old friends last night.

3/5
Today I am grateful for a week in Ontario.


Ready_Player_OneThe world of 2044 kind of sucks.

Energy sources are depleted; cities are so overcrowded that people live in trailers stacked on top of other trailers; the economy is collapsing; and the police and media are controlled by a giant, evil corporation.

It's even tougher on Wade, an awkward teenage orphan living in a trailer stack in Oklahoma City. Wade, like most people in 2045, escapes harsh reality by spending most of his time in the Oasis - a virtual reality world with its own social structure and economy, created by the computer genius James Halliday. In the Oasis, Wade assumes the identity of Parzival and leaves his real-world problems behind.

When Halliday dies, his will promises his entire fortune (hundreds of billions of dollars) to the first person who can solve an elaborate scavenger hunt with clues left in the Oasis. Wade/Parzival devotes himself to finding the keys, gates, and egg in order to win the game. With so much at stake, just about everyone on Earth does the same. Including the evil multinational corporation IOI, which will stop at nothing to win.

Along his quest, Parzival is joined by friends that he knows only through their online Avatars.

Many of the game's clues are references to the pop-culture of the 1970s and 1980s that Halliday loved. As a result, the book is filled with references to books, video games, comics and movies from that era.

If you like non-stop action, you will enjoy this book. If you like, heavy-handed social commentary (unchecked greed is bad), you will like this book. If you like pop culture and nerd culture you will like this book. I got a kick out of knowing the relevant lyrics to a song before Parzival noted them as a clue to finding a key; or recognizing a Monty Python reference in the dialogue.

Ready Player One isn't perfect. Sometimes the list of nostalgia reads like product placement, rather than an attempt to build the culture or advance the story.

The book calls attention to social problems that exist today and, if left unchecked, may result in the dystopian future described therein. But it ignores the fact that the Oasis - a seeming Utopia created by the benevolent and altruistic Halliday - does nothing to address these problems. If anything, it makes the world worse by convincing everyone to spend their time in the virtual world, rather than working on re-building the real one. Halliday's contest intensifies this imbalance, leaving one to wonder if anyone is spending any time repairing roads, providing medical care, or extinguishing fires.

But, if you ignore this glaring weakness, the novel is great fun. Especially if you were a young nerd in the 1980s.


MemoryIn Mirror Dance, Lord Miles Vorkosigan was killed (or nearly-killed) in battle; then revived through the cryogenic technology of the future universe in which he lives.

Memory – the next novel chronologically in the Vorkosigan series - opens with the consequences of that resurrection. During a rescue operation, Miles has a seizure – a side effect of his revival treatments - which results in a serious injury to the target of his rescue. Miles increases his problems by lying about the incident in his report to his superior - Simon Illyan, which results in his discharge from both the Barryaran military and the mercenary band he led covertly under his Admiral Naismith alias.

Shortly afterward, Illyan suffers a mental breakdown and Miles suspects treachery. Miles has lost his military standing but gains an appointment from the Emperor to investigate.

Then, the detective story begins.

This is one of Bujold's stronger Vorkosigan novels.

It is a transition novel for Miles, the protagonist of this series, as he copes with the shattering of his dreams and transitions into post-military life. By doing so, Bujold sets up the characters to proceed in a new direction in this and future novels.

Bujold is masterful in her description of Miles's feelings after losing his lifelong dream of being a military leader. She excels also in her description of Illyan dealing with a similar forced transformation.

She explores themes of loyalty and duty in the face of weakness. Miles's relationship with those around him is complex - he is headstrong and often clashes with authority and with those who have injured him. But he grants respect even to those with whom he clashes. And his relationship with Illyan is especially well done.

And she introduces a subplot with the Emperor seeking a bride to be his Empress.

Memory is mostly a detective story. But the human elements and the evolution of familiar characters make it much more than this.


If you are interested in learning how to use the Cognitive Services APIs, I have created a set of exercises designed to take you through the basics of calling these services.

Lab 1 focuses on the Emotion API.

These exercises are open source and available here.

I have already used these materials at two university workshops this year.

You are free to use them – either for your own education or if you are hosting a workshop. I would appreciate any feedback you have. If you are very ambitious, you may do a pull request.


20180310_211841Although he was born and raised in Port Arthur, TX and raised on his father's Louisiana music, CJ Chenier has strong connections to Chicago. He recorded 3 albums for Chicago-based Alligator Records and he is a frequent performer at Fitzgerald's Night Club in the Chicago suburb of Berwyn.

It was in Berwyn that I saw CJ last night. The tickets were a birthday gift and one of the best I've received in a long time. Chenier played for hours, bringing the high energy I had come to know from his recordings, but had never seen in concert.

He was accompanied by drums, bass, an excellent guitarist, and someone playing the vest frottoir - a tin washboard that hangs from the chest, that was invented by CJ's legendary father Clifton and his uncle Cleveland.

The frottoir added some texture to the music; but it added more to the visuals of the concert, given its wearer's high energy dancing and playing.

CJ, of course, sang and played his signature accordion. His music kept the packed club bouncing all night. The high point came when he and 3 members of his band unplugged and wound their way through the crowd for an extended jam.

20180310_22073120180310_220734
CJ photobombs DG's selfie!

He continues the Zydeco tradition of his father's band (Clifton passed away in 1987), but CJ adds a funky sound all his own. The result kept the audience energized throughout the show.

If you are reading this and wondering what to get me on my birthday next year, check the local concert calendar around March 1. Be warned: It will have to be pretty darn good to top this one.


HitRefreshSatya Nadella became the third CEO of Microsoft in 2014 - a few months after I joined the company. There is no denying the impact he has had on Microsoft and on the tech industry since rising to CEO. He has changed the corporate culture significantly. Microsoft is more open and more agile today than it was 4 years ago.

In Hit Refresh, Nadella describes what he planned to do as leader of Microsoft, what has happened during his tenure as CEO, and his plans for the future of the company.

He begins with a short description of his life - growing up in India, moving around, his growing fascination with computers; he follows with a description of his early years at Microsoft, rising first to lead the cloud computing team; then to CEO.

But only a small part of this book is devoted to an autobiography. Mostly, this is a biography of Microsoft - the company where Nadella has spent nearly all of his adult life - and of the tech industry.

Nadella describes his vision for the future of Microsoft. He talks about its technology future (he sees AI and Mixed Reality as technologies poised to grow); about its business environment (Microsoft often partners with competitors when it makes sense for both parties), and about its ethical decisions (he discusses the importance of privacy to a global company and when it is time to fight for it).

Not all that Nadella writes is self-congratulatory. He talks about mistakes the company has made, such as the ill-fated Nokia acquisition; and mistakes he has personally made, as when he gave a poor answer to a question about women seeking equal consideration for a promotion.

This book had special meaning to me, as Satya and I work for the same company (He is my boss's boss's boss's boss's boss's boss) and share some of the same goals for that company. The copy I read was the "Employee Edition", which highlighted some of the text and included some notes in the margin to emphasize how a paragraph was particularly relevant to a Microsoft employee.

Although Hit Refresh provides some answers, it raises even more questions about the future of Microsoft and the global tech industry. We are in a period of great transition and Nadella does not pretend to have all the answers. But his message is clear: Microsoft and its employees must embrace a growth mindset in order to achieve the goal of empowering everyone to achieve more.


ShadowOfTheTorturerI finished this 4-volume set a couple weeks ago.

Since that time, I've been thinking about it and reading about it and I even listened to a podcast that analyzed each chapter of book 1.

The story takes place a million years in Earth's future. The sun is dying.

The Earth - now called "Urth" - has resorted to a medieval society, but it still retains remnants of its forgotten technology. For example, man no longer can travel between the stars, but old spaceships are repurposed as buildings and alien life forms exist on Urth.

Severian is an apprentice to the Torturers Guild, which is charged with carrying out punishment and interrogations ordered by the state. Early in volume 1, the Guild exiles Severian for the crime of showing mercy to one of the their prisoners.

This sets Severian on a long quest across Urth, to discover himself and his purpose in the world. He reveals early in his narrative that he ultimately becomes emperor of the planet.

Many of his companions meet tragic ends; but Severian ventures on.

I'm unclear if magic exists in this world or if technological advances of the previous millennia are indistinguishable from magic.
For example, Severian possesses a stone - The Claw of the Conciliator - that appears to have the power to raise the dead. But it's unclear of the risen dead were only in a long state of suspended animation and the stone has some healing attributes that won't be discovered for millennia after our time.

The story is narrated by Severian himself and, although he claims to have a perfect memory, we see enough evidence to the contrary that we begin to distrust his version of the events he relates.

Almost without exception, those who love The Book of the New Sun have read it multiple times. People who disliked the book found it confusing. And that is understandable, because it is confusing. The plot is complex and the action shifts quickly; questions arise and are not answered for hundreds of pages - sometimes without reference to the original question and sometimes not at all; many characters enter and exit the narrative and they may or may not re-appear much later in the story.

I think the tetralogy requires multiple readings to discover the nuances and symbolism of the story. I have only read it once, but I may return in a couple of years. At that time, I will also likely revisit this review.


February 2018 Gratitudes

Comments [0]

3/4
Today I am grateful I was able to answer most of the students' Python and Machine Learning questions yesterday - topics on which I am still learning.

3/3
Today I am grateful to participate in Mentor Night at the University of Toronto DSCIL last night.

3/2
Today I am grateful for all the birthday wishes yesterday.

3/1
Today I am grateful for 2 days in Waterloo, ON.

2/28
Today I am grateful for an upgraded hotel room.

2/27
Today I am grateful to be interviewed yesterday by Matthew D. Groves for his excellent podcast.

2/26
Today I am grateful to spend a weekend with my old team - just like old times!

2/25
Today I am grateful to start recording interviews again after a long break.

2/24
Today I am grateful for a private demo in the UIUC VR lab yesterday.

2/23
Today I am grateful to spend a day and an excellent dinner with colleagues.

2/22
Today I am grateful to meet a lot of Microsoft folks at UIUC yesterday - many of whom I only knew via email and Skype.

2/21
Today I am grateful for the hospitality and generosity of Sharon and Greg and their family, who allowed me to stay with them this week in California.

2/20
Today I am grateful for:
-Breakfast with Uncle Bill and Aunt Jean
-Lunch with my cousins Sharon, Gail, and John
-A climb up Mount Tamalpais

2/19
Today I am grateful to attend my first #TreeHacks this weekend.

2/18
Today I am grateful for coffee with Sara last night.

2/17
Today I am grateful for my first visit to Palo Alto and Stanford.

2/16
Today I am grateful to see the Sharks-Canucks game last night - my first visit to the SAP Center.

2/15
Today I am grateful for 10 days between trips, so I had time to move and unpack most of my belongings.

2/14
Today I am grateful to cook last night for the first time in a long time. (The pot roast with marinated vegetables turned out great.)

2/13
Today I am grateful for:
-Help from Benjamin with my CSS questions
-Seeing Steve Earle in concert last night

2/12
Today I am grateful to see JD Souther in concert last night.

2/11
Today I am grateful to attend a Microsoft party at the Museum of Science and Industry last night.

2/10
Today I am grateful for 2 years in my last apartment and all the good memories I carry from that place.

2/9
Today I am grateful to see the play "Blind Date" at the Goodman Theatre last night - my first time at the Goodman in about 10 years!

2/8
Today I am grateful to move all my physical possessions to my new home yesterday.

2/7
Today I am grateful for Tim's help last night.

2/6
Today I am grateful for a weekend in Ontario.

2/5
Today I am grateful to Atley and all the MSPs who helped with our #QHacks mentorship this weekend.


The-Wishsong-of-ShannaraI don't think I am the target audience for the writings of Terry Brooks.

The plot lines and characters of his Shannara stories are borrowed almost whole from JRR Tolkien's Lord of the Rings and The Hobbit.

There are elves and dwarves and men living in Brooks's world; and there are magical talismans with the power to seduce those who possess them and to identify the possessor to the dark lords who covet them; and there are quests to save the world from evil, powerful sorcerer and his army of demonic beings; and there are at least 2 creatures who talk like Gollum.

In "The Wishsong of Shannara" - the third and final book of "The Shannara Trilogy", Brin and Jair - children of the hero of "The Elfstones of Shannara" and grandchildren of the hero of "The Sword of Shannara" - travel across the Four Lands to destroy an evil book. They armed with the power of the Wishsong - the ability to generate magic and illusion with their voice; and are joined by allies of other races.

I think Brooks's books are aimed at teens and young adults who have not yet experienced Tolkien and maybe aren't ready for something as heavy as Middle Earth. Brooks is not nearly as good a writer as writer as Tolkien (who is?); but his narrative is simpler and more straightforward, making it accessible to those who are new to high fantasy. It's a good gateway into this genre.

I enjoyed this trilogy enough to complete it, but not enough to read any more books that Brooks has set in this universe. This is a good introduction to high fantasy for those who want something light and easy to read. If you are already a fan of the genre and have read some of its masters, you are likely be disappointed.


Steve Earle has been writing and recording songs for over 4 decades. On Monday night, he brought those songs to the City Winery in Chicago's Fulton River district.

This was my second night in a row at the City Winery as I saw JD Souther the night before. Earle and Souther share a Texas upbringing and a talent for writing great music.

Steve Earle is as much a storyteller as he is a songwriter. Listening to his music you can hear the influences of his old friends Guy Clark and Townes Van Zandt. Between songs, Earle would talk about his life and his music and his romantic streak and his many failed marriages. He expressed a strong wit - in both his lyrics and his banter.

Every song was a joy to listen to as he moved effortlessly from blues to country to Irish folk songs. It was just him and his guitar or mandolin (and sometimes harmonica) but that was enough. A packed theater appreciated all he brought.

Now in his 60s, Earle continues to make music and to tour constantly.

And to make audiences happy.


JD Souther wrote the soundtrack to my youth. His songs were recorded by many of my favourite artists, including Bonnie Raitt, the Eagles, and Linda Ronstadt.

Sunday night at the City Winery I had a chance to return to those days when legendary songwriter performed. For over 2 hours, Souther sang songs he wrote and (mostly) others made famous. His tenor voice still sounds great and was accompanied only by himself playing acoustic guitar or baby grand piano.

He is mostly known for the songs he wrote and co-wrote for the Eagles and he played many of these, such as "Sad Café", "New Kid in Town", and "Best of My Love". He also played his composition "White Rhythm and Blues", one of my favourite Linda Ronstadt songs and "You're Only Lonely", the only top-40 hit recorded by Souther.

Souther spent most of the evening playing ballads, but changed it up for the encore, getting the audience clapping along to the catchy "Heartache Tonight."

The place was not full on a cold and snowy Sunday night. But Souther is a big baseball fan and announced before his last song that he planned to return to Chicago in the spring and take in a Cubs game. So you will have another chance to see him. And you should take it.

20180211_215254
Me and JD after the show.


<< Older Posts | Newer Posts >>