<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Patrick Tshibanda</title>
    <description>The latest articles on Forem by Patrick Tshibanda (@techwithpat).</description>
    <link>https://forem.com/techwithpat</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F440592%2F20ab0fa4-78dd-4ec3-8432-a8eaf952b4fa.jpg</url>
      <title>Forem: Patrick Tshibanda</title>
      <link>https://forem.com/techwithpat</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/techwithpat"/>
    <language>en</language>
    <item>
      <title>How to create a Web API with ASP.NET and MongoDB</title>
      <dc:creator>Patrick Tshibanda</dc:creator>
      <pubDate>Sun, 19 Dec 2021 20:11:55 +0000</pubDate>
      <link>https://forem.com/techwithpat/create-a-web-api-with-aspnet-and-mongodb-1a94</link>
      <guid>https://forem.com/techwithpat/create-a-web-api-with-aspnet-and-mongodb-1a94</guid>
      <description>&lt;p&gt;In this tutorial, you will learn how to create a Web API with ASP.NET and MongoDB. We will create an API that allows CRUD operations on a movie database.&lt;/p&gt;

&lt;h1&gt;
  
  
  What is MongoDB?
&lt;/h1&gt;

&lt;p&gt;MongoDB is a document-based NoSQL database. Unlike a relational database, which stores data in tables, MongoDB stores data as documents that are organized into collections.&lt;/p&gt;

&lt;h1&gt;
  
  
  Tools
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://visualstudio.microsoft.com"&gt;Visual Studio 2022&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.postman.com/"&gt;Postman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mongodb.com"&gt;MongoDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.mongodb.com/products/compass"&gt;MongoDB Compass&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Creating the database
&lt;/h1&gt;

&lt;p&gt;I’m going to work with MongoDB on my local computer. To install an instance of the MongoDB server follow the link below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.mongodb.com/manual/installation/"&gt;Install MongoDB&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you don't want to use MongoDB on your local machine, you can always use MongoDB Atlas. MongoDB Atlas  is a database as a service, and you can try it for free.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;Launch MongoDB Compass.&lt;/li&gt;
&lt;li&gt;Click on the "Connect" button to connect to your local server.&lt;/li&gt;
&lt;li&gt;Once connected to the server, click on the &lt;strong&gt;Create Database&lt;/strong&gt; button to create a new database.&lt;/li&gt;
&lt;li&gt;In the dialog, set the database name to &lt;strong&gt;MoviesDb&lt;/strong&gt; and set the collection name to &lt;strong&gt;MoviesCollection&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click on &lt;strong&gt;Create Database&lt;/strong&gt; button to generate the database.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Creating the ASP.NET Application
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Launch Visual Studio 2022.&lt;/li&gt;
&lt;li&gt;Go to file -&amp;gt; new -&amp;gt; Project.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;ASP.NET Empty template&lt;/strong&gt;, then click on the &lt;strong&gt;Next&lt;/strong&gt; button.&lt;/li&gt;
&lt;li&gt;Set the project's name to &lt;strong&gt;MoviesAPI&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;.NET 6&lt;/strong&gt; as the framework and unselect &lt;strong&gt;configure with HTTPS&lt;/strong&gt; then click on the &lt;strong&gt;Create&lt;/strong&gt; button to generate the project.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Installing the MongoDB .NET driver
&lt;/h1&gt;

&lt;p&gt;This is the official .NET driver for MongoDB, it will help connect to MongoDB.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the NuGet Package Manager UI in Visual Studio.&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;MongoDB.Driver&lt;/strong&gt;, select and install.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Configuration
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;To connect to MongoDB, we will need some details like the connection string, the database name, and the collection name. We will store these details in the application configuration file.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"MoviesDatabaseSettings": {
  "ConnectionString": "Your connection string to MongoDB",
  "DatabaseName": "MoviesDb",
  "MoviesCollectionName": "Movies"
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;💡 To get the connection string for your database, disconnect from MongoDB Compass, and the connection string will be displayed on the home window of the application.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;To read this section in the application, we will use the options pattern. Add a new class named &lt;strong&gt;MoviesDatabaseSettings&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class MoviesDatabaseSettings
{
    public string ConnectionString { get; set; } = string.Empty;
    public string DatabaseName { get; set; } = string.Empty;
    public string MoviesCollectionName { get; set; } = string.Empty;
}

&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;ASP.NET will map the section "MoviesDatabaseSettings" to this class.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In program.cs, after a WebApplication is instantiated, we register the &lt;strong&gt;MoviesDatabaseSettings&lt;/strong&gt; class with the dependency injection container.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;builder.Services.Configure&amp;lt;MoviesDatabaseSettings&amp;gt;(builder.Configuration.GetSection("MoviesDatabaseSettings"));

&lt;/code&gt;&lt;/pre&gt;


&lt;blockquote&gt;
&lt;p&gt;Make sure, you install the following Nuget package: Microsoft.Extensions.Options&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Creating the model
&lt;/h1&gt;

&lt;p&gt;Add a new class like the one below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; public class Movie
 {
     [BsonId]
     [BsonRepresentation(MongoDB.Bson.BsonType.ObjectId)]
     public string Id { get; set; }
     public string Title { get; set; }
     public int Year { get; set; }
     public string Summary { get; set; } = null;
     public List&amp;lt;string&amp;gt; Actors { get; set; }
 }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;The Id property is decorated with the &lt;strong&gt;BsonId&lt;/strong&gt; attribute to mark it as the primary key.&lt;/li&gt;
&lt;li&gt;MongoDB stores the primary key in an &lt;strong&gt;ObjectId&lt;/strong&gt; structure, to tell MongoDB that it needs to convert from string to ObjectId, the Id property is also decorated with the attribute &lt;strong&gt;BsonRepresentation&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Creating CRUD operations in a service
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Add a new class, paste the following code:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public class MoviesService
{
    private readonly IMongoCollection&amp;lt;Movie&amp;gt; _movies;

    public MoviesService(IOptions&amp;lt;MoviesDatabaseSettings&amp;gt; options)
    {
        var mongoClient = new MongoClient(options.Value.ConnectionString);

        _movies = mongoClient.GetDatabase(options.Value.DatabaseName)
            .GetCollection&amp;lt;Movie&amp;gt;(options.Value.MoviesCollectionName);
    }

    public async Task&amp;lt;List&amp;lt;Movie&amp;gt;&amp;gt; Get() =&amp;gt;
        await _movies.Find(_ =&amp;gt; true).ToListAsync();

    public async Task&amp;lt;Movie&amp;gt; Get(string id) =&amp;gt;
        await _movies.Find(m =&amp;gt; m.Id == id).FirstOrDefaultAsync();

    public async Task Create(Movie newMovie) =&amp;gt;
        await _movies.InsertOneAsync(newMovie);

    public async Task Update(string id, Movie updateMovie) =&amp;gt;
        await _movies.ReplaceOneAsync(m =&amp;gt; m.Id == id, updateMovie);

    public async Task Remove(string id) =&amp;gt;
        await _movies.DeleteOneAsync(m =&amp;gt; m.Id == id);
}

&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;&lt;strong&gt;MongoClient&lt;/strong&gt; is responsible for running database operations.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Register the service with the dependency injection container.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;builder.Services.AddSingleton&amp;lt;MoviesService&amp;gt;();

&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;&lt;strong&gt;MoviesService&lt;/strong&gt; is registered as a singleton because the service depends on the &lt;strong&gt;MongoClient&lt;/strong&gt;, it is recommended to use the &lt;strong&gt;MongoClient&lt;/strong&gt; as a singleton.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Creating endpoints for CRUD operations
&lt;/h1&gt;

&lt;p&gt;Update the program.cs to look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;using MoviesAPI.Data;

var builder = WebApplication.CreateBuilder(args);
builder.Services.Configure&amp;lt;MoviesDatabaseSettings&amp;gt;(builder.Configuration.GetSection("MoviesDatabaseSettings"));
builder.Services.AddSingleton&amp;lt;MoviesService&amp;gt;();
var app = builder.Build();

app.MapGet("/", () =&amp;gt; "Movies API!");

app.MapGet("/api/movies", async(MoviesService moviesService) =&amp;gt; await moviesService.Get());

app.MapGet("/api/movies/{id}", async(MoviesService moviesService, string id) =&amp;gt;
{
    var movie = await moviesService.Get(id);
    return movie is null ? Results.NotFound() : Results.Ok(movie);
});

app.MapPost("/api/movies", async (MoviesService moviesService, Movie movie) =&amp;gt;
{
    await moviesService.Create(movie);
    return Results.Ok();
});

app.MapPut("/api/movies/{id}", async(MoviesService moviesService, string id, Movie updatedMovie) =&amp;gt;
{
    var movie = await moviesService.Get(id);
    if (movie is null) return Results.NotFound();

    updatedMovie.Id = movie.Id;
    await moviesService.Update(id, updatedMovie);

    return Results.NoContent();
});

app.MapDelete("/api/movies/{id}", async (MoviesService moviesService, string id) =&amp;gt;
{
    var movie = await moviesService.Get(id);
    if (movie is null) return Results.NotFound();

    await moviesService.Remove(movie.Id);

    return Results.NoContent();
});

app.Run();

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Creating, Reading, Updating, and deleting actions will be mapped to HTTP verbs such as POST, GET, PUT, and DELETE.&lt;br&gt;
I am using the Minimal API syntax to create each endpoint. For an HTTP verb, We need to declare a route and a route handler that will handle a request to the route. Because we registered the MoviesService with the dependency injection container, it can be injected in each route handler.&lt;/p&gt;
&lt;h1&gt;
  
  
  Testing the API
&lt;/h1&gt;

&lt;p&gt;If you want to add a new movie for instance.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start Debugging the application or press F5.&lt;/li&gt;
&lt;li&gt;Copy the URL displayed in the web browser.&lt;/li&gt;
&lt;li&gt;Launch POSTMAN.&lt;/li&gt;
&lt;li&gt;Create a new request then select POST as HTTP verb.&lt;/li&gt;
&lt;li&gt;In the address bar, paste the URL then add "/api/movies".&lt;/li&gt;
&lt;li&gt;In the Body section, paste the following json as the payload.
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    {
        "Title":  "The Shawshank Redemption",
        "Year":  1994,
        "Summary":  "Banker Andy Dufresne is arrested for killing his wife and her lover. After a hard adjustment, he tries to improve the conditions of the prison and to give hope to his companions.",
        "Actors":  ["tim robbins","morgan freeman"]
    }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;Click on the &lt;strong&gt;SEND&lt;/strong&gt; button.&lt;/li&gt;
&lt;li&gt;You should get a 200 status code as the response.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;
  
  
  Happy coding !!!
&lt;/h1&gt;

&lt;p&gt;Here's the tutorial in video:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/VSsAsA6_-GE"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>mongodb</category>
      <category>aspnet</category>
    </item>
    <item>
      <title>How to use Git with Visual Studio</title>
      <dc:creator>Patrick Tshibanda</dc:creator>
      <pubDate>Fri, 10 Dec 2021 15:13:01 +0000</pubDate>
      <link>https://forem.com/techwithpat/how-to-use-git-with-visual-studio-2hco</link>
      <guid>https://forem.com/techwithpat/how-to-use-git-with-visual-studio-2hco</guid>
      <description>&lt;p&gt;Git is a version control system commonly used for software development. It offers a number of features such as the ability to merge, split and compare versions. &lt;/p&gt;

&lt;p&gt;Visual Studio offers a Git integration that allows developers to access those features without leaving the environment. &lt;/p&gt;

&lt;p&gt;In this video, I provide an overview of how to use git in Visual Studio.&lt;/p&gt;

&lt;p&gt;I cover the following topics :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a GIT repository&lt;/li&gt;
&lt;li&gt;Create a branch&lt;/li&gt;
&lt;li&gt;Saving changes&lt;/li&gt;
&lt;li&gt;Combine multiple commits into one.&lt;/li&gt;
&lt;li&gt;Modify the last commit&lt;/li&gt;
&lt;li&gt;Push to a remote repository&lt;/li&gt;
&lt;li&gt;Fetch, pull, sync a remote repository&lt;/li&gt;
&lt;li&gt;Merge&lt;/li&gt;
&lt;li&gt;Revert a commit&lt;/li&gt;
&lt;li&gt;Go back in time with Reset&lt;/li&gt;
&lt;li&gt;Resolve merge conflicts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Watch the video here : &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/8zSVvTQXSIc"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>visualstudio</category>
    </item>
    <item>
      <title>Call an existing Web API with a C# application (VIDEO)</title>
      <dc:creator>Patrick Tshibanda</dc:creator>
      <pubDate>Sun, 21 Feb 2021 14:31:07 +0000</pubDate>
      <link>https://forem.com/techwithpat/call-an-existing-web-api-with-a-c-application-video-2jb1</link>
      <guid>https://forem.com/techwithpat/call-an-existing-web-api-with-a-c-application-video-2jb1</guid>
      <description>&lt;p&gt;This video is about calling an existing WEB API from a C# application.&lt;/p&gt;

&lt;p&gt;You will learn to use the HttpClient class to retrieve new releases from Spotify using their Web API.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/LZJvdFDCKxM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>csharp</category>
      <category>webapi</category>
      <category>spotify</category>
    </item>
    <item>
      <title>Repository Pattern with a C# and ASP.NET Core example [VIDEO]</title>
      <dc:creator>Patrick Tshibanda</dc:creator>
      <pubDate>Wed, 10 Feb 2021 15:25:36 +0000</pubDate>
      <link>https://forem.com/techwithpat/repository-pattern-with-a-c-and-asp-net-core-example-video-1ihi</link>
      <guid>https://forem.com/techwithpat/repository-pattern-with-a-c-and-asp-net-core-example-video-1ihi</guid>
      <description>&lt;p&gt;The repository pattern helps decouple your code from the data access layer, it promotes reuse and makes your code easy to test.&lt;/p&gt;

&lt;p&gt;In this tutorial, you will learn the Repository pattern through an example written with ASP.NET CORE and C#.&lt;/p&gt;

&lt;p&gt;If you like the content, feel free to like the video and subscribe to the channel.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/BcQzZ97-mWU"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>tutorial</category>
      <category>aspnetcore</category>
      <category>repositorypattern</category>
    </item>
    <item>
      <title>Create a Web API with ASP.NET Core. (video)
</title>
      <dc:creator>Patrick Tshibanda</dc:creator>
      <pubDate>Wed, 27 Jan 2021 15:39:02 +0000</pubDate>
      <link>https://forem.com/techwithpat/create-a-web-api-with-asp-net-core-video-153o</link>
      <guid>https://forem.com/techwithpat/create-a-web-api-with-asp-net-core-video-153o</guid>
      <description>&lt;p&gt;In this video, you will learn how to create a WEB API with ASP.NET CORE and C #.&lt;/p&gt;

&lt;p&gt;We will create an API that supports Creating, Reading, Updating, and Deleting Data.&lt;/p&gt;

&lt;p&gt;I used the following tools :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visual Studio 2019&lt;/li&gt;
&lt;li&gt;ASP.NET CORE and the .NET 5 SDK&lt;/li&gt;
&lt;li&gt;Entity Framework Core&lt;/li&gt;
&lt;li&gt;SQLite&lt;/li&gt;
&lt;li&gt;Swagger UI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The final code can be found here: &lt;a href="https://github.com/estyval/Web-API-With-ASP.NET-Core"&gt;https://github.com/estyval/Web-API-With-ASP.NET-Core&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you like the content, feel free to like the video and subscribe to the channel 🙏.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/sWJayOop4k8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>aspnetcore</category>
      <category>webapi</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to code Rock Paper Scissors in the browser with C# (VIDEO)</title>
      <dc:creator>Patrick Tshibanda</dc:creator>
      <pubDate>Thu, 24 Dec 2020 09:53:28 +0000</pubDate>
      <link>https://forem.com/techwithpat/how-to-code-rock-paper-scissors-in-the-browser-with-c-video-1hl0</link>
      <guid>https://forem.com/techwithpat/how-to-code-rock-paper-scissors-in-the-browser-with-c-video-1hl0</guid>
      <description>&lt;p&gt;In this video, you will learn to create the Rock-paper-scissors game using Blazor WebAssembly.&lt;/p&gt;

&lt;p&gt;You will use HTML, CSS, and C# to create the game.&lt;/p&gt;

&lt;p&gt;The source code is available on Github : &lt;a href="https://github.com/estyval/RockPaperScissors"&gt;https://github.com/estyval/RockPaperScissors&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;If you like the content, feel free to like the video and subscribe to the channel 🙏.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/0lOUf5svGIc"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>html</category>
      <category>css</category>
    </item>
    <item>
      <title>Build your own Music Pad with C#, HTML, and CSS (VIDEO)</title>
      <dc:creator>Patrick Tshibanda</dc:creator>
      <pubDate>Wed, 02 Dec 2020 20:50:18 +0000</pubDate>
      <link>https://forem.com/techwithpat/build-your-own-music-pad-with-c-html-and-css-video-546c</link>
      <guid>https://forem.com/techwithpat/build-your-own-music-pad-with-c-html-and-css-video-546c</guid>
      <description>&lt;p&gt;In this video, I create a simple music pad controller with Blazor WebAssembly. &lt;/p&gt;

&lt;p&gt;Blazor is a framework for creating web applications using HTML, CSS, and C# 🔥.&lt;/p&gt;

&lt;p&gt;The following topics are cover in the video :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Components&lt;/li&gt;
&lt;li&gt;Event handling&lt;/li&gt;
&lt;li&gt;CSS isolation&lt;/li&gt;
&lt;li&gt;JavaScript interoperability&lt;/li&gt;
&lt;li&gt;HTML DOM Audio Object&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The source code is available here:&lt;a href="https://github.com/estyval/BlazorMusicPad"&gt;https://github.com/estyval/BlazorMusicPad&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;If you like the content, feel free to like the video and subscribe to the channel 🙏.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/QV9iPf7et7A"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>blazor</category>
    </item>
    <item>
      <title>Firebase Authentication with Xamarin Forms </title>
      <dc:creator>Patrick Tshibanda</dc:creator>
      <pubDate>Sun, 01 Nov 2020 15:40:15 +0000</pubDate>
      <link>https://forem.com/techwithpat/firebase-authentication-with-xamarin-forms-dfc</link>
      <guid>https://forem.com/techwithpat/firebase-authentication-with-xamarin-forms-dfc</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/H-hZR123D9c"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to create a BMI calculator with Xamarin Forms.</title>
      <dc:creator>Patrick Tshibanda</dc:creator>
      <pubDate>Wed, 29 Jul 2020 20:53:54 +0000</pubDate>
      <link>https://forem.com/techwithpat/how-to-create-a-bmi-calculator-with-xamarin-forms-3n0l</link>
      <guid>https://forem.com/techwithpat/how-to-create-a-bmi-calculator-with-xamarin-forms-3n0l</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/91rJLa65p-E"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Learn how to create a body mass index calculator using Xamarin Forms and C#.&lt;/p&gt;

&lt;p&gt;More tutorials to come in the future.&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://github.com/estyval"&gt;Github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Follow me on &lt;a href="https://www.linkedin.com/in/patrick-tshibanda-431017135/"&gt;Linkedin&lt;/a&gt;&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>xamarinforms</category>
    </item>
  </channel>
</rss>
