In this 9 part blog post series (link to all posts at bottom of this page), I revisit the Sentiment Analysis application I developed for Wholeschool as part of our Pluralsight course on IBM BlueMix now rebranded IBM Cloud (If you have a Pluralsight account be sure to check out the course!)
During the Pluralsight course we develop a NodeJS application that analyses the sentiment of Pluralsight author profiles using IBM Watson then leverages Node-Red to push the results to twitter and retrieve any responses to the tweets. The diagram below gives an overview of the application workflow and services.
At Wholeschool Software we now leverage the power of Azure and the Azure DevOps offering, along with Github and the latest ASP.NET Core development framework so thought it would be great to show how we use some of these technologies by re-developing some parts of the original demo on this new stack.
To demonstrate how some of these pieces fit together, we will create a Sentiment Analysis application similar to the orignal version on BlueMix, this time using ASP.NET Core, Blazor, xUnit.net, Azure DevOps (Pipelines and Artifacts), GitHub, Azure Cognitive Services, SonarCloud and finally Azure App Services for hosting our application.
One choice of technology above that may suprise you is Blazor as it is still ‘experimental’ and its not actually something we have used at Wholeschool. It is, however a technology I have been tinkering with in my spare time and I believe could be game changer in terms of full stack ASP.NET Core development with C# running in the browser. The alternative would have been using something like ASP.NET Core MVC with Razor, Razor Pages or a SPA application using ASP.NET Core WebAPI along with a client-side framework like Angular. All of these options would be more in line with what you would currently see at Wholeschool.
If you would like to see an additional blog post creating the Web Application using one of these more traditional approaches please give me a shout and I will see what I can do.
Note the application is not meant to be a production quality application but more to show how you can tie these different technologies and services together along with some opinionated choices for supporting packages and libraries that I like to use day-to-day.
All code covered in this blog post can be found on my GitHub repository
https://github.com/stevenknox/TwitterSentiment
Below you can see a screenshot of the final application we will develop that will allow you to enter a Twitter username and display the sentiment analysis for the last 20 tweets found.
We will be using the .NET Core command line tools and VS Code on a Windows machine, however you can do everything covered here using Visual Studio 2017 or using Mac or any supported Linux distro. First ensure you have the latest ASP.NET Core SDK installed from the following link https://dotnet.microsoft.com/download
I’m assuming you have some familiarity with C#, ASP.NET Core (including the CLI tools) and Azure however I have tried to provide as much detail and screenshots as I can to make it easy to follow along.
Our application will be composed of 3 projects, a class library, a test project and a web application. We will initially build the library along with our first CI/CD pipeline and deploy the package to a private Nuget feed using Azure Artifacts. We will then show how we can consume this package into our Web application then have a second CI/CD pipeline responsible for deploying our Web application to Azure App Services. We could have everything contained in one solution, however this approach gives a better understanding around how you can author and deploy a re-usable library that can be consumed via a package manager and how a standalone client can use this library and retrieve this during the CI/CD process.
A quick summary of the projects we will be building:
Class Library
The class library responsible for authenticating with the Twitter API and reading tweets from a users timeline. It will also handle connecting to Azure Cognitive Services to analyse sentiment.
Test Project
Unit tests using the popular xUnit.net to test our class library functionality. When we setup our CI/CD pipeline we will show how to run tests and generate code coverage.
Web Project
The web project will leverage the exciting new Blazor technology for a SPA client application using Razor and C# in the browser. You can also use one of the other ASP.NET Core templates such as MVC, Razor Pages or one of the JavaScript flavours such as Angular or React.
Note that during this post series we will develop the Sentiment Analysis library and the Web Application entirely independently. My aim is to show how you would develop a re-usable package that could be distributed via a package manager such as NuGet then have another standalone application consume that package. You can of course, reference your library directly from your Web App as a project reference to make development and debugging a bit easier, however I will leave that choice up to you.
Part 2 -Create our Library and hook up Twitter API support
Part 3 – Setup our first Azure DevOps CI/CD Pipeline
Part 4 – Update pipeline to package and push to private NuGet Feed on Azure Artifacts
Part 5 – Add Code Quality Analysis to our pipeline using SonarCloud
Part 6 – Add Sentiment Analysis using Text Analytics API from Azure Cognitive Services
Part 7 – Build our ASP.NET Core Blazor App
Part 8 – Deploy our ASP.NET Core Blazor App to Azure App Services