<?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: Claudio Bernasconi</title>
    <description>The latest articles on Forem by Claudio Bernasconi (@claudiobernasconi).</description>
    <link>https://forem.com/claudiobernasconi</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%2F147455%2F0b79befa-7064-42ca-923a-8bc4077b8af1.jpg</url>
      <title>Forem: Claudio Bernasconi</title>
      <link>https://forem.com/claudiobernasconi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/claudiobernasconi"/>
    <language>en</language>
    <item>
      <title>Giving My First User Group Talk</title>
      <dc:creator>Claudio Bernasconi</dc:creator>
      <pubDate>Tue, 12 May 2020 19:10:22 +0000</pubDate>
      <link>https://forem.com/claudiobernasconi/giving-my-first-user-group-talk-d90</link>
      <guid>https://forem.com/claudiobernasconi/giving-my-first-user-group-talk-d90</guid>
      <description>&lt;p&gt;Last Thursday, May 7th, 2020, was the first time I spoke in front of an audience about software development topics. The talk was titled: “&lt;a href="https://www.meetup.com/de-DE/Mobile-User-Group-Zentralschweiz/events/269639423/"&gt;Blazor Web- &amp;amp; Mobile Development using C#&lt;/a&gt;“.&lt;/p&gt;

&lt;p&gt;Yes, I know what you maybe think: This guy has 80+ blog posts, runs a &lt;a href="https://youtube.com/claudiobernasconi"&gt;YouTube channel&lt;/a&gt;, etc. But yes, it was the first time I spoke live in front of an audience.&lt;/p&gt;

&lt;p&gt;I was invited to speak about Blazor at a local Mobile user group. Because of the current situation with social distancing in place, the organizers decided to move the event online. It was my chance to show some of my knowledge in front of their audience – &lt;a href="https://www.twitch.tv/bernics"&gt;live on Twitch&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  How I got invited
&lt;/h1&gt;

&lt;p&gt;It was a few months ago that a friend of mine asked the organizer of the Mobile user group if he wanted to invite me to speak about Blazor. &lt;/p&gt;

&lt;p&gt;It was my friend who knew me and my &lt;a href="https://youtube.com/claudiobernasconi"&gt;YouTube channel&lt;/a&gt; and knew about my interest in Blazor. He is a co-worker of one of the organizers of the user group.&lt;/p&gt;

&lt;p&gt;Only a few days later, I received an offer to speak at the next meeting of the Mobile user group. As we all know, 2020 has its indistinguishable storybook, and things changed in the meantime. So the event was held online.&lt;/p&gt;

&lt;h1&gt;
  
  
  How I prepared myself
&lt;/h1&gt;

&lt;p&gt;I did the usual things somebody planning a presentation would do. I created a slide deck and started thinking about what code samples I should show, and I debated what parts I wanted to code live.&lt;/p&gt;

&lt;p&gt;It took me a lot of time to build an application that shows everything I wanted. In the end, I dodged this project and started from scratch. I created small projects from scratch while giving the presentation.&lt;/p&gt;

&lt;p&gt;There were questions about more complex applications, but I believe the simple projects helped a lot of the audience understand the &lt;a href="https://www.claudiobernasconi.ch/2020/01/21/blazor-introduction-what-is-blazor/"&gt;fundamentals of Blazor&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Telling everybody about the fundamentals of Blazor was the goal of my talk anyway.&lt;/p&gt;

&lt;h1&gt;
  
  
  What I have learned
&lt;/h1&gt;

&lt;p&gt;I postponed my first user group talk for a long time. I always thought that I do not belong to the group of speakers. It’s not that I would consider myself a real speaker by now – but hey, at least I gave my first user group talk.&lt;/p&gt;

&lt;p&gt;I don’t like presenting in front of people I don’t know. If it is a smaller group of people that I mostly know and trust, it is no problem for me to go on and on about a technical topic and discuss for hours about solutions.&lt;/p&gt;

&lt;p&gt;When it comes to an unknown audience, &lt;strong&gt;I tend to be very scared&lt;/strong&gt;. It was always the case when I had to present in school, and it was the case when I had to perform during my degree at the university.&lt;/p&gt;

&lt;p&gt;Every time I was forced to give a presentation, it turned out to be okayish or even pretty good. I never had a terrible experience, but it is just something that I don’t like doing. But this time, it was fun, and I learned a lot from the questions of the audience.&lt;/p&gt;

&lt;p&gt;It seems like it is a big difference if you have to talk about something they want to hear from you compared to when you speak about something that you like and understand.&lt;/p&gt;

&lt;p&gt;I like the format. I enjoy how I was able to help people understand the fundamentals of something new from my home office while they were having dinner, watching me in their homes.&lt;/p&gt;

&lt;p&gt;It was a lot of help that I was able to give my first user group talk in my native language. I’m still worried a lot when I think about speaking in English.&lt;/p&gt;

&lt;p&gt;I am very grateful for the opportunity I got to give my first user group presentation for this audience. &lt;strong&gt;I want to thank everyone involved&lt;/strong&gt; in the organization of the event and everyone who attended the event from their couch.&lt;/p&gt;

&lt;p&gt;I might think about streaming more on &lt;a href="https://www.twitch.tv/bernics"&gt;my Twitch channel&lt;/a&gt; in the future. It was a lot of fun, and maybe people tune in again? We’ll see how things turn out.&lt;/p&gt;

&lt;h1&gt;
  
  
  How I streamed to Twitch
&lt;/h1&gt;

&lt;p&gt;The talk was streamed on &lt;strong&gt;Twitch&lt;/strong&gt;. I used &lt;strong&gt;OBS&lt;/strong&gt; to capture my screen and to add overlays. I used multiple scenes to make it a unique experience for the audience. It took me a long time to create different layouts, and in the end, I ended up only using three out of the four created scenes.&lt;/p&gt;

&lt;p&gt;At the beginning of the talk, there was an introduction from the organizers. To bring them onto the stream, I opened a &lt;strong&gt;Skype&lt;/strong&gt; call, and I recorded their webcam as well as share their screens. It worked quite well. The audio was clear; the video sometimes lagged a bit. But for an introduction, it worked well enough.&lt;/p&gt;

&lt;p&gt;After the introduction, I started with the main part of the meeting, my talk. I did not have the opportunity to see the reaction on the faces of the people in front of me, but I encouraged them to use the &lt;strong&gt;Twitch chat&lt;/strong&gt; to interact with me. And they did.&lt;/p&gt;

&lt;p&gt;Only a few minutes in, people started asking questions, and it was a fun experience to talk in front of my camera.&lt;/p&gt;

&lt;p&gt;After the presentation, I asked people to join a &lt;strong&gt;Discord&lt;/strong&gt; server that I created specifically for this talk. Around ten people jumped into the server, and we talked about 30 minutes about the presentation.&lt;/p&gt;

&lt;h1&gt;
  
  
  Developers love online events
&lt;/h1&gt;

&lt;p&gt;After my talk, I checked the Twitch statistics of my presentation. It turned out that, on average, &lt;strong&gt;31 viewers&lt;/strong&gt; were watching the stream with a peak of 37. There were &lt;strong&gt;72 unique viewers&lt;/strong&gt; over 70 minutes of my talk.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--S8eEAC_2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2020/05/stream_summary.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--S8eEAC_2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2020/05/stream_summary.png" alt="https://www.claudiobernasconi.ch/wp-content/uploads/2020/05/stream_summary.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Those numbers might not sound impressive to you. Maybe you talked in front of a much bigger audience? But for me, it was a lot. Taking into consideration that the Mobile user group usually attracts about 10-15 attendees, we had at least doubled the audience for this event.&lt;/p&gt;

&lt;p&gt;It leads me to the conclusion that &lt;strong&gt;developers tend to prefer online events over offline events&lt;/strong&gt;. I’m not sure what the reason is. Maybe it is the lack of alternatives in times when you are supposed to sit at home? Anyway, it was a great audience to give my very first talk.&lt;/p&gt;

&lt;h1&gt;
  
  
  What I would do differently
&lt;/h1&gt;

&lt;p&gt;My first user group talk was a great experience, and I overcame my fear of presenting in front of a group of talented, well-educated, and experienced developers.&lt;/p&gt;

&lt;p&gt;There is not much I would do differently. The most important thing I would do differently, though, is to &lt;strong&gt;start a lot earlier with the preparation&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;It was around two weeks before I had the presentation that I finally started creating my slide deck and started working on the source code I wanted to show. It put more pressure on my shoulders than required.&lt;/p&gt;

&lt;p&gt;Also, &lt;strong&gt;I underestimated the effort it takes to create beautiful scenes for OBS&lt;/strong&gt;. I wanted to use my color scheme and my logos. It was a lot more work than expected. I would have started earlier if I could go back in time.&lt;/p&gt;

&lt;p&gt;Other than that, I am delighted with how everything turned out.&lt;/p&gt;

&lt;h1&gt;
  
  
  What you can learn from my experience
&lt;/h1&gt;

&lt;p&gt;It doesn’t matter if you cannot attend events in person. If you have a decent setup, &lt;strong&gt;streaming from home is an option&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you are scared of giving your first presentation, I can tell you that you don’t need to be afraid of it. Local &lt;strong&gt;user groups tend to have a very forgiving audience&lt;/strong&gt;. Also, the size of the audience is usually not too big.&lt;/p&gt;

&lt;p&gt;If English is not your native language and you hesitate because you think you sound silly or don’t find the right words, maybe &lt;strong&gt;give your first presentation in your native language&lt;/strong&gt;. It helped me a lot.&lt;/p&gt;

&lt;p&gt;If you are the organizer of a user group, &lt;strong&gt;don’t cancel all the upcoming events&lt;/strong&gt;. Try to get them online. People will show up, and they’ll have a good time and learn something new anyway.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://www.claudiobernasconi.ch/2020/05/10/giving-my-first-user-group-talk/"&gt;claudiobernasconi.ch&lt;/a&gt; on May 10th, 2020.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>career</category>
      <category>todayilearned</category>
      <category>techtalks</category>
    </item>
    <item>
      <title>Blazor Components: How to Split Template and C# Code</title>
      <dc:creator>Claudio Bernasconi</dc:creator>
      <pubDate>Sat, 08 Feb 2020 22:29:43 +0000</pubDate>
      <link>https://forem.com/claudiobernasconi/blazor-components-how-to-split-template-and-c-code-109b</link>
      <guid>https://forem.com/claudiobernasconi/blazor-components-how-to-split-template-and-c-code-109b</guid>
      <description>&lt;p&gt;In the &lt;a href="https://dev.to/claudiobernasconi/blazor-introduction-what-is-blazor-44b9"&gt;Blazor Introduction&lt;/a&gt; and specifically in the article about &lt;a href="https://dev.to/claudiobernasconi/how-to-create-a-blazor-component-3o4j"&gt;How to Create a Blazor Component&lt;/a&gt;, we’ve seen how simple it is to write C# code for our components.&lt;/p&gt;

&lt;p&gt;It’s not the only way to write C# code for our components, though. Instead of having the C# code below the template in the component file, we can move it into a separate file.&lt;/p&gt;

&lt;h1&gt;
  
  
  Reasons for separating code and template
&lt;/h1&gt;

&lt;p&gt;Some people don’t like having the C# code directly in the component definition file. Although I personally like to have both artifacts within the same file most of the time, there are reasons to split the code into separate files.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You might want to &lt;strong&gt;reuse&lt;/strong&gt; parts of your code for multiple components. You maybe want to put the shared code into a &lt;strong&gt;library&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Or you have a lot of C# code and a &lt;strong&gt;big template&lt;/strong&gt;, and you feel like separating the matters will help with &lt;strong&gt;readability&lt;/strong&gt; and &lt;strong&gt;maintainability&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;As a WPF developer, you might be familiar with the concept of a view template and a &lt;strong&gt;code-behind&lt;/strong&gt; file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Maybe you prefer to have the template separated from the code-behind.&lt;/p&gt;

&lt;h1&gt;
  
  
  Moving the C# code into a code-behind file
&lt;/h1&gt;

&lt;p&gt;Let’s take a look at the following &lt;strong&gt;ProductCard&lt;/strong&gt; component definition that we build in the &lt;a href="https://dev.to/claudiobernasconi/how-to-create-a-blazor-component-3o4j"&gt;How to Create a Blazor Component&lt;/a&gt; article:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"product-card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"width: 18rem;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-img-top"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"@imageUrl"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Card image cap"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-body"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;h5&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@productName&lt;span class="nt"&gt;&amp;lt;/h5&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@productDescription&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-primary"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Add to cart&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

@code {
    private string imageUrl = 
        "https://dummyimage.com/286x180/8EB1C7/FEFDFF.png&lt;span class="ni"&gt;&amp;amp;text=Awesome+Product";&lt;/span&gt;
    private string productName = 
        "Awesome Product";
    private string productDescription = 
        "You won't believe how great this product is until you actually use it yourself.";
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Our ProductCard component file lives in the Components folder of our project. We create a new file in the same namespace with the name &lt;strong&gt;ProductCard.razor.cs&lt;/strong&gt;. We open the file and insert the following class definition:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.AspNetCore.Components&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;BlazorApp5.Components&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;partial&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ProductCard&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ComponentBase&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;imageUrl&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;
        &lt;span class="s"&gt;"https://dummyimage.com/286x180/8EB1C7/FEFDFF.png&amp;amp;text=Awesome+Product"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;productName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;
            &lt;span class="s"&gt;"Awesome Product"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;productDescription&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;
            &lt;span class="s"&gt;"You won't believe how great this product is until you actually use it yourself."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;As we can see in line 6 of the code above, we define a partial class derived from &lt;strong&gt;ComponentBase&lt;/strong&gt;. The ComponentBase class comes from the &lt;strong&gt;Microsoft.AspnetCore.Components&lt;/strong&gt; namespace and acts as the base class for all Blazor components.&lt;/p&gt;

&lt;p&gt;We can now remove the &lt;strong&gt;@code&lt;/strong&gt; directive from the template definition within the CardComponent.razor file. The component definition in the &lt;strong&gt;ProductCard.razor&lt;/strong&gt; file looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"product-card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"width: 18rem;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-img-top"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"@imageUrl"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Card image cap"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-body"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;h5&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@productName&lt;span class="nt"&gt;&amp;lt;/h5&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@productDescription&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-primary"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Add to cart&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;If we position the cursor on a variable definition and press F12, we will still jump into the code-behind file to the location of the variable definition.&lt;/p&gt;

&lt;p&gt;This is how it looks in the Solution Explorer within Visual Studio:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eKq4hAQ---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2020/02/BlazorSplitComponentDefinition.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eKq4hAQ---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2020/02/BlazorSplitComponentDefinition.png" alt="Blazor App: C# Code in Code-Behind File"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have successfully separated the template and the C# code of a Blazor component into different files.&lt;/p&gt;

&lt;h1&gt;
  
  
  How Blazor components work
&lt;/h1&gt;

&lt;p&gt;Let’s take a look at what we just did. We learned that we could use the &lt;strong&gt;@code&lt;/strong&gt; directive in a .razor file, or we can use &lt;strong&gt;a separate .razor.cs file&lt;/strong&gt; to write our C# code.&lt;/p&gt;

&lt;p&gt;The way we define our code only matters at development time. When we compile the application, the compiler turns our @code directive into a C# class for us.&lt;/p&gt;

&lt;p&gt;In the end, the .NET runtime executes the code that the compiler creates for us. &lt;strong&gt;There are different ways to achieve the same compiler output&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  When should I separate the code-behind?
&lt;/h1&gt;

&lt;p&gt;As written above, there are different reasons why you might want to separate the code-behind from the template definition. I suggest &lt;strong&gt;having a rule on how you want to create your components&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I’m currently a friend of having both the template and the code within the same file. As long as it’s maintainable, and as long as I don’t want to reuse parts of the code, it feels natural to me.&lt;/p&gt;

&lt;p&gt;If I either want to reuse code or if the code file becomes too big, I tend to split the definition into separate files.&lt;/p&gt;

&lt;p&gt;In the end, &lt;strong&gt;it is a personal preference&lt;/strong&gt;. The goal of this article is to give you a choice. I hope you understand &lt;strong&gt;how to separate the code from the template&lt;/strong&gt;, and why you might want to do it.&lt;/p&gt;

&lt;h1&gt;
  
  
  What’s next?
&lt;/h1&gt;

&lt;p&gt;Check out these other blog posts about Blazor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/claudiobernasconi/blazor-introduction-what-is-blazor-44b9"&gt;Blazor Introduction – What is Blazor?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/claudiobernasconi/how-to-create-a-blazor-component-3o4j"&gt;How to Create a Blazor Component&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re interested in &lt;strong&gt;learning more about Blazor&lt;/strong&gt;, you’ll definitely want to join my &lt;a href="https://claudiobernasconi.ck.page/2d4f6608c7"&gt;email list&lt;/a&gt;, where I talk a lot about Blazor, share information with the community, and &lt;strong&gt;offer answers to your questions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you want to &lt;strong&gt;dive deep into Blazor&lt;/strong&gt;, you can also check out my upcoming &lt;a href="https://claudiobernasconi.teachable.com/p/blazor-creating-web-applications-with-csharp"&gt;Blazor – Creating Web Applications with C#&lt;/a&gt; online course. Everyone signing up before the launch of the course in April will be eligible for a &lt;strong&gt;massive discount&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://www.claudiobernasconi.ch/2020/02/08/blazor-components-how-to-split-template-and-csharp-code/"&gt;claudiobernasconi.ch&lt;/a&gt; on February 8th, 2020.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>dotnet</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Create a Blazor Component</title>
      <dc:creator>Claudio Bernasconi</dc:creator>
      <pubDate>Sat, 01 Feb 2020 15:24:19 +0000</pubDate>
      <link>https://forem.com/claudiobernasconi/how-to-create-a-blazor-component-3o4j</link>
      <guid>https://forem.com/claudiobernasconi/how-to-create-a-blazor-component-3o4j</guid>
      <description>&lt;p&gt;&lt;strong&gt;Creating a Blazor component&lt;/strong&gt; is one of the first things we want to do when we create a Blazor application. As we learned, Blazor applications consist of many Blazor components. A Blazor component represents a part of the user interface and can be reused in your application or even in multiple applications.&lt;/p&gt;

&lt;p&gt;If you prefer to watch a video instead of reading this detailed article, I don’t judge you.&lt;/p&gt;

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

&lt;p&gt;A Blazor component consists of an &lt;strong&gt;HTML (and CSS) template and C# code&lt;/strong&gt; that glues the application and the component together.&lt;/p&gt;

&lt;p&gt;For the code example in this article, I used the standard Blazor Server application template of Visual Studio 2019 Community Edition. You might want to do the same if you’re going to code along and use the snippets provided below. This code works with .NET Core 3.1.&lt;/p&gt;

&lt;h1&gt;
  
  
  Blazor Components are Razor Components
&lt;/h1&gt;

&lt;p&gt;When we want to &lt;strong&gt;create a Blazor component&lt;/strong&gt; within &lt;strong&gt;Visual Studio 2019 Community Edition&lt;/strong&gt;, we &lt;strong&gt;right-click&lt;/strong&gt; on the folder we want to create a new component for and click on the &lt;strong&gt;add new item&lt;/strong&gt; menu option.&lt;/p&gt;

&lt;p&gt;Within the &lt;strong&gt;Add New Item dialog&lt;/strong&gt;, we click on &lt;strong&gt;Visual C#&lt;/strong&gt; and choose &lt;strong&gt;Razor Component&lt;/strong&gt; as our file template. Fill in a &lt;strong&gt;Component name&lt;/strong&gt; and click on the Add button on the bottom right corner to create the file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dxUaS0MX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2020/02/AddNewItemDialog.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dxUaS0MX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2020/02/AddNewItemDialog.png" alt="Blazor: Add new item"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this article, we’re going to create a &lt;strong&gt;ProductCard&lt;/strong&gt; component.&lt;/p&gt;

&lt;p&gt;It’s important to understand that in the context of Blazor, we use &lt;strong&gt;Razor components&lt;/strong&gt;, which means that we build components using the Razor syntax. In the context of this article, we reference our component as a &lt;strong&gt;Blazor component&lt;/strong&gt;, because we use it in a Blazor application.&lt;/p&gt;

&lt;h1&gt;
  
  
  The structure of a Blazor Component
&lt;/h1&gt;

&lt;p&gt;The selected Razor component template generates a simplistic file in our Solution Explorer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;Component&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;

@code {
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;We have two parts. In the upper half of the Blazor component, we have the HTML template. In this case, a single &lt;/p&gt; tag with the name of the component represents the &lt;strong&gt;component template&lt;/strong&gt;.

&lt;p&gt;In the lower part of the Blazor component, we have a &lt;strong&gt;@code&lt;/strong&gt; directive, which wraps &lt;strong&gt;C# code for our Blazor component&lt;/strong&gt;. Up to now, there is no C# code within our new Blazor component.&lt;/p&gt;
&lt;h1&gt;
  
  
  Implementing the Blazor component template
&lt;/h1&gt;

&lt;p&gt;We want to change our Blazor component template to something more useful than only the name of the component.&lt;/p&gt;

&lt;p&gt;As I wrote at the start of this article, this component is created within the default &lt;strong&gt;Blazor Server app project template&lt;/strong&gt; generated by Visual Studio 2019 Community Edition. &lt;/p&gt;

&lt;p&gt;This project template has &lt;a href="https://getbootstrap.com/"&gt;Bootstrap&lt;/a&gt; included, which we’ll use as a user interface components library for our Blazor component template.&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight html"&gt;&lt;code&gt; &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"product-card"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"width: 18rem;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-img-top"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"@imageUrl"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"Card image cap"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-body"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;h5&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@productName&lt;span class="nt"&gt;&amp;lt;/h5&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;@productDescription&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"btn btn-primary"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Add to cart&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;We use the above code snippet as a template for our Blazor component. It will represent a &lt;strong&gt;product card&lt;/strong&gt;, which could possibly be found within an online shop.&lt;/p&gt;

&lt;p&gt;Most of the template uses &lt;strong&gt;standard HTML tags&lt;/strong&gt;, including &lt;em&gt;div, img, h5, p,&lt;/em&gt; and &lt;em&gt;a&lt;/em&gt;. Some of those tags have classes attached to them that are defined in &lt;a href="https://getbootstrap.com/"&gt;Bootstrap&lt;/a&gt;. It allows us to style our template without having to write the CSS ourselves.&lt;/p&gt;

&lt;h1&gt;
  
  
  How to use Variables in Blazor Components
&lt;/h1&gt;

&lt;p&gt;We need to take a close look at the template where we use &lt;strong&gt;@imageUrl&lt;/strong&gt;, &lt;strong&gt;@productName&lt;/strong&gt;, and &lt;strong&gt;@productDescription&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Those definitions are &lt;strong&gt;placeholders for variables&lt;/strong&gt; defined in the C# part of the component. The C# part of the component belongs below the template definition and is wrapped within a &lt;strong&gt;@code&lt;/strong&gt; directive.&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;@code&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;imageUrl&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; 
        &lt;span class="s"&gt;"https://dummyimage.com/286x180/8EB1C7/FEFDFF.png&amp;amp;text=Awesome+Product"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;productName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; 
        &lt;span class="s"&gt;"Awesome Product"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;productDescription&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; 
        &lt;span class="s"&gt;"You won't believe how great this product is until you actually use it yourself."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;The variables are defined as &lt;strong&gt;private string variables&lt;/strong&gt;. It’s important to understand that those variables are not defined within an explicit class definition, nor are they static. &lt;/p&gt;

&lt;p&gt;The variables are part of the Blazor component class deriving from &lt;a href="https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.components.componentbase?view=aspnetcore-3.1"&gt;Microsoft.AspNetCore.Components.BaseComponent&lt;/a&gt;, but the &lt;strong&gt;class definition does not have to be explicitly written&lt;/strong&gt;. It’s a handy shortcut we use within Blazor Components.&lt;/p&gt;

&lt;p&gt;The complete &lt;strong&gt;ProductCard Blazor Component&lt;/strong&gt; looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;div&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="err"&gt;="&lt;/span&gt;&lt;span class="nc"&gt;product&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;card&lt;/span&gt;&lt;span class="s"&gt;"&amp;gt;
&lt;/span&gt;    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;div&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="err"&gt;="&lt;/span&gt;&lt;span class="nc"&gt;card&lt;/span&gt;&lt;span class="s"&gt;" style="&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;18&lt;/span&gt;&lt;span class="n"&gt;rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="s"&gt;"&amp;gt;
&lt;/span&gt;        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;img&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="err"&gt;="&lt;/span&gt;&lt;span class="nc"&gt;card&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;img&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;top&lt;/span&gt;&lt;span class="s"&gt;" src="&lt;/span&gt;&lt;span class="n"&gt;@imageUrl&lt;/span&gt;&lt;span class="s"&gt;" alt="&lt;/span&gt;&lt;span class="n"&gt;Card&lt;/span&gt; &lt;span class="n"&gt;image&lt;/span&gt; &lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="s"&gt;"&amp;gt;
&lt;/span&gt;        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;div&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="err"&gt;="&lt;/span&gt;&lt;span class="nc"&gt;card&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="s"&gt;"&amp;gt;
&lt;/span&gt;            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;h5&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="err"&gt;="&lt;/span&gt;&lt;span class="nc"&gt;card&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="s"&gt;"&amp;gt;@productName&amp;lt;/h5&amp;gt;
&lt;/span&gt;            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="err"&gt;="&lt;/span&gt;&lt;span class="nc"&gt;card&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="s"&gt;"&amp;gt;@productDescription&amp;lt;/p&amp;gt;
&lt;/span&gt;            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;href&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="err"&gt;="&lt;/span&gt;&lt;span class="nc"&gt;btn&lt;/span&gt; &lt;span class="n"&gt;btn&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;primary&lt;/span&gt;&lt;span class="s"&gt;"&amp;gt;Add to cart&amp;lt;/a&amp;gt;
&lt;/span&gt;        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="n"&gt;@code&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;imageUrl&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; 
        &lt;span class="s"&gt;"https://dummyimage.com/286x180/8EB1C7/FEFDFF.png&amp;amp;text=Awesome+Product"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;productName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; 
        &lt;span class="s"&gt;"Awesome Product"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;productDescription&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; 
        &lt;span class="s"&gt;"You won't believe how great this product is until you actually use it yourself."&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;h1&gt;
  
  
  How to include a Blazor Component in a Page
&lt;/h1&gt;

&lt;p&gt;Now that we have our first component completed, &lt;strong&gt;we want to show it on a page&lt;/strong&gt;. A page in Blazor is a Blazor Component itself, that also provides the ability to be addressed using a route.&lt;/p&gt;

&lt;p&gt;For now, let’s use the default Blazor Server application template and add our created component to the &lt;strong&gt;Index.razor&lt;/strong&gt; page.&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;@page&lt;/span&gt; &lt;span class="s"&gt;"/"&lt;/span&gt;
&lt;span class="n"&gt;@using&lt;/span&gt; &lt;span class="n"&gt;BlazorApp5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Components&lt;/span&gt;

&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Welcome&lt;/span&gt;&lt;span class="p"&gt;!&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;ProductCard&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;ProductCard&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;To include a component within another component, we can use an &lt;strong&gt;HTML tag with the name of the component&lt;/strong&gt;. In our case, &lt;strong&gt;&lt;/strong&gt; can be used to place our Blazor component within the &lt;strong&gt;Index Blazor Component&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you defined the &lt;strong&gt;ProductCard&lt;/strong&gt; component in another namespace than the &lt;strong&gt;Index&lt;/strong&gt; component, e.g., &lt;strong&gt;Components&lt;/strong&gt;, we need to add a using statement at the top of the Index component. You can see that using statement on line 2 in the code snippet above.&lt;/p&gt;

&lt;h1&gt;
  
  
  Your first Blazor Component in Action
&lt;/h1&gt;

&lt;p&gt;Let’s take a look at our Component in action. We start the application and we immediately see our &lt;strong&gt;ProductCard component rendered on the index page&lt;/strong&gt; of the application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vHhjROKc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2020/02/BlazorComponentInAction.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vHhjROKc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2020/02/BlazorComponentInAction.png" alt="Blazor Application with our rendered Blazor component"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the &lt;strong&gt;foundation of a Blazor application&lt;/strong&gt;. Sure, there are advanced topics, including Component parameters, Routing, sharing data between components, and much more.&lt;/p&gt;

&lt;p&gt;But when it comes to creating Blazor components, you have learned all the required fundamentals to explore the world of Blazor components yourself.&lt;/p&gt;

&lt;p&gt;If you want to &lt;strong&gt;dive deep into Blazor&lt;/strong&gt;, you can also check out my upcoming &lt;a href="https://claudiobernasconi.teachable.com/p/blazor-creating-web-applications-with-csharp"&gt;Blazor – Creating Web Applications with C#&lt;/a&gt; online course. Everyone signing up before the launch of the course in April will be eligible for a &lt;strong&gt;massive discount&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://www.claudiobernasconi.ch/2020/02/01/how-to-create-a-blazor-component/"&gt;claudiobernasconi.ch&lt;/a&gt; on February 1st, 2020.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>dotnet</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Blazor Introduction – What is Blazor?</title>
      <dc:creator>Claudio Bernasconi</dc:creator>
      <pubDate>Tue, 21 Jan 2020 14:54:12 +0000</pubDate>
      <link>https://forem.com/claudiobernasconi/blazor-introduction-what-is-blazor-44b9</link>
      <guid>https://forem.com/claudiobernasconi/blazor-introduction-what-is-blazor-44b9</guid>
      <description>&lt;p&gt;I’m excited as you are to learn about Blazor. In this article, I’m going to explain what Blazor is and why it might be a useful technology choice for your future projects. &lt;/p&gt;

&lt;p&gt;This article is going to be a &lt;strong&gt;high-level overview&lt;/strong&gt; of what Blazor is and &lt;strong&gt;how a Blazor application looks like for a .NET developer.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you prefer to watch a video instead of reading this detailed article, I don’t judge you.&lt;/p&gt;

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

&lt;p&gt;The goal of this article is to provide you with a &lt;strong&gt;fundamental understanding of what Blazor is&lt;/strong&gt;. We’ll take a look at how it works, and which existing technology is used to make it all happen.&lt;/p&gt;

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

&lt;p&gt;Microsoft develops Blazor, and it is &lt;strong&gt;a framework for building interactive client-side web user interfaces with .NET&lt;/strong&gt;. It allows .NET developers to &lt;strong&gt;build modern web applications&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Blazor allows us to write interactive web UIs using C# instead of JavaScript. Blazor has a component model comparable to React or Angular, and it uses C#, HTML, and CSS to build user interfaces.&lt;/p&gt;

&lt;p&gt;The first interesting aspect of Blazor is that because we write C# on the server and the client-side, we can &lt;strong&gt;share the code&lt;/strong&gt; as well as libraries between the two.&lt;/p&gt;

&lt;p&gt;Blazor sits on top of &lt;strong&gt;ASP.NET Core&lt;/strong&gt; and has access to all the new features of the .NET platform.&lt;/p&gt;

&lt;h1&gt;
  
  
  Blazor Uses Open Web Standards
&lt;/h1&gt;

&lt;p&gt;Blazor is built on top of open web standards. Unlike Flash or Silverlight, &lt;strong&gt;there is no need for a plugin in the browser&lt;/strong&gt; to run a Blazor application. Blazor works in all modern browsers on desktop and mobile.&lt;/p&gt;

&lt;h1&gt;
  
  
  Blazor Allows Code Sharing
&lt;/h1&gt;

&lt;p&gt;You can use existing &lt;strong&gt;.NET Standard libraries&lt;/strong&gt; in your Blazor projects. Writing your code in .NET Standard libraries allows you to use it in any project, including Xamarin, ASP.NET WebApi, Blazor, Desktop applications using WPF, and more.&lt;/p&gt;

&lt;h1&gt;
  
  
  JavaScript Is Still an Option
&lt;/h1&gt;

&lt;p&gt;Maybe you already have experience using JavaScript web frameworks, or you are familiar with the rich ecosystem of JavaScript libraries. The great news is that &lt;strong&gt;we don’t need JavaScript&lt;/strong&gt; for Blazor, but if we want, &lt;strong&gt;we can use it&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Blazor allows us to call JavaScript APIs and libraries where we need them.&lt;/p&gt;

&lt;h1&gt;
  
  
  Blazor Has First-Class IDE Support
&lt;/h1&gt;

&lt;p&gt;Both Microsoft IDEs, Visual Studio, and Visual Studio Code provide &lt;strong&gt;a great Blazor development experience&lt;/strong&gt; not only on Windows but also on Linux and macOS. There are also command-line tools that allow you to use other IDEs or editors to write your Blazor applications.&lt;/p&gt;

&lt;h1&gt;
  
  
  Blazor Has a Rich Component Eco System
&lt;/h1&gt;

&lt;p&gt;We are busy developers, and we don’t want to build our user interface from scratch. Luckily, although it is early, &lt;strong&gt;there are multiple well-known 3rd party component libraries available&lt;/strong&gt;, or they are being developed while you read this article.&lt;/p&gt;

&lt;h1&gt;
  
  
  Blazor Is Open Source
&lt;/h1&gt;

&lt;p&gt;If you want to understand how something works internally, you can look up the code on &lt;a href="https://github.com/dotnet/aspnetcore/tree/master/src/Components"&gt;GitHub&lt;/a&gt;. Blazor is open-source and already has many contributors to its core projects.&lt;/p&gt;

&lt;p&gt;You can learn more about all the Blazor features on the official &lt;a href="https://dotnet.microsoft.com/apps/aspnet/web-apps/blazor"&gt;Blazor product page&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Create Your First Blazor Application
&lt;/h1&gt;

&lt;p&gt;First of all, make sure that you are running the &lt;strong&gt;latest version of Visual Studio 2019&lt;/strong&gt;, which is a good idea anyway if you want to have the most performant tool to get your job done. We also need to have the &lt;strong&gt;.NET Core SDK 3.0&lt;/strong&gt; or newer installed.&lt;/p&gt;

&lt;p&gt;Let’s start Visual Studio 2019 and create a new project. In the project template selection screen, we choose &lt;strong&gt;Blazor App&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UFaL3HhF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2020/01/BlazorServerNewApp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UFaL3HhF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2020/01/BlazorServerNewApp.png" alt="Create a new project"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you don’t see Blazor here, chances are you need to install the &lt;strong&gt;web development workload&lt;/strong&gt; in the &lt;strong&gt;Visual Studio installer&lt;/strong&gt;. If that’s a problem for you, let me know in the comments below, and I’ll create a short video or an article about it.&lt;/p&gt;

&lt;p&gt;In the next screen, we choose a project name, set the location of the project, and click on the &lt;strong&gt;Create&lt;/strong&gt; button.&lt;/p&gt;

&lt;p&gt;Next, the “Create a new Blazor app” screen appears. We choose to create a &lt;strong&gt;Blazor Server App&lt;/strong&gt; for this Blazor introduction. I’ll write about Blazor WebAssembly Apps in another article on this blog.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fWDbXH2m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2020/01/BlazorServerNewApp2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fWDbXH2m--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2020/01/BlazorServerNewApp2.png" alt="Create a new Blazor app"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you don’t have the &lt;strong&gt;Blazor WebAssembly&lt;/strong&gt; App option, you can install the template. Blazor WebAssembly is currently in preview. Therefore the template is not included in the web development load installed using the Visual Studio installer.&lt;/p&gt;

&lt;p&gt;We click on the &lt;strong&gt;Create&lt;/strong&gt; button to create our first Blazor Server app.&lt;/p&gt;

&lt;h1&gt;
  
  
  The First Impression of a Blazor Server App
&lt;/h1&gt;

&lt;p&gt;First of all, let’s &lt;strong&gt;compile and run&lt;/strong&gt; the application to get a first impression of how a Blazor app looks in the browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yyqDXk_7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2020/01/BlazorServerWebsite.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yyqDXk_7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2020/01/BlazorServerWebsite.png" alt="Blazor App Screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We see a classic &lt;strong&gt;Single Page Application&lt;/strong&gt; with navigation on the left and the content on the right. &lt;/p&gt;

&lt;p&gt;Let’s click on the &lt;strong&gt;Counter&lt;/strong&gt; menu to open the Counter view. If we click on the Click me button, the counter increases by 1.&lt;/p&gt;

&lt;p&gt;Let’s click on the &lt;strong&gt;Fetch data&lt;/strong&gt; menu option, which loads data from the server and renders it into a grid.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TwavXZgU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2020/01/BlazorServerDataComponent.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TwavXZgU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2020/01/BlazorServerDataComponent.png" alt="Weather forecast component screenshot"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s not the most spectacular application, but it lets us explore a lot about how a Blazor Server app works. Let’s stop the application and &lt;strong&gt;take a look at the source code&lt;/strong&gt; of the project.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Blazor Server Project Structure
&lt;/h1&gt;

&lt;p&gt;In the &lt;strong&gt;Solution Explorer&lt;/strong&gt; of our project, we see the three folders &lt;strong&gt;Data, Pages, Shared&lt;/strong&gt;, and a few top-level files.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ASaWHUOt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2020/01/BlazorServerSolutionExplorer.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ASaWHUOt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2020/01/BlazorServerSolutionExplorer.png" alt="Blazor Server: Solution Explorer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this introduction article, we don’t learn about the Startup of the Blazor Server application or its configuration. Instead, &lt;strong&gt;we want to know how Blazor looks for an application developer&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Counter Component
&lt;/h1&gt;

&lt;p&gt;We open the &lt;strong&gt;Pages&lt;/strong&gt; folder and double click the Counter.razor file to open it in the editor. This &lt;strong&gt;Blazor component&lt;/strong&gt; uses &lt;strong&gt;Razor syntax&lt;/strong&gt;, which allows us to have an HTML template and add C# logic where we need it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;@page&lt;/span&gt; &lt;span class="s"&gt;"/counter"&lt;/span&gt;

&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Current&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;@currentCount&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;button&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="err"&gt;="&lt;/span&gt;&lt;span class="nc"&gt;btn&lt;/span&gt; &lt;span class="n"&gt;btn&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;primary&lt;/span&gt;&lt;span class="s"&gt;" @onclick="&lt;/span&gt;&lt;span class="n"&gt;IncrementCount&lt;/span&gt;&lt;span class="s"&gt;"&amp;gt;Click me&amp;lt;/button&amp;gt;
&lt;/span&gt;
&lt;span class="n"&gt;@code&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;currentCount&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;IncrementCount&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;currentCount&lt;/span&gt;&lt;span class="p"&gt;++;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;In this component, we have a &lt;em&gt;currentCount&lt;/em&gt; variable that we want to display on line 5. The C# code is wrapped within a &lt;em&gt;@code&lt;/em&gt; directive. We don’t need a lot of ceremony like defining a class. Instead, we create the variable we need and implement a method to increase its value.&lt;/p&gt;

&lt;p&gt;On line 7, we define the &lt;em&gt;IncrementCount&lt;/em&gt; method to be executed on a button click.&lt;/p&gt;

&lt;p&gt;On line 1, we have the &lt;em&gt;@page&lt;/em&gt; directive, which tells Blazor router at which URL the component should be available.&lt;/p&gt;

&lt;h1&gt;
  
  
  The FetchData Component
&lt;/h1&gt;

&lt;p&gt;Now, let’s take a look at the &lt;strong&gt;FetchData&lt;/strong&gt; component. The structure of this component does not differ much from the component we explored before.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;@page&lt;/span&gt; &lt;span class="s"&gt;"/fetchdata"&lt;/span&gt;

&lt;span class="n"&gt;@using&lt;/span&gt; &lt;span class="n"&gt;BlazorApp3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Data&lt;/span&gt;
&lt;span class="n"&gt;@inject&lt;/span&gt; &lt;span class="n"&gt;WeatherForecastService&lt;/span&gt; &lt;span class="n"&gt;ForecastService&lt;/span&gt;

&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Weather&lt;/span&gt; &lt;span class="n"&gt;forecast&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;This&lt;/span&gt; &lt;span class="n"&gt;component&lt;/span&gt; &lt;span class="n"&gt;demonstrates&lt;/span&gt; &lt;span class="n"&gt;fetching&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="p"&gt;.&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="nf"&gt;@if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;forecasts&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;em&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Loading&lt;/span&gt;&lt;span class="p"&gt;...&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;em&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;table&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="err"&gt;="&lt;/span&gt;&lt;span class="nc"&gt;table&lt;/span&gt;&lt;span class="s"&gt;"&amp;gt;
&lt;/span&gt;        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;thead&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;tr&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;th&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;th&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;th&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Temp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;C&lt;/span&gt;&lt;span class="p"&gt;)&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;th&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;th&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Temp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;F&lt;/span&gt;&lt;span class="p"&gt;)&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;th&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;th&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;Summary&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;th&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;tr&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;thead&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;tbody&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nf"&gt;@foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;forecast&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;forecasts&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;tr&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;td&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;@forecast&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ToShortDateString&lt;/span&gt;&lt;span class="p"&gt;()&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;td&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;td&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;@forecast&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TemperatureC&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;td&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;td&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;@forecast&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;TemperatureF&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;td&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;td&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;@forecast&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Summary&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;td&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;tr&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;tbody&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;@code&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="n"&gt;WeatherForecast&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;forecasts&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;override&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt; &lt;span class="nf"&gt;OnInitializedAsync&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;forecasts&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;ForecastService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetForecastAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DateTime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Now&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;On line 4, we make use of &lt;strong&gt;Dependency Injection&lt;/strong&gt; to get an instance of the &lt;em&gt;WeatherForecastService&lt;/em&gt; class. We have a slightly more complex layout definition using a for each statement on line 26 to repeat the HTML template for the items of a collection. &lt;/p&gt;

&lt;p&gt;And on line 44, we have a method that executes an async call to retrieve data from the server using the injected &lt;em&gt;WeatherForecastService&lt;/em&gt; instance.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Blazor Roadmap
&lt;/h1&gt;

&lt;p&gt;An important thing when learning a new technology is being able to decide if &lt;strong&gt;it’s worth putting in time and effort&lt;/strong&gt; to learn something new. For example, it’s valuable to know where the development of the technology will be a few months or years from now. The Blazor team did a good job and released and talked about their roadmap multiple times.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mD1dMLVZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2020/01/blazor-roadmap-2019.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mD1dMLVZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2020/01/blazor-roadmap-2019.png" alt="Blazor Roadmap"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While we already got &lt;strong&gt;Blazor Server&lt;/strong&gt; with the release of .NET Core 3.0 in September 2019, we’ll soon get &lt;strong&gt;Blazor WebAssembly&lt;/strong&gt; in May 2020. As mentioned at the beginning of the video, Blazor WebAssembly will allow running a web application within the browser instead of executing the logic on the server.&lt;/p&gt;

&lt;p&gt;In the next step, Blazor will allow us to provide a full-featured &lt;strong&gt;Progressive Web Application (PWA)&lt;/strong&gt;. PWAs provide offline support and will enable us to integrate with the notification system of the host, create app icons on the home screen, and much more.&lt;/p&gt;

&lt;p&gt;Furthermore, Blazor will support a hybrid model that allows us to &lt;strong&gt;run our applications within the Electron shell&lt;/strong&gt;. It will allow us to create a full-featured desktop application using Blazor.&lt;/p&gt;

&lt;p&gt;With &lt;strong&gt;Blazor Native&lt;/strong&gt;, we will be able to create native applications (without an Electron shell) for desktop and mobile systems using Blazor.&lt;/p&gt;

&lt;p&gt;Blazor starts by enabling .NET developers to build robust and modern web applications using the latest .NET Core platform. Going down the road, we’ll get many more options to make sure our applications can run as desktop or mobile applications too. &lt;/p&gt;

&lt;p&gt;If we understand how Blazor components work, we’ll be able to &lt;strong&gt;create reusable components and services that we can use across all platforms&lt;/strong&gt; from the web to native applications on phones or desktop.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;I hope you’re excited as I am to develop an application using Blazor. This article has been a high-level introduction and overview of Blazor. In the next article, we will go more technical and learn how to write code for our first Blazor application.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I will be releasing an online course about &lt;a href="https://claudiobernasconi.teachable.com/p/blazor-creating-web-applications-with-csharp"&gt;Creating Web Applications with Blazor&lt;/a&gt; in April this year. The online course guides you step-by-step from learning the fundamentals to building complex applications using Blazor. Check out the &lt;a href="https://claudiobernasconi.teachable.com/p/blazor-creating-web-applications-with-csharp"&gt;course page&lt;/a&gt; to get a massive discount and early access by subscribing to the email list.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Let me know in the comments below what you think about Blazor? Do you like what you’ve seen so far? Have you already started building applications with Blazor?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://www.claudiobernasconi.ch/2020/01/21/blazor-introduction-what-is-blazor/"&gt;claudiobernasconi.ch&lt;/a&gt; on January 21st, 2020.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>csharp</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Review of the Year 2019</title>
      <dc:creator>Claudio Bernasconi</dc:creator>
      <pubDate>Thu, 02 Jan 2020 11:56:37 +0000</pubDate>
      <link>https://forem.com/claudiobernasconi/review-of-the-year-2019-5hem</link>
      <guid>https://forem.com/claudiobernasconi/review-of-the-year-2019-5hem</guid>
      <description>&lt;p&gt;It is that time of the year again. The year rushed by, and now it is time to look back to what I planned to do, what I achieved and what I want to do differently next year.&lt;/p&gt;

&lt;h1&gt;
  
  
  Blogging
&lt;/h1&gt;

&lt;p&gt;I want to start off talking about my blog. I started my blog a long time ago back in 2008. One year ago, I wrote a detailed article about &lt;a href="https://www.claudiobernasconi.ch/2018/12/19/10-years-of-blogging/" rel="noopener noreferrer"&gt;my 10th anniversary with this blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It was November 2018 when &lt;strong&gt;I committed to blogging regularly&lt;/strong&gt; once again, after another break. I only wrote a few articles a year in 2018, and I wanted to change that.&lt;/p&gt;

&lt;p&gt;And let me tell you I changed it. I was consistently publishing at least one article per week from November 2018 until July 2019. After that, I took a little break to plan my &lt;strong&gt;5-week trip to the United States&lt;/strong&gt;. This article is the 33rd and final article for 2019.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.claudiobernasconi.ch%2Fwp-content%2Fuploads%2F2019%2F12%2FBlogPageViews2019.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.claudiobernasconi.ch%2Fwp-content%2Fuploads%2F2019%2F12%2FBlogPageViews2019.png" alt="Pageviews per month"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The image above shows the number of &lt;strong&gt;page views per month&lt;/strong&gt;, starting from November 2018 and ending in December 2019. At the time of this writing, there are still five days left in 2019, which means that the December numbers will raise a little higher in the end.&lt;/p&gt;

&lt;p&gt;What counts for me is that I found my way back to blogging, and I had a lot of fun researching and writing those 33 articles in 2019. Also, it seems like some articles were interesting to the readers as my monthly page views increased &lt;strong&gt;from 3500 in November 2018 to around 19’000 in October 2019&lt;/strong&gt;. I now have more than five times more readers on my blog than a year ago. I am delighted with the results.&lt;/p&gt;

&lt;p&gt;Looking forward to 2020, I can only imagine how far this journey will go if I continue to blog about my experiences as a developer regularly. I have a few secret plans for 2020 that I do not want to share yet publicly, but when the time comes, I’ll announce it here first.&lt;/p&gt;

&lt;p&gt;Another 5X increase in page views would mean to reach 100’000 page views a month by the end of 2020. I’ll love it for sure if that happens.&lt;/p&gt;

&lt;p&gt;You can access the &lt;a href="https://www.claudiobernasconi.ch/archive/" rel="noopener noreferrer"&gt;blog archive&lt;/a&gt; to find all the articles I wrote in 2019 and also the articles from the years before.&lt;/p&gt;

&lt;p&gt;I also started to cross-post my blog articles to dev.to. If you want to make sure you don’t miss out on future articles, consider &lt;a href="https://dev.to/claudiobernasconi"&gt;following me on dev.to&lt;/a&gt;.&lt;/p&gt;


&lt;div class="ltag__user ltag__user__id__147455"&gt;
    &lt;a href="/claudiobernasconi" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F147455%2F0b79befa-7064-42ca-923a-8bc4077b8af1.jpg" alt="claudiobernasconi image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/claudiobernasconi"&gt;Claudio Bernasconi&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/claudiobernasconi"&gt;I'm a passionate Software Engineer, Blogger, YouTuber, and Counter-Strike player&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;It is an excellent platform featuring articles from all over the world, which publish articles for developers on various topics.&lt;/p&gt;

&lt;p&gt;The goal for 2020 is to continue writing articles, at least 20 of them, and to hopefully &lt;strong&gt;break through the 20’000 page views per month barrier&lt;/strong&gt;. An ambitious goal would be to set 50’000 page views per month as a goal.&lt;/p&gt;

&lt;h1&gt;
  
  
  YouTube
&lt;/h1&gt;

&lt;p&gt;With the end of 2019, my first year running my developer YouTube channel comes to an end as well. I &lt;strong&gt;uploaded 11 videos&lt;/strong&gt;, and I gained around &lt;strong&gt;600 subscribers&lt;/strong&gt; and more than &lt;strong&gt;30’000 views&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I wrote several articles about my YouTube journey on this blog. I wrote about &lt;a href="https://www.claudiobernasconi.ch/2019/12/11/10-tips-for-your-developer-youtube-channel/" rel="noopener noreferrer"&gt;10 Tips for Your Developer YouTube Channel&lt;/a&gt;, which could be interesting to read if you plan to start your channel or want to get more traction on your existing channel.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.claudiobernasconi.ch%2Fwp-content%2Fuploads%2F2018%2F12%2Fyoutube-channel-banner.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.claudiobernasconi.ch%2Fwp-content%2Fuploads%2F2018%2F12%2Fyoutube-channel-banner.png" alt="YouTube Channel Banner"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I also wrote a review about my first &lt;a href="https://www.claudiobernasconi.ch/2019/12/04/365-days-of-building-a-software-developer-channel-on-youtube/" rel="noopener noreferrer"&gt;365 Days of Building a Software Developer Channel on YouTube&lt;/a&gt;. This article goes into detail about my results and what I did in the last year to grow my YouTube channel.&lt;/p&gt;

&lt;p&gt;I am satisfied with the results. I wish I were able to create and publish more videos in a year, but more than a video per month on average was not possible. I hope to improve next year. I want to set a goal of 2 videos per month. We’ll see if that happens.&lt;/p&gt;

&lt;p&gt;If you haven’t &lt;a href="https://www.youtube.com/claudiobernasconi" rel="noopener noreferrer"&gt;check out my channel&lt;/a&gt;, please do so and consider subscribing if you want to &lt;strong&gt;follow my journey&lt;/strong&gt; and learn about software development on the .NET platform.&lt;/p&gt;

&lt;p&gt;The goal for 2020 will be to continue creating videos, as stated above. From a metrics perspective, it would be great &lt;strong&gt;to reach monetization for the channel&lt;/strong&gt; by the end of Q1.&lt;/p&gt;

&lt;h1&gt;
  
  
  Remote Work
&lt;/h1&gt;

&lt;p&gt;2019 is also the first remote work year for me. I am an employer of a local company that has a focus on remote work and &lt;strong&gt;enables developers to be as productive as possible&lt;/strong&gt; by letting them leverage their tools and software that fit them best.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I’m glad for this opportunity&lt;/strong&gt;, and I am sure that my overall productivity has increased because I can entirely focus on work and do not need to worry about commuting and to lose time when sitting in traffic jam anymore. It helped with the quality of my life a lot. I am very &lt;strong&gt;thankful for this opportunity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;At the beginning of 2019, I wrote a detailed article about &lt;a href="https://www.claudiobernasconi.ch/2019/02/14/home-office-how-working-from-home-really-is/" rel="noopener noreferrer"&gt;How Working from Home Really Is&lt;/a&gt;. If you consider working remote in the future or if you’re working yourself remotely, this will be interesting to you.&lt;/p&gt;

&lt;p&gt;In Autumn of 2019, I recreated my home office by &lt;strong&gt;building a custom standing desk&lt;/strong&gt;. It took me a lot longer than expected, but I am satisfied with the results. When the cable management is finally done correctly, and my desk is cleaned up, I want to share the setup I’m using soon. There will be a video on YouTube, and you’ll also see me blogging about it for sure.&lt;/p&gt;

&lt;p&gt;I am not going to change anything about working from home in the next year. I am happy it all worked out, and &lt;strong&gt;I’m looking forward to a highly productive 2020&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  The United States West Coast Trip
&lt;/h1&gt;

&lt;p&gt;A review of 2019 would not be complete if I would not mention the &lt;strong&gt;five weeks I spent on the West Coast of the United States of America&lt;/strong&gt;. I’ve been in New York twice so far (2014 and 2018), but I’ve never been to the West Coast before.&lt;/p&gt;

&lt;p&gt;It worked out to go on a 5-week trip to the West Coast with my girlfriend this year, and it was &lt;strong&gt;an incredible experience&lt;/strong&gt;. I was able to gain so much insight into the lives of other people, and I realized that I am very privileged the way I’m can live my life and how I earn and spend my money.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.claudiobernasconi.ch%2Fwp-content%2Fuploads%2F2019%2F12%2FSanFrancisco.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.claudiobernasconi.ch%2Fwp-content%2Fuploads%2F2019%2F12%2FSanFrancisco.jpg" alt="San Francisco: Sea Lions and the Golden Gate Bridge"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From big cities like San Francisco, Los Angeles, San Diego, Phoenix, and Las Vegas to National Parks, including the Grand Canyon and many other great places, I was able to visit them all.&lt;/p&gt;

&lt;p&gt;We drove our rented 2018 Ford Mustang GT about 3800 miles across California, Arizona, Utah, and Nevada. It was a great experience. I’ll want to to that again, sooner than later.&lt;/p&gt;

&lt;h1&gt;
  
  
  Twitter
&lt;/h1&gt;

&lt;p&gt;In 2019 I set a big focus on Twitter. I love to connect with other developers on the platform. I read many, many blog articles; I would not have come across if it was not for Twitter.&lt;/p&gt;

&lt;p&gt;I also happily share my blog posts on Twitter, and of course, I hope that people notice my contributions and value them high enough to press the share or the like button. In the end, &lt;strong&gt;I do it because I love doing it&lt;/strong&gt;, but it is a motivation boost when I get feedback to something I wrote on my blog or a video I created for YouTube.&lt;/p&gt;

&lt;p&gt;I managed to grow my Twitter following &lt;strong&gt;from about 300 followers to around 1500 in 2019&lt;/strong&gt;. I don’t know why so many people decided to follow my journey, but I am pleased about it, and I hope to deliver the content that people are looking forward to.&lt;/p&gt;

&lt;p&gt;One tweet went to the roof in 2019. I never had &lt;strong&gt;Tweet go viral&lt;/strong&gt; before, but I believe that it is what happened to the tweet below. It also resulted in about 300-400 people following me. I am glad you joined my journey.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1192105997462102016-737" src="https://platform.twitter.com/embed/Tweet.html?id=1192105997462102016"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1192105997462102016-737');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1192105997462102016&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;If you are &lt;a href="https://www.twitter.com/CHBernasconiC" rel="noopener noreferrer"&gt;following me on Twitter&lt;/a&gt;, drop me a message and say hi. If you’re not, you might want to join my journey sooner than later.&lt;/p&gt;

&lt;p&gt;The goal for 2020 will be to continue post engaging content, share my content, and build relationships with other creators in the programming community. It would be great to &lt;strong&gt;reach 4000 followers&lt;/strong&gt; by the end of 2020.&lt;/p&gt;

&lt;h1&gt;
  
  
  E-Sports Live Events
&lt;/h1&gt;

&lt;p&gt;I could not end the 2019 review without mentioning the two &lt;strong&gt;Counter-Strike: Global Offensive events&lt;/strong&gt; I visited. I went to the &lt;strong&gt;ESL One Cologne 2019&lt;/strong&gt; event with my Counter-Strike friends, and I went to the &lt;strong&gt;StarLadder Berlin Major 2019&lt;/strong&gt; with my girlfriend.&lt;/p&gt;

&lt;p&gt;Cologne was a spectacular experience. I’ve never been to a live esports event before, and it was a great experience. I have been playing Counter-Strike since 2003, and if I would not be a software developer, I’m convinced I’d want to start a career playing Counter-Strike (streaming, content creation, or whatever).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.claudiobernasconi.ch%2Fwp-content%2Fuploads%2F2019%2F12%2FESLOneCologne.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.claudiobernasconi.ch%2Fwp-content%2Fuploads%2F2019%2F12%2FESLOneCologne.jpg" alt="Team Liquid: ESL One Cologne 2019 Winners"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It took me years to find people who want to attend an event like this with me, and it also took time to find a suitable event. I am thrilled that it worked out to attend two events this year. There is nothing planned for next year, but I’d love to sometime in the future visit another Counter-Strike live event.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thanks to everyone&lt;/strong&gt; who made it possible for me to experience joy at those events.&lt;/p&gt;

&lt;p&gt;I’m looking forward to &lt;strong&gt;a fantastic 2020&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://www.claudiobernasconi.ch/2019/12/27/review-of-the-year-2019/" rel="noopener noreferrer"&gt;claudiobernasconi.ch&lt;/a&gt; on December 27th, 2019.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>programming</category>
    </item>
    <item>
      <title>10 Tips for Your Developer YouTube Channel</title>
      <dc:creator>Claudio Bernasconi</dc:creator>
      <pubDate>Sun, 15 Dec 2019 10:50:42 +0000</pubDate>
      <link>https://forem.com/claudiobernasconi/10-tips-for-your-developer-youtube-channel-2mmj</link>
      <guid>https://forem.com/claudiobernasconi/10-tips-for-your-developer-youtube-channel-2mmj</guid>
      <description>&lt;p&gt;I &lt;a href="https://www.claudiobernasconi.ch/2019/12/04/365-days-of-building-a-software-developer-channel-on-youtube/"&gt;started my YouTube channel a year ago&lt;/a&gt;, and you can read a personal retrospective about it in another article. &lt;/p&gt;

&lt;p&gt;In this article, I’m going to share ten tips for other developers who want to start their own &lt;a href="https://youtube.com/claudiobernasconi"&gt;YouTube channel&lt;/a&gt; or that have a YouTube channel and want to grow their audience.&lt;/p&gt;

&lt;h1&gt;
  
  
  1. How to Make More Content
&lt;/h1&gt;

&lt;p&gt;I care about the content I put on my channel. I want to share accurate information with &lt;strong&gt;state of the art quality&lt;/strong&gt;, which means that I put pressure on myself to have great audio and video quality and that my voice-overs are on point. &lt;/p&gt;

&lt;p&gt;I want to make it as comfortable and straightforward as possible for the viewer to follow along. Most of my videos teach something new to the audience, and it is essential to be able to focus on the content when learning.&lt;/p&gt;

&lt;p&gt;On the other hand, &lt;strong&gt;I want to produce as much content as possible&lt;/strong&gt; for my channel. I want to accumulate watch time on my videos, and I want to be able to help as many people as possible.&lt;/p&gt;

&lt;p&gt;Those two things contradict each other. It is not possible to do both at the same time. You can get caught up in detail, or you rush your content and do not meet your quality goals.&lt;/p&gt;

&lt;p&gt;So &lt;strong&gt;what can you do that helps to produce more content&lt;/strong&gt; within the same time?&lt;/p&gt;

&lt;p&gt;One of the best tips to speed up the video creation process is &lt;strong&gt;batch producing&lt;/strong&gt;. Writing two scripts on the same day, and recording and editing two videos on the same day and scheduling them to go online in different weeks.&lt;/p&gt;

&lt;p&gt;Make sure to have some &lt;strong&gt;reusable video&lt;/strong&gt; assets that you can effortlessly put in your video. I have an end screen and an intro that I currently use in all of my videos. Once created, it only takes a few seconds to insert the clips into the next tutorial. &lt;/p&gt;

&lt;p&gt;It is worth taking the time to do it once, but right and reusing it for future videos. It also &lt;strong&gt;helps with branding&lt;/strong&gt;, as people start to recognize that multiple videos are from the same creator.&lt;/p&gt;

&lt;h1&gt;
  
  
  2. Why You Don’t Need Expensive Equipment
&lt;/h1&gt;

&lt;p&gt;I bought a &lt;a href="https://www.amazon.com/gp/product/B00KTGNC3M/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B00KTGNC3M&amp;amp;linkCode=as2&amp;amp;tag=bernasconi-20&amp;amp;linkId=80c674d79492930f98884aa082b4256f"&gt;Rode Podcaster microphone&lt;/a&gt;, a &lt;a href="https://www.amazon.com/gp/product/B00KTGNC3M/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B00KTGNC3M&amp;amp;linkCode=as2&amp;amp;tag=bernasconi-20&amp;amp;linkId=80c674d79492930f98884aa082b4256f"&gt;microphone arm&lt;/a&gt;, and &lt;a href="https://www.amazon.com/gp/product/B006JH8T3S/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B006JH8T3S&amp;amp;linkCode=as2&amp;amp;tag=bernasconi-20&amp;amp;linkId=7b85166c955a9d023c1ecc6b21fd7907"&gt;a Logitech C920 webcam&lt;/a&gt;. In retrospective, I would not invest as much money in my equipment early on.&lt;/p&gt;

&lt;p&gt;To get a good result, &lt;strong&gt;you need to understand how to use your equipment&lt;/strong&gt;. The more advanced it gets, the more complicated it is. I am glad that I bought a USB microphone instead of getting an XLR microphone. An XLR microphone would require additional hardware to plug it into a computer.&lt;/p&gt;

&lt;p&gt;On the other side, the difference between the sound quality of a 50$ microphone and a 200$ microphone is not that big. As long as you do not record your voice using the webcam or an internal notebook webcam, &lt;strong&gt;your voice over audio quality will be good enough&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Don’t forget that the &lt;strong&gt;echo in your room&lt;/strong&gt; is still a problem if you buy the most expensive microphone. So maybe work on that first? But again, don’t invest too much money at the beginning of your journey.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hint:&lt;/strong&gt; I purchased a 100$ webcam, but decided not to put a face cam into my tutorial. I could have invested that money into something else, for example, a software license or to pay a visual artist to do graphics for me.&lt;/p&gt;

&lt;h1&gt;
  
  
  3. Why You Should Create a Video Schedule
&lt;/h1&gt;

&lt;p&gt;Something I want to do in the future is to &lt;strong&gt;have a content schedule&lt;/strong&gt;. What I mean by that is taking the time to plan videos for three months in advance.&lt;/p&gt;

&lt;p&gt;First, you &lt;strong&gt;create a spreadsheet&lt;/strong&gt; with the weeks of the year and the video titles. The goal is to set time aside to fill in the schedule in advance and execute on that plan.&lt;/p&gt;

&lt;p&gt;[IMAGE]&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ir5cbTgd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2019/12/VideoSchedule.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir5cbTgd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2019/12/VideoSchedule.png" alt="Video Schedule"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Having a schedule allows you to &lt;strong&gt;focus on creating the content&lt;/strong&gt; instead of planning the content. It is a hack to &lt;strong&gt;separate planning from executing&lt;/strong&gt;, and it should help you become more productive because once you sit down to create a video, you know what topic you talk about next.&lt;/p&gt;

&lt;p&gt;Every week when your publication day comes closer and closer, you’ll feel uncomfortable if you haven’t started working on your video, and &lt;strong&gt;it naturally becomes a priority for you&lt;/strong&gt; to start working on that video. Otherwise, you won’t make your plan. And guess what?! You won’t like that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hint:&lt;/strong&gt; Do not plan too far ahead, because you might want to change direction, like doubling down on content that works for your channel or to follow a trend. A plan is a plan; it does not mean you cannot alter it.&lt;/p&gt;

&lt;h1&gt;
  
  
  4. Understand the Real Value of Thumbnails
&lt;/h1&gt;

&lt;p&gt;Most YouTubers want to make you believe that &lt;strong&gt;you have to have the best thumbnails&lt;/strong&gt; to get clicks on your videos. It might be right for people who search for content on YouTube that they will &lt;strong&gt;more likely&lt;/strong&gt; click on an appealing Thumbnail than on a default thumbnail. Granted.&lt;/p&gt;

&lt;p&gt;But when you start a channel, I think the most important thing is to &lt;strong&gt;get out as much quality content as possible&lt;/strong&gt; as fast as you can. Sure, thumbnails are essential, but if you do not have enough content, it is tough to make enough watch time to become eligible for monetization.&lt;/p&gt;

&lt;p&gt;Thumbnails look different from niche to niche. Also, you need to decide if you want your thumbnails to fit the style of your niche, or if you want to do something different and stand out with your videos on the YouTube search result pages.&lt;/p&gt;

&lt;p&gt;In my opinion, it is not important how you make that decision, but make sure to choose a strategy, create a template, and &lt;strong&gt;stick with your style&lt;/strong&gt; long enough to see if it works for you.&lt;/p&gt;

&lt;p&gt;If your thumbnail strategy works for you – great, if it does not, &lt;strong&gt;make a change and try something different&lt;/strong&gt;. YouTube offers enough analytics to let you make informed &lt;strong&gt;data-based decisions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But please, don’t get obsessed with creating thumbnails to the extent that you do not have time left to create new content for your channel. That won’t take you any further.&lt;/p&gt;

&lt;h1&gt;
  
  
  5. What’s the Best Way to Monetize?
&lt;/h1&gt;

&lt;p&gt;I am currently &lt;strong&gt;not making any money&lt;/strong&gt; from my &lt;a href="https://youtube.com/claudiobernasconi"&gt;YouTube channel&lt;/a&gt;. When I will reach the monetization requirements and enable ads on my videos, I expect to make around &lt;strong&gt;1$ a day&lt;/strong&gt;. It is not a massive amount if you don’t have thousands of views per day.&lt;/p&gt;

&lt;p&gt;Let me tell you that most CPMs (Cost per thousand ad impressions) are &lt;strong&gt;between 2$ and 10$&lt;/strong&gt; depending on the niche and how competitive the ad space is for your topic.&lt;/p&gt;

&lt;p&gt;It means that if you have 1000 video views per day, you’ll end up receiving between 2$ and 10$ that day. It is not anything, but you won’t make a living off of 1000 video views per day (depending on where you live).&lt;/p&gt;

&lt;p&gt;If monetization is the reason for your channel, I’d suggest trying something else than relying on YouTube ad revenue. For example, you could try to &lt;strong&gt;sell your own products&lt;/strong&gt;, sell merchandise, or try to do affiliate marketing by putting links to other people’s products in your video description and mention it in your videos.&lt;/p&gt;

&lt;h1&gt;
  
  
  6. More Content Is Better Content
&lt;/h1&gt;

&lt;p&gt;Sacrificing quality over quantity is not what I talk about here. But let me tell you that when you start a new channel from scratch, you need to get content into the channel as much as you can.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The more content you have&lt;/strong&gt; on your channel, the &lt;strong&gt;higher the chance becomes&lt;/strong&gt; that people on YouTube will find your channel. If they enjoy watching your video, they’ll eventually subscribe and continue to view your content.&lt;/p&gt;

&lt;p&gt;My perception is that &lt;strong&gt;quantity brings in new people, while quality makes them subscribe&lt;/strong&gt;, come back, and engage with your content in the future.&lt;/p&gt;

&lt;h1&gt;
  
  
  7. What Video-Editing Software Should You Use?
&lt;/h1&gt;

&lt;p&gt;If you are new to video creation, you might have no idea what software you need to create videos, and if you start searching for software on Google, &lt;strong&gt;you will get overwhelmed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Should you use something cheap or free like &lt;strong&gt;Windows Moviemaker or iMovie for Macs&lt;/strong&gt;? Or should you learn a more professional video-editing software like &lt;strong&gt;Adobe Premiere Pro, Sony Vegas, DaVinci Resolve&lt;/strong&gt;, or whatever?!&lt;/p&gt;

&lt;p&gt;That’s at least how I felt I had when I started creating videos more than two years ago. Yes, I already started creating videos before &lt;a href="https://www.claudiobernasconi.ch/2019/12/04/365-days-of-building-a-software-developer-channel-on-youtube/"&gt;I launched my YouTube channel in December 2018&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you don’t know where to start, have no preference, and are on a budget, &lt;strong&gt;I recommend going with DaVinci Resolve&lt;/strong&gt;. You can read a lot about &lt;a href="https://www.claudiobernasconi.ch/2019/06/19/why-i-use-davinci-resolve-15-for-video-editing/"&gt;why I switched from Adobe Premiere Pro to DaVinci&lt;/a&gt; Resolve in another article.&lt;/p&gt;

&lt;h1&gt;
  
  
  8. Should I Switch to Another Video Editor?
&lt;/h1&gt;

&lt;p&gt;Many people who think about starting a YouTube channel do not know which video editing software they should choose. I am convinced by now that &lt;strong&gt;there is no best software&lt;/strong&gt; and that it depends on the kind of videos a creator wants to make.&lt;/p&gt;

&lt;p&gt;Nonetheless, I would suggest &lt;strong&gt;choosing a tool and sticking with it&lt;/strong&gt;. If you know a tool, stick with it and use it. If you’re on a budget and want to use a powerful tool, &lt;a href="https://www.claudiobernasconi.ch/2019/06/19/why-i-use-davinci-resolve-15-for-video-editing/"&gt;I cannot recommend DaVinci Resolve&lt;/a&gt; enough. It is free, offers many features, and for me, it was easy to learn the basics.&lt;/p&gt;

&lt;p&gt;If you learned something else like Windows Moviemaker or iMovie and it does everything you need, stick with it. &lt;strong&gt;There is no need to learn new tools if you don’t get something out of it&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;You’d be better off &lt;strong&gt;creating content&lt;/strong&gt; than wasting time looking for another software solution to solve a problem that your current tool already solves.&lt;/p&gt;

&lt;h1&gt;
  
  
  9. Don’t Get Overwhelmed by the Numbers
&lt;/h1&gt;

&lt;p&gt;When you start your YouTube journey, you are &lt;strong&gt;at risk of starring at numbers&lt;/strong&gt; instead of creating content. &lt;/p&gt;

&lt;p&gt;It is crucial to have an eye on your analytics to makes adjustments to your strategy. &lt;strong&gt;Making a decision based on facts&lt;/strong&gt; instead of personal opinion is always a great idea! But make sure you are not caught up in looking at your stats for longer than you spend time producing your content.&lt;/p&gt;

&lt;p&gt;The stats I recommend paying attention to in the beginning is &lt;strong&gt;how many videos you upload&lt;/strong&gt; and &lt;strong&gt;how many views those videos get&lt;/strong&gt;. If you manage to create content that people like, double down on that type of content.&lt;/p&gt;

&lt;p&gt;If a video does underperform compared to another of your videos, take a look at the &lt;strong&gt;CTR&lt;/strong&gt; (click-through-rate). If it is lower compared to your other video, your thumbnail might need some improvements.&lt;/p&gt;

&lt;p&gt;Otherwise, maybe your video targets a competitive keyword, and you cannot outrank the established channels. If that is the case, maybe &lt;strong&gt;niche down further&lt;/strong&gt; and try to create content for a keyword that is less competitive. &lt;/p&gt;

&lt;p&gt;In the end, it’s your goal to &lt;strong&gt;rank number 1 for your keyword&lt;/strong&gt; if somebody searches for that keyword on YouTube.&lt;/p&gt;

&lt;h1&gt;
  
  
  10. Make Sure You Love the Process
&lt;/h1&gt;

&lt;p&gt;It will take &lt;strong&gt;many, many videos&lt;/strong&gt; until you finally start getting feedback on your content. People will eventually start liking your videos, subscribe or leave a comment. But &lt;strong&gt;it takes time&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You need to &lt;strong&gt;love the process&lt;/strong&gt; of researching a topic, writing a script, recording and editing the video, recording a voice-over, and putting everything together – &lt;strong&gt;over and over again&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You even need to like the process of improving your process of creating videos. You need to become better at everything.&lt;/p&gt;

&lt;p&gt;Make sure you produce videos in a niche where you relate to the content. People will not enjoy watching your content if you don’t love creating it. Also, who wants to have a successful channel that forces you to create more and more videos that you hate creating?&lt;/p&gt;

&lt;p&gt;Keep in mind that creating YouTube videos is a lot of work and that everything that takes &lt;strong&gt;a lot of work&lt;/strong&gt; is going to be more comfortable when you are passionate about what you do.&lt;/p&gt;

&lt;h1&gt;
  
  
  BONUS TIP: Branding Is Essential, but Not Everything
&lt;/h1&gt;

&lt;p&gt;I know you want to have the best-looking logo, header image, and intro in your videos. I do think they’re necessary. I used a lot of time to get mine right. At least, they are acceptable for me to use them in my videos right now.&lt;/p&gt;

&lt;p&gt;The truth is that &lt;strong&gt;you can always invent and improve&lt;/strong&gt; your graphics over time. If in doubt, use your time to &lt;strong&gt;create quality content&lt;/strong&gt; and not to improve your visuals by 1% using 10 hours of your time.&lt;/p&gt;

&lt;p&gt;If you are not a visual designer, or if you do not want to get hold off creating content, consider hiring a designer on Fiverr or Upwork.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;YouTube is the second biggest search engine&lt;/strong&gt; in the world, and it cares mostly about content. Every video that holds the viewer on the YouTube platform is a win because YouTube can serve more ads to the user. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Become YouTube’s best partner by providing content that people love consuming.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you read that far and want to know more about my journey, consider subscribing to my &lt;a href="https://youtube.com/claudiobernasconi"&gt;YouTube channel&lt;/a&gt; and follow me on &lt;a href="https://twitter.com/CHBernasconiC"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://www.claudiobernasconi.ch/2019/12/11/10-tips-for-your-developer-youtube-channel/"&gt;claudiobernasconi.ch&lt;/a&gt; on December 11th, 2019.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Also, as an Amazon Associate, I earn from qualifying purchases.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>career</category>
      <category>learning</category>
    </item>
    <item>
      <title>365 Days of Building a Software Developer Channel on YouTube</title>
      <dc:creator>Claudio Bernasconi</dc:creator>
      <pubDate>Fri, 06 Dec 2019 12:34:20 +0000</pubDate>
      <link>https://forem.com/claudiobernasconi/365-days-of-building-a-software-developer-channel-on-youtube-5eo</link>
      <guid>https://forem.com/claudiobernasconi/365-days-of-building-a-software-developer-channel-on-youtube-5eo</guid>
      <description>&lt;p&gt;It is almost a year since I uploaded the first video to my YouTube channel in December 2018. Considering the &lt;strong&gt;40+ hours&lt;/strong&gt; I put in for my first video, it is safe to say that I started working on my YouTube channel more than a year ago.&lt;/p&gt;

&lt;p&gt;In this article, I am going to &lt;strong&gt;share the insights I gained from growing my channel from zero&lt;/strong&gt;, how my channel growth in the last 12 months was, and what the future of the channel will be.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fnSmDhLq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2018/12/youtube-channel-banner.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fnSmDhLq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2018/12/youtube-channel-banner.png" alt="My YouTube channel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to think about starting your own YouTube channel, or if you are interested in taking a look behind the curtains, this is for you.&lt;/p&gt;

&lt;h1&gt;
  
  
  How it all got started
&lt;/h1&gt;

&lt;p&gt;The first video took me a lot of time to create. I &lt;strong&gt;worked on and off for about three weeks&lt;/strong&gt; for my first video. Eventually, I uploaded my first video titled &lt;a href="https://www.youtube.com/watch?v=fvPPlY31glk"&gt;Introduction to Dependency Injection&lt;/a&gt; in C# on December 14th, 2018.&lt;/p&gt;

&lt;p&gt;About a year later, I think it is time to share my thoughts about the success or failure of the channel and what I learned about creating a YouTube channel from nothing during the last year.&lt;/p&gt;

&lt;p&gt;I wrote about the first few weeks up to &lt;a href="https://www.claudiobernasconi.ch/2019/03/20/starting-a-youtube-channel-as-a-software-developer/"&gt;three months of my YouTube channel&lt;/a&gt; earlier this year on my blog. You might want to read that article first to get a detailed overview of how and why I started my YouTube channel.&lt;/p&gt;

&lt;p&gt;After being &lt;a href="https://www.claudiobernasconi.ch/2019/06/26/being-on-youtube-for-6-months/"&gt;half a year on YouTube&lt;/a&gt; and having uploaded my 10th video by the end of June 2019, I wrote another article highlighting the experience and the statistics of my channel after being active for six months.&lt;/p&gt;

&lt;p&gt;It was also the time that I switch from Adobe Premiere Pro CS 6 to DaVinci Resolve 15 for editing my videos. Later this year, I updated DaVinci Resolve to the most recent version 16 release.&lt;/p&gt;

&lt;p&gt;I am delighted with the choice I made. You can read a lot about &lt;a href="https://www.claudiobernasconi.ch/2019/06/19/why-i-use-davinci-resolve-15-for-video-editing/"&gt;why and how I changed the video editing tool&lt;/a&gt; in another article I wrote in June.&lt;/p&gt;

&lt;h1&gt;
  
  
  A planned and an unplanned break
&lt;/h1&gt;

&lt;p&gt;I always had in mind that I want to slow down during the Summer months. Summer is pretty short where I live, and I want to get the most out of it when it is there.&lt;/p&gt;

&lt;p&gt;I like outdoor activities a lot and most sports I do require me to go outside. It is unnecessary to say that activities like cycling, running, inline skating or walking, all are much more fun when the weather is warm and sunny.&lt;/p&gt;

&lt;p&gt;I also planned a &lt;strong&gt;5-week trip to the west coast of the United States&lt;/strong&gt; starting at the end of September until the end of October. What I forget is that a 5-week journey needs to be planned and structured in advance. &lt;/p&gt;

&lt;p&gt;Because I decided to organize everything myself, I had to put in the work to plan the route, book hotels and a rental car, make sure everything with the flight and the immigration will work smoothly, etc. It was a lot more work than I expected. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LXJ0bq_Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2019/12/Arches.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LXJ0bq_Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2019/12/Arches.jpg" alt="Delicate Arch, Arches National Park, UT"&gt;&lt;/a&gt;&lt;/p&gt;
Delicate Arch, Arches National Park, UT



&lt;p&gt;To be fair to myself, this is/was &lt;strong&gt;my first longer trip to a foreign country&lt;/strong&gt; in my life, and I learned a lot not only during the vacation but also while preparing for it.&lt;/p&gt;

&lt;p&gt;Right before leaving for the United States, I decided to build an electric standing desk for my workplace. I will share this exciting journey soon. If you don’t want to miss out on this beautiful new setup, &lt;a href="https://twitter.com/CHBernasconiC"&gt;follow me on Twitter&lt;/a&gt;, where I will share all about it soon.&lt;/p&gt;

&lt;p&gt;In the end, what was planned to be a 6-week summer break and a five-week vacation in Autumn became glued together to a 4-month break, including vacation preparation from July till the end of October.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hint:&lt;/strong&gt; Don’t beat yourself up, if real life happens, and you need to take a break from YouTube. Nonetheless, &lt;strong&gt;come back strong&lt;/strong&gt; after that break and continue to produce as much content as you can.&lt;/p&gt;

&lt;h1&gt;
  
  
  Getting back on track
&lt;/h1&gt;

&lt;p&gt;After coming back from the United States, I got back into video production mode. I created and uploaded my 11th video about &lt;a href="https://www.youtube.com/watch?v=k-5_xI3W0dk"&gt;How to Create HTTP Requests in .NET Core&lt;/a&gt; in early November 2019.&lt;/p&gt;

&lt;p&gt;I plan to produce and upload &lt;strong&gt;two or three more videos&lt;/strong&gt; before the end of the year. Most likely, this will require me to put in more work than I wanted before Christmas – but if you would like to reach your goals, you have to put in the work they say.&lt;/p&gt;

&lt;h1&gt;
  
  
  The channel growth
&lt;/h1&gt;

&lt;p&gt;The &lt;a href="https://www.claudiobernasconi.ch/2019/06/26/being-on-youtube-for-6-months/"&gt;last detailed report about my channel&lt;/a&gt; was at the 6-month mark. I had accumulated around &lt;strong&gt;450 hours of watch time&lt;/strong&gt;, and I had &lt;strong&gt;200 subscribers&lt;/strong&gt; on my channel.&lt;/p&gt;

&lt;p&gt;At the time of writing this article, I just passed the &lt;strong&gt;500 subscriber&lt;/strong&gt; mark, and the accumulated watch time in the last 365 days is about &lt;strong&gt;1400 hours&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OSK5qK-t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2019/12/YouTubeStats365.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OSK5qK-t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2019/12/YouTubeStats365.jpg" alt="Watch time per day (in hours) over the last 365 days"&gt;&lt;/a&gt;&lt;/p&gt;
YouTube: Watch time per day (in hours) over the last 365 days



&lt;p&gt;Comparing the statistics of the 6-month mark with the 12-month mark, I see a &lt;strong&gt;2.5x increase of the subscriber count&lt;/strong&gt; and a &lt;strong&gt;3x increase of the overall watch time&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Although I set the bar high to reach the monetization requirements by the end of the year (which require me to have at least 1000 subscribers and 4000 hours watch time during the last 365 days), I am satisfied with the results.&lt;/p&gt;

&lt;p&gt;When I take a look at the last 60 days, the 510 watch hours break down to &lt;strong&gt;8.5 hours a day&lt;/strong&gt;, which is already pretty close to the &lt;strong&gt;11 hours a day required by the monetization requirements&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Especially when I think about the extended break I took from producing content for YouTube, &lt;strong&gt;the channel growth is satisfying&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  YouTube promotes great content
&lt;/h1&gt;

&lt;p&gt;I have read many comments from &lt;strong&gt;small YouTubers complaining that they do not get enough views&lt;/strong&gt; from YouTube and that YouTube favors more prominent channels over (their) smaller channels.&lt;/p&gt;

&lt;p&gt;I believe it is true that once the ball is rolling, everything becomes simpler. But &lt;strong&gt;saying that YouTube does not support smaller creators is entirely wrong.&lt;/strong&gt; I have a few videos that are optimized for YouTube Search and that are receiving great feedback. &lt;/p&gt;

&lt;p&gt;Those videos are being watched enough by the audience that YouTube starts suggesting those videos to a broader selection of people. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is what makes YouTube a magic platform.&lt;/strong&gt; People that are interested in my content will eventually find it. I do not have to care about finding the viewers, I need to focus on creating great videos, and YouTube will be my partner in crime to find the audience. There is no short path to success, but the quality and consistency will win in the end.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hint:&lt;/strong&gt; Creating a (series) playlist allows you to tell YouTube that some of your videos belong together. If your viewers watch your video, they might also be interested in your next video in the playlist.&lt;/p&gt;

&lt;p&gt;Playlists are a great tool to communicate to YouTube that people might be interested in another video of yours. Use them to your advantage.&lt;/p&gt;

&lt;h1&gt;
  
  
  Retrospective on the first year of my YouTube channel
&lt;/h1&gt;

&lt;p&gt;I managed to produce &lt;strong&gt;11 videos within my first year&lt;/strong&gt; on YouTube. Initially, I set a goal to upload every other week, which would presumably result in having around 25 videos after a year. It turns out the goal was not realistic, or I did not reach it – if you want to judge me.&lt;/p&gt;

&lt;p&gt;Nonetheless, I am &lt;strong&gt;committed to continuing building my YouTube channel&lt;/strong&gt; in my second year. I saw that it could work. People watch valuable videos, and I can create content that people want to watch.&lt;/p&gt;

&lt;p&gt;I have a few videos that generated a crazy amount of views. I could not have imagined a year ago that &lt;a href="https://www.youtube.com/watch?v=lfRnoSkUvKI"&gt;one of my videos about the new Visual Studio 2019 features&lt;/a&gt; would reach &lt;strong&gt;8500+ views&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When I created this particular video, I was aware that the timing would be right because Visual Studio 2019 is about to be released. Still, I did not expect that so many people will end up watching my video when there are many other videos about the topic.&lt;/p&gt;

&lt;h1&gt;
  
  
  The future of my YouTube channel
&lt;/h1&gt;

&lt;p&gt;Although I set a goal &lt;strong&gt;to reach the monetization requirements by the end of 2019&lt;/strong&gt; in &lt;a href="https://www.claudiobernasconi.ch/2019/06/26/being-on-youtube-for-6-months/"&gt;my article from June&lt;/a&gt;, this is still my next big goal. I like challenging goals, but they should also be achievable. Otherwise, I lose motivation.&lt;/p&gt;

&lt;p&gt;Therefore, I set the goal to &lt;strong&gt;reach the monetization requirements by the end of Q1 2020&lt;/strong&gt;. I also set the goal to upload every other week. It will require me to put in more work, but it will also help the channel grow as desired.&lt;/p&gt;

&lt;p&gt;More content means that more potential viewers will find my videos, and every new video contributes to the overall goal to reach monetization.&lt;/p&gt;

&lt;p&gt;I also learned a lot about video editing, voice-over recording, screen recording, and video planning. All those learnings contribute to a more streamlined process and should &lt;strong&gt;reduce the amount of work required&lt;/strong&gt; to put out new content.&lt;/p&gt;

&lt;h1&gt;
  
  
  How is this ever going to be sustainable?
&lt;/h1&gt;

&lt;p&gt;The honest answer is – &lt;strong&gt;I am not sure if it will ever be&lt;/strong&gt;. It is a lot of fun creating those videos. Creating videos is a creative process that requires different skills compared to software development. I learned a lot that I would not have learned if it was not for my YouTube channel.&lt;/p&gt;

&lt;p&gt;I also believe that the documentation of this process, this blog, helps other people getting a picture of how starting a YouTube channel from scratch really is and maybe helps them avoid common pitfalls or setting realistic goals. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you are a developer and consider starting your own YouTube channel&lt;/strong&gt;, or you already have your channel, check out &lt;a href="https://www.facebook.com/groups/829620334056633/"&gt;this Facebook group&lt;/a&gt; where you can become part of a group of highly motivated people.&lt;/p&gt;

&lt;p&gt;One thing that I care about is &lt;strong&gt;how much value I provide&lt;/strong&gt; with my contributions. I believe that my videos help people learning about software development that could not afford an expensive online course or a subscription to a membership program to learn how to program.&lt;/p&gt;

&lt;p&gt;After all, &lt;strong&gt;my videos are watchable for free&lt;/strong&gt;, and I believe that this opens up the chance for a big audience to learn something from me. There was no YouTube when I first learned how to program, and I comprehend that it can be a great source of quality information nowadays.&lt;/p&gt;

&lt;p&gt;If it works out and people continue to watch my videos, the channel might grow to a size that allows me to earn a side-income from the ad revenue, or maybe get a sponsorship deal. Both would support me to allocate more time to the channel, which, in return, will result in &lt;strong&gt;more free videos for the community&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  What makes a good video tutorial?
&lt;/h1&gt;

&lt;p&gt;I created 11 video tutorials so far, and in my opinion, there are three essential parts of a high-quality video tutorial:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Audio quality&lt;/strong&gt;. Most people believe that video quality is the most important aspect of a tutorial. In reality, people will bounce from your video if the audio quality is terrible, while they can live with a lower visual quality of the video.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scripting takes a lot of time&lt;/strong&gt; but ensures that a tutorial is on point and does not waste the watcher’s time. I believe that many people are happy with my tutorials because they get much value out of only a few minutes of video.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;If you have source code in your tutorial, make it available for people&lt;/strong&gt;. I would prefer if people write the code themselves, but the reality is that people are lazy. If you provide the source code with your video, people are more likely to play with your code and therefore learn something from you. If they learn something, they are more likely to follow your journey, subscribe to your channel, and will become a regular viewer in the future.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What do you think is the &lt;strong&gt;most important aspect of a high-quality tutorial video&lt;/strong&gt;? Let me know in the comments below, or tweet it @CHBernasconiC.&lt;/p&gt;

&lt;h1&gt;
  
  
  Closing thoughts
&lt;/h1&gt;

&lt;p&gt;Maybe I will look back to those articles in a few years with a smile in my face how different I thought at the beginning of the journey. I am excited to ride along on the YouTube journey during the next few months, and &lt;strong&gt;I will work hard&lt;/strong&gt; to achieve my goals.&lt;/p&gt;

&lt;p&gt;If you want to know more about me and my journey and follow along, consider &lt;a href="https://www.youtube.com/claudiobernasconi"&gt;subscribing to my YouTube channel&lt;/a&gt;, and follow me on &lt;a href="https://twitter.com/CHBernasconiC"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you have any questions about this article, about creating a YouTube channel, or anything else – please hit me up on &lt;a href="https://twitter.com/CHBernasconiC"&gt;Twitter&lt;/a&gt; or leave a comment below this article.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://www.claudiobernasconi.ch/2019/12/04/365-days-of-building-a-software-developer-channel-on-youtube/"&gt;claudiobernasconi.ch&lt;/a&gt; on December 4th, 2019.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>dotnet</category>
      <category>career</category>
      <category>learning</category>
    </item>
    <item>
      <title>Live Programming on Twitch Is Growing Fast</title>
      <dc:creator>Claudio Bernasconi</dc:creator>
      <pubDate>Thu, 06 Jun 2019 07:18:23 +0000</pubDate>
      <link>https://forem.com/claudiobernasconi/live-programming-on-twitch-is-growing-fast-19b0</link>
      <guid>https://forem.com/claudiobernasconi/live-programming-on-twitch-is-growing-fast-19b0</guid>
      <description>&lt;p&gt;Streaming on &lt;a href="https://www.twitch.tv/"&gt;Twitch&lt;/a&gt; has become very popular. What once was a hobby for only a few people has transformed into a big industry with countless full-time streamers.&lt;/p&gt;

&lt;p&gt;If I think about streamers and Twitch, I think about entertainment and gaming, most likely eSports. What started as a gaming platform has transformed into other fields, including programming.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Rise of Programming Channels
&lt;/h1&gt;

&lt;p&gt;There are more and more programming channels where software developers develop, test, and deploy software live in front of their community. Some developers involve their community and ask them for contributions. There are even game developers streaming on Twitch.&lt;/p&gt;

&lt;p&gt;While researching for this article about 500-3000 people were watching one of the programming channels. Sure, Fortnite, Dota or Counter-Strike have a more extensive fan base, but depending on the time and weekday 1200 people are not that bad at all.&lt;/p&gt;

&lt;p&gt;Twitch organized their channels in different categories. A streamer has to choose a category that fits his content. For gamers, it’s usually the game title their playing for example Fortnite. For technology related channels, there are two dedicated categories available. There is the &lt;a href="https://www.twitch.tv/directory/game/Science%20%26%20Technology"&gt;Science &amp;amp; Technology&lt;/a&gt; category, and there’s the &lt;a href="https://www.twitch.tv/directory/game/Basic%20Programming"&gt;Basic Programming&lt;/a&gt; category.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why Do People Watch Programming Channels?
&lt;/h1&gt;

&lt;p&gt;People like watching other people doing things online. It’s the main reason why people watch streamers like &lt;a href="https://www.twitch.tv/ninja"&gt;Ninja&lt;/a&gt; or &lt;a href="https://www.twitch.tv/Shroud"&gt;Shroud&lt;/a&gt; playing video games. They want to be entertained – they want to watch a show.&lt;/p&gt;

&lt;p&gt;Most streamers are online for several hours, which means the show is much longer than any regular tv series. People can be entertained for an extended period.&lt;/p&gt;

&lt;p&gt;Some people also want to learn from other gamers. Shroud, for example, is known for his outstanding aiming capabilities and his short reaction times. People think that if they watch a better player play the same game the play, they can learn something.&lt;/p&gt;

&lt;p&gt;I watch professional Counter-Strike players streaming on Twitch to find out lucrative spots on different maps and how to react to certain events during a match.&lt;/p&gt;

&lt;p&gt;One of the most exciting thing about streaming is that the community can interact with the streamer. If you enter a channel, you can take part in the discussion in the chat. Moderators keep the chat clean and remove people who do not respect the rules of a chat room. You can also ask a question which might get answered by the streamer.&lt;/p&gt;

&lt;h1&gt;
  
  
  How Do Streamers Make Money?
&lt;/h1&gt;

&lt;p&gt;You can donate money or subscribe to a channel for 5 dollars per month which both supports the streamer. Some streamers earn enough money through subscriptions that they can do it full-time.&lt;/p&gt;

&lt;p&gt;People return to their favorite streamers because they can see the person making progress. It’s interesting to see how other people play a game that you don’t have the time or money to play yourself. It’s also interesting to see how a player solves a level that you’re not able to do it yourself. You get tips for your next gaming session.&lt;/p&gt;

&lt;h1&gt;
  
  
  What’s the Difference between Live Streaming and Videos?
&lt;/h1&gt;

&lt;p&gt;It’s very interesting to see people creating software on Twitch. You can take part in a project and see how something gets built from the ground up.&lt;/p&gt;

&lt;p&gt;The most significant difference between videos on platforms like YouTube or Pluralsight is that not everything works as expected. Videos on those platforms are cut and errors removed from the final video.&lt;/p&gt;

&lt;p&gt;Usually, YouTube videos are too perfect. When I watch a video, everything works, and I feel like I am the only person who does not get all things right the first time.&lt;/p&gt;

&lt;p&gt;Watching a person live coding is an entirely different experience. You get to see all the errors, mistakes, and thoughts needed to create some piece of software. You also have the opportunity to ask questions while the person is doing something.&lt;/p&gt;

&lt;p&gt;You can also comment on videos or video courses, but the time it takes to get an answer is usually much longer compared to a question asked in the Twitch chat while the other person is working on the project.&lt;/p&gt;

&lt;h1&gt;
  
  
  How Can You Get Involved?
&lt;/h1&gt;

&lt;p&gt;If you are a software developer and want to get involved in Twitch, I would suggest to go to &lt;a href="https://www.twitch.tv/"&gt;Twitch.tv&lt;/a&gt; and browse through the available channels. I also included a list of streamers that are popular or that I can personally recommend at the end of this article.&lt;/p&gt;

&lt;p&gt;Maybe you want to take it a step further and want to live stream yourself? Great! I’d say that the programming community is still underrepresented on Twitch and that it’s possible to build a community yourself if you’re passionate about building software in the open.&lt;/p&gt;

&lt;p&gt;Try it and see if you like it.&lt;/p&gt;

&lt;h1&gt;
  
  
  Recommended Programming Channels
&lt;/h1&gt;

&lt;p&gt;In my opinion, any good article about programming on Twitch should include a few recommended channels.&lt;/p&gt;

&lt;p&gt;The following list contains programming channels that I either watch myself or that have a good reputation listed in no particular order.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/kentcdodds"&gt;Kent C. Dodds&lt;/a&gt;
JavaScript, web development, React, open source, node.js&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/shmellyorc"&gt;Shmellyorc&lt;/a&gt;
Game development, C#, Full stack development&lt;/li&gt;
&lt;li&gt;HardlyDifficult 
C# &amp;amp; Unitiy game development, C# development, Cryptocurrency&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://twitch.tv/csharpfritz"&gt;Jeff Fritz&lt;/a&gt;
C# .NET, .NET Core, Visual Studio&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/kasuken"&gt;Kazuken&lt;/a&gt;
ASP.NET Core, JavaScript, web development, technology talk&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/lana_lux"&gt;Lana Lux&lt;/a&gt;
Game development in Unity using C#&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/themichaeljolley"&gt;Mike Jolley&lt;/a&gt;
VS Code theming, VS Code extension development, C++, PowerShell&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/davidortinau"&gt;David Ortinau&lt;/a&gt;
User experience, Xamarin.Forms, MVVM, Native Mobile development&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/TimBeaudet"&gt;Tim Beaudet&lt;/a&gt;
C++, Python, TurtleBrains game development&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/JamesMontemagno"&gt;James Montemagno&lt;/a&gt;
Xamarin.Forms, SignalR&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/DevChatter"&gt;DevChatter&lt;/a&gt;
C#, ASP.NET Core, web development&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/ardalis"&gt;Ardalis&lt;/a&gt;
ASP.NET Core, Azure&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.twitch.tv/RamblingGeek"&gt;RamblingGeek&lt;/a&gt;
C#, Azure, Docker, bot development&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re a streamer yourself, reach out to me, and I will add you to the list.&lt;/p&gt;

&lt;p&gt;In addition to this list, there is a popular article on Medium which features many &lt;a href="https://medium.com/swlh/learn-to-code-with-live-streams-from-the-best-developers-932dcfdbb87"&gt;more popular and exciting programming channels&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What do you think about programming on Twitch? Let me know in the comments below.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://www.claudiobernasconi.ch/2019/05/29/live-programming-on-twitch-is-growing-fast/"&gt;claudiobernasconi.ch&lt;/a&gt; on May 29th, 2019.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>coding</category>
      <category>learning</category>
    </item>
    <item>
      <title>How I Earned 2000$ with a Mobile App</title>
      <dc:creator>Claudio Bernasconi</dc:creator>
      <pubDate>Mon, 03 Jun 2019 08:24:48 +0000</pubDate>
      <link>https://forem.com/claudiobernasconi/how-i-earned-2000-with-a-mobile-app-29cj</link>
      <guid>https://forem.com/claudiobernasconi/how-i-earned-2000-with-a-mobile-app-29cj</guid>
      <description>&lt;p&gt;I usually blog about .NET related topics on this blog. I got asked by a friend, why I did never blog about my mobile app, and how I earned 2000$+ with it. Well, I guess it’s true, I never talked about it, and I never wrote about it (&lt;a href="https://www.claudiobernasconi.ch/2015/04/02/10-reasons-why-you-should-upgrade-your-existing-android-application/" rel="noopener noreferrer"&gt;except this article from 2015&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;I have to admit that my mobile app is not a .NET app, but an Android app written in Java and published in the Google Play Store.&lt;/p&gt;

&lt;p&gt;It’s finally time to reveal all the secrets that made me rich so you can become wealthy too – I’m kidding. This article gives insights into my experience programming, marketing, selling, and rewriting my first mobile app.&lt;/p&gt;

&lt;p&gt;I also share what I’ve learned during the process and what I would do the same again, and what I would do differently in another mobile app project.&lt;/p&gt;

&lt;h1&gt;
  
  
  Did I really earn 2000$?
&lt;/h1&gt;

&lt;p&gt;Let’s talk about money first. &lt;strong&gt;Yes, I made more than 2000$ in sales&lt;/strong&gt; with a simple mobile app in the Google Play Store. Let’s dive deeper into what money went into my pocket.&lt;/p&gt;

&lt;p&gt;Back in November 2010, I released my first (and only) mobile app to production. After the initial release, I made several updates and a complete rewrite in Spring 2017.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.claudiobernasconi.ch%2Fwp-content%2Fuploads%2F2019%2F05%2FApp_sales.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.claudiobernasconi.ch%2Fwp-content%2Fuploads%2F2019%2F05%2FApp_sales.png" alt="App Sales"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s take a look at the earnings. The following data shows the sales, which means that 30% of the amount went to Google, and 70% of the amount went into my pocket.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.claudiobernasconi.ch%2Fwp-content%2Fuploads%2F2019%2F05%2FApp_sales_total.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.claudiobernasconi.ch%2Fwp-content%2Fuploads%2F2019%2F05%2FApp_sales_total.png" alt="Total Sales"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My currency is CHF, and all the data is provided in CHF. At the time of this writing, the USD is 1:1 to CHF, so it makes it easy for people to understand, and I do not need to convert those numbers. I use USD in this article.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Year&lt;/th&gt;
&lt;th&gt;Sales&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2010*&lt;/td&gt;
&lt;td&gt;303.85$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2011&lt;/td&gt;
&lt;td&gt;1178.08$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2012&lt;/td&gt;
&lt;td&gt;451.08$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2013&lt;/td&gt;
&lt;td&gt;209.38$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2014&lt;/td&gt;
&lt;td&gt;122.35$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2015&lt;/td&gt;
&lt;td&gt;113.19$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2016&lt;/td&gt;
&lt;td&gt;42.48$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2017&lt;/td&gt;
&lt;td&gt;18.21$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2018&lt;/td&gt;
&lt;td&gt;18.15$&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2019&lt;/td&gt;
&lt;td&gt;3.90$&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;*&lt;em&gt;only November/December&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As you can see, I made most of the profit in the early months after the release. Within the first 14 months (end of 2010 and the complete 2011) I made about 1480$ in sales.&lt;/p&gt;

&lt;p&gt;In total, I made about &lt;strong&gt;2179$ in sales&lt;/strong&gt;, which is a net &lt;strong&gt;profit of 1525$&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It also means that between 2012 and today I only made about 700$. There are a few things I learned that I want to share with you:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Make sure that &lt;strong&gt;your app is working and feature-rich&lt;/strong&gt; when you first launch it. Sure, you might use agile development practices, but your app should be working and have a minimal feature set. My app got pushed in the market, and therefore, I got many downloads in the first few months. If the app did not solve a real problem, people would not pay for it, and the store would not have recommended my app to new people.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Developing an app is not only writing its first version and never touch it again. It’s not a money machine like real estate or something else like that. I did not care about the app after it’s launch, which was a mistake. I would suggest planning to work on the app after it’s release as long as it’s in the store. I only did a few bugfixes, but I never made any more significant improvements, and I never added additional features. I guess that’s the reason why &lt;strong&gt;after only 1 year the sales dropped significantly&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;You can make some side money&lt;/strong&gt;, but you won’t become rich from a single app. Sure, if you build the next Uber with an entire engineering team and funding, the sky is the limit.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;But if you’re an independent developer without a team and you develop your app in the free time don’t expect to make that much money from it. I have to say that 1000$ per years seems pretty neat to me, and I did never expect to make more than a few dollars out of it.&lt;/p&gt;

&lt;h1&gt;
  
  
  The app I made
&lt;/h1&gt;

&lt;p&gt;I made &lt;a href="https://play.google.com/store/apps/details?id=ch.claudiobernasconi.carParking" rel="noopener noreferrer"&gt;CarParking Schweiz&lt;/a&gt;, which is a directory for parking lots in Switzerland. If you open the app, you can see which parking lots are open and how much parking space is available.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.claudiobernasconi.ch%2Fwp-content%2Fuploads%2F2019%2F05%2Fcity.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.claudiobernasconi.ch%2Fwp-content%2Fuploads%2F2019%2F05%2Fcity.jpg" alt="CarParking Schweiz Screenshot 2"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;More screenshots available on &lt;a href="(https://play.google.com/store/apps/details?id=ch.claudiobernasconi.carParking)"&gt;Google Play&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Besides the listing, I also included a map view that shows all the parking lots, and if you press on a parking lot, you can start navigation to it using Google Maps.&lt;/p&gt;

&lt;p&gt;The app has a one-time price tag of 1.95$. I don’t like subscriptions myself and I think most consumers do neither. Therefore, I decided to go with a paid app with an upfront cost. 2$ is a small amount in my country and I might even be able to raise the price, which I never did.&lt;/p&gt;

&lt;h1&gt;
  
  
  How I got the idea
&lt;/h1&gt;

&lt;p&gt;I wanted to create something for myself that helps me finding a parking lot when I visit different areas in Switzerland. In the cities, there is often traffic jam, and I was sick of searching for parking opportunities. I wanted to jump into my car and drive to the closest available parking lot to my destination.&lt;/p&gt;

&lt;p&gt;What I learned from it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;It is crucial to have a clear goal in mind. Your app should solve a problem for the user. It does not matter how hard that problem is to solve; it is essential that the app solves the problem.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The motivation to finish the project was to be able to solve a real-world problem for me and to learn how to develop mobile apps. At the time of the release of this app, mobile apps were pretty new, and I wanted to gain some experience developing a mobile app.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  How I developed the app
&lt;/h1&gt;

&lt;p&gt;Back in the days Eclipse and the Android Developer Tools (ADT) were the way to go. I installed that software on my computer, and I was ready to go.&lt;/p&gt;

&lt;p&gt;Everything I needed to know to build an app was the programming skills that I already had and the online documentation of the Android platform, and of course, an Android device to test the app. Back in the days, I used an &lt;a href="https://en.wikipedia.org/wiki/HTC_Desire" rel="noopener noreferrer"&gt;HTC Desire&lt;/a&gt;, which was my first smartphone.&lt;/p&gt;

&lt;h1&gt;
  
  
  The rewrite in 2017
&lt;/h1&gt;

&lt;p&gt;After a few years, I got back to the project and thought about modernizing the app. There were new Google Maps APIs I had to use. The old API was retiring, and there were other platform changes like the physical buttons that disappeared from the devices.&lt;/p&gt;

&lt;p&gt;I got back to the code base and let me tell you; it was a pain to develop with Eclipse and ADT. The tools were bad in 2010, but they did not improve in 7 years. At least not to something I wanted to use. I was used to Visual Studio, which developed a lot and offered many more features.&lt;/p&gt;

&lt;p&gt;It was time to try the new &lt;a href="https://developer.android.com/studio" rel="noopener noreferrer"&gt;Android Studio&lt;/a&gt;. I installed Android Studio and decided that the app was that old that I would write it from zero. I opened up the IDE and started working. Except for a few resources, I completely rewrote the app to fit the current platform requirements.&lt;/p&gt;

&lt;p&gt;When I completed the project and released version 2 of my app, I hoped that it would gain traction again and make a few sales. As it turned out and as I described above, it did not go according to plans.&lt;/p&gt;

&lt;h1&gt;
  
  
  Things I would consider for a new project
&lt;/h1&gt;

&lt;p&gt;Going into a new project I would consider the following key learnings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Make sure to solve a real-world problem. If the app solves a problem, there is a potential market for it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your app has to solve the problem well. There are millions of apps in the store, and you want people to install your app. It has to stand out and do it better, faster, or in a unique way. Marking people would refer to this point as a &lt;a href="https://en.wikipedia.org/wiki/Unique_selling_proposition" rel="noopener noreferrer"&gt;unique selling proposition (USP)&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You can make money as I explained in detail above. People are willing to spend money on apps that solve their problems. Sure, there might be free apps available, and if you do not want to make money, you can always create a free app.&lt;br&gt;
But if you want to sell your app, make sure to get the pricing right. In my case, I sell my app for 1.95$, which worked for me pretty well. I have to admit that I never tried a higher price. Make sure to test what works for you best and do not hesitate to change the price often when your app is new.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Completing a project like developing an app from start to finish helped me to understand the project lifecycle of the software in general. I had to do everything from planning to designing, developing, and marketing on my own, and I have learned a lot. This knowledge helped me a lot to understand business processes in the company I was working for in my day job.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Technology choices
&lt;/h1&gt;

&lt;p&gt;If I created a new mobile app today, I would try Xamarin. Microsoft acquired Xamarin in 2016. Xamarin development was very pricy before Microsoft bought it. After the acquisition, most of the resources such as the &lt;a href="https://university.xamarin.com/" rel="noopener noreferrer"&gt;Xamarin University&lt;/a&gt;, became free for developers.&lt;/p&gt;

&lt;p&gt;Also, one of the downsides of my Java code for the Android platform is that the app only runs on Android smartphones and tablets. It was always my goal to bring the app to the iPhone, but without a Mac, I could not compile the app, and I would have had to rewrite the code in another programming language.&lt;/p&gt;

&lt;p&gt;Xamarin and Xamarin Forms offer a compelling platform to develop a single code base, cross-compile to either Android or iOS, both resulting in a native app for the respective platforms.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;This article explains how and why I created my first (and only) mobile app back in 2010. It also reveals how much money I made from it and that it is possible to make money with a simple app.&lt;/p&gt;

&lt;p&gt;If I come across another problem I want to solve; I would consider writing a new app again. It was a fun experience, and the few extra dollars helped me to pay my bills during my time at the university.&lt;/p&gt;

&lt;p&gt;Although it is still possible to write Android apps in Java, as an experienced .NET developer with a heart for C# programming, I would try &lt;a href="https://docs.microsoft.com/en-us/xamarin/xamarin-forms/" rel="noopener noreferrer"&gt;Xamarin and Xamarin Forms&lt;/a&gt; for my next mobile app.&lt;/p&gt;

&lt;p&gt;Let me know in the comments if you also wrote an application, which technologies you used, and what your results were.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://www.claudiobernasconi.ch/2019/05/22/how-i-earned-2000-with-a-mobile-app/" rel="noopener noreferrer"&gt;claudiobernasconi.ch&lt;/a&gt; on May 22nd, 2019.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>showdev</category>
      <category>devtips</category>
      <category>java</category>
    </item>
    <item>
      <title>Modernizing Existing Windows Desktop Applications</title>
      <dc:creator>Claudio Bernasconi</dc:creator>
      <pubDate>Tue, 21 May 2019 14:16:52 +0000</pubDate>
      <link>https://forem.com/claudiobernasconi/modernizing-existing-windows-desktop-applications-38i0</link>
      <guid>https://forem.com/claudiobernasconi/modernizing-existing-windows-desktop-applications-38i0</guid>
      <description>&lt;p&gt;In my last week’s post, I wrote an &lt;a href="https://www.claudiobernasconi.ch/2019/05/09/net-technology-stacks-for-windows-desktop-development/"&gt;overview of different frameworks for .NET desktop applications&lt;/a&gt;. As soon as my article was published, Microsoft announced big news for Windows desktop developers.&lt;/p&gt;

&lt;p&gt;With the recent &lt;a href="https://devblogs.microsoft.com/dotnet/introducing-net-5/"&gt;Microsoft announcement of .NET 5&lt;/a&gt; which will be released in Autumn 2020, Microsoft will unify the developer experience for all supported platforms.&lt;/p&gt;

&lt;p&gt;Going forward, .NET 5 will support targeting Windows, Linux, macOS, iOS, Android, WebAssembly and more all with the same .NET 5 APIs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ie_Drfqg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2019/05/dotnet5_platform.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ie_Drfqg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.claudiobernasconi.ch/wp-content/uploads/2019/05/dotnet5_platform.png" alt=".NET – A unified platform (Image: Microsoft)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This image grabbed from the announcement shows the unified .NET platform featuring desktop development, web development, cloud, mobile, gaming, Internet of Things, and Artificial Intelligence.&lt;/p&gt;

&lt;p&gt;In this article, we’re going to focus on what implications this has for existing Windows desktop applications and what we as developers can do to prepare ourselves as well as our applications for the move to .NET 5 and why we should consider doing it in the first place.&lt;/p&gt;

&lt;h1&gt;
  
  
  What about .NET Core 3.0?
&lt;/h1&gt;

&lt;p&gt;Microsoft has &lt;a href="https://devblogs.microsoft.com/dotnet/net-core-is-the-future-of-net/"&gt;announced the release of .NET Core 3.0&lt;/a&gt; for September 2019. .NET Core 3.0 allows us to migrate our existing desktop applications by adding WinForms and WPF support to .NET Core.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;".NET Framework 4.8 will be the last major version of .NET Framework."&lt;br&gt;
– &lt;em&gt;Scott Hunter, Director of Program Management .NET&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;On the other hand, he also mentions that:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"If you have existing .NET Framework applications that you are maintaining, there is no need to move these applications to .NET Core. We will continue to both service and support .NET Framework, which includes bug–, reliability– and security fixes."&lt;br&gt;
– &lt;em&gt;Scott Hunter, Director of Program Management .NET&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So we do not need to migrate our applications, but if we do, we get to use all the benefits that come with .NET Core such as side-by-side deployment, new features, performance improvements, and cross-platform support.&lt;/p&gt;

&lt;p&gt;In my opinion, migrating to .NET Core 3.0 is the first step in preparing an application for the new .NET 5 world. For any application that will be in production for more than just a few years and that is in active development I suggest migrating to reap the benefits of all the new .NET Core implementations.&lt;/p&gt;

&lt;p&gt;Microsoft also offers us to further develop our WinForms applications after the migration to .NET Core 3.0. Because of the WinForms support we can develop our WinForms applications as long as we do not need newer platform features like the Microsoft Store, proper multi-monitor support or other features from the new Windows 10 APIs.&lt;/p&gt;

&lt;p&gt;Before the announcement of .NET Core 3.0, the only option was to migrate WinForms applications to UWP applications if you wanted to run them on .NET Core and make use of new APIs. The release of .NET Core 3.0 gives us the option to stay on WinForms as a UI framework.&lt;/p&gt;

&lt;p&gt;For applications that are no longer in active development, but more likely in maintenance mode, it is not required to migrate them to a newer version of .NET. Security patches will still be available for the (full) .NET Framework.&lt;/p&gt;

&lt;h1&gt;
  
  
  What are the benefits of .NET 5?
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/introducing-net-5/"&gt;The announcement&lt;/a&gt; states three key improvements in .NET 5:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A single runtime and framework for all platforms&lt;/li&gt;
&lt;li&gt;Take the best out of .NET Core, .NET Framework, Xamarin, and Mono&lt;/li&gt;
&lt;li&gt;Provide everything in a single open-source code-base&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;In short:&lt;/strong&gt; All projects should be based on the same project files, have the same APIs available to them, and benefit from the same performance improvements.&lt;/p&gt;

&lt;p&gt;If you want to dive deeper into the announcement of .NET 5, make sure to check out the &lt;a href="https://devblogs.microsoft.com/dotnet/introducing-net-5/"&gt;official Microsoft announcement&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In my opinion, &lt;strong&gt;.NET 5 brings developers closer together&lt;/strong&gt;. Whereas Xamarin or UWP developers, as well as ASP.NET Core developers, enjoyed new tools, framework releases and APIs, WinForms and WPF desktop developers often felt left outside. .NET 5 will change that.&lt;/p&gt;

&lt;p&gt;Today, you need to learn slightly different project file structures, different APIs, and different tools when dealing with different project types.&lt;/p&gt;

&lt;p&gt;With the unification of all the targets and platforms, every developer will have the same tooling and the same APIs available to them. It’s a vast improvement.&lt;/p&gt;

&lt;p&gt;.NET 5 closes the gap and allows for much simpler knowledge transfer between those targets and project types.&lt;/p&gt;

&lt;p&gt;Again, for me, it’s a no brainer to migrate all existing applications that still are in development to .NET 5 when it’s been released in 2020.&lt;/p&gt;

&lt;h1&gt;
  
  
  XAML Island
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://blogs.windows.com/buildingapps/2018/11/02/xaml-islands-a-deep-dive-part-1/"&gt;XAML Island allows us to use UWP controls&lt;/a&gt; in Win32, WinForms, and WPF applications. It also allows us to access UI related Windows 10 APIs from existing applications. Without XAML Island, those APIs were exclusively available to UWP applications.&lt;/p&gt;

&lt;p&gt;XAML Island provides a way to modernize applications that cannot be rewritten as a whole but could benefit from access to controls based on Windows 10 APIs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/thomasclaudiush"&gt;Thomas Claudius Huber&lt;/a&gt; has written an in-depth blog post about &lt;a href="https://www.thomasclaudiushuber.com/2019/04/23/net-core-3-use-uwp-controls-in-wpf-with-xaml-islands/"&gt;how to use a UWP control in an existing WPF application&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you have newer applications and older applications it can be a viable use-case to migrate some controls within older applications to UWP controls instead of rewriting the entire application all at once.&lt;/p&gt;

&lt;p&gt;It is worth mentioning that XAML Island 1.0 is released as part of &lt;strong&gt;Windows 10 version 1903&lt;/strong&gt;. Any version prior will not support XAML Island.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Desktop developers often felt left out from all the shiny new things .NET Core had to offer. There were only a few new features for .NET Framework-based applications.&lt;/p&gt;

&lt;p&gt;With the announcement of .NET Core 3.0 and its support for WinForms and WPF applications, Microsoft shows a migration path for existing Windows desktop applications which allows those applications to benefit from all the .NET Core improvements.&lt;/p&gt;

&lt;p&gt;With XAML Island Microsoft offers another way of gradually modernizing existing .NET desktop applications by allowing them to use UWP controls.&lt;/p&gt;

&lt;p&gt;In my opinion, there is a bright future for .NET and desktop development on .NET. With .NET Core 3.0 we get the chance to benefit from all the improvements of .NET Core. And with .NET 5 Windows desktop developers are finally on the same page with all other .NET (Core) developers.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://www.claudiobernasconi.ch/2019/05/15/modernizing-existing-windows-desktop-applications/"&gt;claudiobernasconi.ch&lt;/a&gt; on May 15th, 2019.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>dotnet</category>
      <category>programming</category>
      <category>csharp</category>
    </item>
    <item>
      <title>.NET Technology Stacks for Windows Desktop Development</title>
      <dc:creator>Claudio Bernasconi</dc:creator>
      <pubDate>Fri, 10 May 2019 11:32:36 +0000</pubDate>
      <link>https://forem.com/claudiobernasconi/net-technology-stacks-for-windows-desktop-development-2kl3</link>
      <guid>https://forem.com/claudiobernasconi/net-technology-stacks-for-windows-desktop-development-2kl3</guid>
      <description>&lt;p&gt;Despite the trend in modern software development to the web and mobile platforms, desktop applications are still all around us. When it comes to Line-of-Business-Apps, many applications solely run on Windows desktop machines.&lt;/p&gt;

&lt;p&gt;Most developers have to deal with existing applications. When we read the news about upcoming changes to .NET Core or the shiny new things like Blazor or Web assembly we kind of feel left out.&lt;/p&gt;

&lt;p&gt;What we need to keep in mind is that there is also innovation happening in the .NET development for Windows desktop applications. When it comes to migrating old projects to newer frameworks or when we have to choose a stack for an entirely new application we have many choices.&lt;/p&gt;

&lt;p&gt;This article intends to give an overview of all the choices available and to give (sometimes opinionated advice) on when to choose which technology stack for your (next) application.&lt;/p&gt;

&lt;p&gt;In this article, we’re going to take a look at the following technologies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Win32 and COM&lt;/li&gt;
&lt;li&gt;WinForms&lt;/li&gt;
&lt;li&gt;Windows Presentation Framework (WPF)&lt;/li&gt;
&lt;li&gt;Universal Windows Platform (UWP)&lt;/li&gt;
&lt;li&gt;Electron (.NET)&lt;/li&gt;
&lt;li&gt;Avalonia&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Win32 and COM
&lt;/h1&gt;

&lt;p&gt;The oldest still viable approach to build a Windows desktop application is &lt;a href="https://docs.microsoft.com/en-us/windows/desktop/learnwin32/learn-to-program-for-windows" rel="noopener noreferrer"&gt;using C++ and the Win32 APIs&lt;/a&gt;. Granted, it’s not the newest and hottest technology stack, but it’s still in use, and the applications run on most Windows versions.&lt;/p&gt;

&lt;p&gt;Win32 has been introduced in late 1995 with the release of Windows 95 and is available in all following Windows releases including Windows 10.&lt;/p&gt;

&lt;p&gt;Modernizing an application written using C++ and the Win32 APIs is a hard task. I do not know about anything else than rewriting the entire application using another technology stack. Most newer technologies require either Visual Basic .NET or more often C# as the programming language.&lt;/p&gt;

&lt;p&gt;If you have another migration path than a complete rewrite – please write it in the comments below this article.&lt;/p&gt;

&lt;h1&gt;
  
  
  Windows Forms (WinForms)
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://github.com/dotnet/winforms" rel="noopener noreferrer"&gt;WinForms&lt;/a&gt; is the Windows desktop technology stack introduced with the .NET Framework in 2002 to make desktop development much simpler. After about 15 years of closed source development, Microsoft announced to open-source WinForms on December 4th, 2018.&lt;/p&gt;

&lt;p&gt;WinForms allows the developer to get results quickly. Visual Studio has a built-in editor which enables us to drag and drop controls from the toolbar onto the dialogs. By double-clicking onto the controls on the dialog, Visual Studio generated click handlers in the code which allow us to write the application logic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.claudiobernasconi.ch%2Fwp-content%2Fuploads%2F2019%2F05%2FWinFormsDialog.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.claudiobernasconi.ch%2Fwp-content%2Fuploads%2F2019%2F05%2FWinFormsDialog.png" alt="WinForms Editor in Visual Studio 2019"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The advantages of WinForms are obvious: Rapid prototyping, gaining fast results and the opportunity to work with a graphical editor in Visual Studio to create the user interfaces. WinForms apps run on all Windows computers with an installed .NET Framework.&lt;/p&gt;

&lt;p&gt;Because Microsoft started to bundle the .NET Framework to the Windows operating system nearly every computer runs at least one, most of the time multiple version of the .NET Framework.&lt;/p&gt;

&lt;p&gt;The downsides of WinForms are the limited design options, the close relationship with Visual Studio which makes application development outside Visual Studio nearly impossible, and generated code which can be a pain using version control systems when multiple developers collaborate on the same project.&lt;/p&gt;

&lt;p&gt;In my opinion, WinForms is still viable if the developer wants or needs to get a quick result, has limited experience in UI programming or programming in general and if the user experience requirements are not that big.&lt;/p&gt;

&lt;p&gt;Microsoft announced that starting with the release of .NET Core 3.0 there will be an option to &lt;a href="https://docs.microsoft.com/en-us/dotnet/core/porting/winforms" rel="noopener noreferrer"&gt;run WinForms applications on .NET Core&lt;/a&gt; instead of the (full) .NET Framework.&lt;/p&gt;

&lt;p&gt;In my opinion, every application that is still being developed and runs on WinForms should be migrated to .NET Core or at least have a strategy in mind how to approach it. .NET Core has so many advantages that in most cases you don’t want to miss out on them.&lt;/p&gt;

&lt;h1&gt;
  
  
  Windows Presentation Framework (WPF)
&lt;/h1&gt;

&lt;p&gt;With the release of .NET Framework 3.0 in 2006, Microsoft introduced the &lt;a href="https://docs.microsoft.com/en-us/dotnet/framework/wpf/getting-started/" rel="noopener noreferrer"&gt;Windows Presentation Framework (WPF)&lt;/a&gt; as an alternative to WinForms for Windows desktop development.&lt;/p&gt;

&lt;p&gt;The main difference between WinForms and WPF is the design language. For WinForms apps, we use the graphical designer, and for WPF applications we use XAML as a markup language to describe our user interfaces.&lt;/p&gt;

&lt;p&gt;The advantages are obvious. Using an XML-like languages developer have full control over the structure of their user interfaces. Custom designs were enabled by WPF and implementing custom controls to build richer user experiences became possible.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.claudiobernasconi.ch%2Fwp-content%2Fuploads%2F2019%2F05%2FWPFDialog.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.claudiobernasconi.ch%2Fwp-content%2Fuploads%2F2019%2F05%2FWPFDialog.png" alt="WPF XAML Editor in Visual Studio 2019"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using the data-binding mechanism and utilizing the MVVM design pattern WPF applications allow developers to split their code between user interface design code and business logic. Application logic can and should be written in class libraries with no dependency on any user interface framework. It allows for more maintainable and reusable code.&lt;/p&gt;

&lt;p&gt;On the other side, development becomes much more demanding and requires more knowledge. Gaining results can be hard in the beginning, and there are always multiple ways to solve a problem. WinForms is often limited but forces you to a more straightforward solution on the other side.&lt;/p&gt;

&lt;p&gt;WPF gives enormous power to the developer which allows for the option to create amazing user interfaces. If the developer puts too many elements on his dialogs or if he loads too much data at once the applications quickly feel slow. Also, WPF applications typically take longer to start compared to WinForms applications.&lt;/p&gt;

&lt;p&gt;For a long time, WPF was the quasi-standard when it came to Windows desktop development. I worked on WPF projects from 2008 to 2018, and there are many successful projects still running on WPF.&lt;/p&gt;

&lt;p&gt;If you need to create an application that only runs on Windows desktop computer, &lt;a href="https://www.claudiobernasconi.ch/2019/01/30/is-wpf-still-relevant-in-2019/" rel="noopener noreferrer"&gt;WPF is still a viable choice in 2019&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Microsoft announced that starting with the release of .NET Core 3.0 not only WinForms, but also WPF applications can run on .NET Core which means WPF applications can take advantage of the performance improvements of .NET Core. It’s a great thing when keeping in mind that performance is one of the most significant downsides of using WPF.&lt;/p&gt;

&lt;h1&gt;
  
  
  Universal Windows Platform (UWP)
&lt;/h1&gt;

&lt;p&gt;UWP applications are a modern alternative to WPF and WinForms applications. UWP replaces the Windows Runtime (WinRT) and requires Windows 10.&lt;/p&gt;

&lt;p&gt;UWP apps can be distributed using the Microsoft Store and are an excellent choice for end-user applications because the distribution of the application can be done using the Microsoft Store. It feels a lot like mobile development but for desktop computers.&lt;/p&gt;

&lt;p&gt;UWP also runs not only on desktop computers, but also on the Xbox One, and other Microsoft devices.&lt;/p&gt;

&lt;p&gt;UWP apps can be developed either in C# using XAML which feels a lot like writing a WPF application (with a few restrictions) or using JavaScript and HTML.&lt;/p&gt;

&lt;p&gt;I wrote a big &lt;a href="https://www.claudiobernasconi.ch/2019/02/28/introduction-to-the-universal-windows-platform-uwp/" rel="noopener noreferrer"&gt;Introduction to the Universal Windows Platform&lt;/a&gt; article a few weeks ago on this blog. If you want to dive deeper into UWP apps you might want to check it out.&lt;/p&gt;

&lt;p&gt;You’ll also find my recommendation on when to create a UWP app instead of a WPF application in the article above.&lt;/p&gt;

&lt;h1&gt;
  
  
  Electron (.NET)
&lt;/h1&gt;

&lt;p&gt;Electron allows developing desktop applications with web technologies (HTML, CSS, and JavaScript). Electron runs your application on Chromium as a node application which means that Electron opens a browser window and lets you run your web application similar to a native desktop application.&lt;/p&gt;

&lt;p&gt;The advantage is that Electron applications are cross-platform and also run on iOS and Linux. Some of the better-known applications using Electron include Slack, GitHub Desktop and Visual Studio Code.&lt;/p&gt;

&lt;p&gt;On the downside, we have heavy CPU and RAM usage because the behind the scene running Chromium process consumes a lot of resources. Electron applications run on Windows 7 and newer.&lt;/p&gt;

&lt;p&gt;Well, how is this technology related to this article? The answer is Electron.NET.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ElectronNET/Electron.NET" rel="noopener noreferrer"&gt;Electron.NET&lt;/a&gt; allows us to develop Electron applications using ASP.NET Core. We can write C# and have the same APIs as Electron offers to JavaScript developers. In general, Electron.NET comes with the same advantages and disadvantages compared to Electron.&lt;/p&gt;

&lt;p&gt;Electron.NET can be a viable migration path for web applications that need access to computer resources that are not available on the web. It’s also an excellent technology for experienced web developers who want to get started with (Windows) desktop development in .NET.&lt;/p&gt;

&lt;h1&gt;
  
  
  Avalonia
&lt;/h1&gt;

&lt;p&gt;&lt;a href="http://avaloniaui.net/" rel="noopener noreferrer"&gt;Avalonia&lt;/a&gt; is a cross-platform XAML Framework for .NET Framework, .NET Core and Mono. Avalonia has a similar look like WPF or UWP interface definitions because it utilizes a XAML dialect for the view definitions. It also supports MVVM, data-binding and much more.&lt;/p&gt;

&lt;p&gt;Avalonia is new which means that they do not have a lot of legacy code in their framework. Unlike WPF where there is code older than a decade that cannot be removed because of compatibility issues.&lt;/p&gt;

&lt;p&gt;I haven’t use Avalonia in my projects, and therefore I cannot go into much detail about if I would suggest to use it for production (yet). Keep in mind that Avalonia states on their website that their framework is currently in beta phase.&lt;/p&gt;

&lt;p&gt;What I can say though is that it’s an alternative for developers who want to go for a newer, more cutting-edge option instead of using the established WPF or UWP technologies and are not keen on putting their app in the Microsoft store.&lt;/p&gt;

&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;p&gt;That’s it. We covered many older and newer technology stacks which enable developers to write desktop applications using .NET programming languages. All of them come with their unique set of advantages and disadvantages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.claudiobernasconi.ch%2Fwp-content%2Fuploads%2F2019%2F05%2FNET-Stacks-for-Windows-Desktop-Development.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.claudiobernasconi.ch%2Fwp-content%2Fuploads%2F2019%2F05%2FNET-Stacks-for-Windows-Desktop-Development.png" alt="Timeline of the desktop development stacks from 1995 to 2019"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When it comes to starting a new project, WPF and UWP are choices I would recommend if you’re not sure where to start. WPF is very mature, and there is a lot of knowledge available on the Internet. UWP is a great choice if you want to make use of the Microsoft Store.&lt;/p&gt;

&lt;p&gt;For the classic forms over data application, WinForms can be a viable choice too. Just make sure if WinForms can fulfill all the customer requirements before choosing WinForms over WPF or UWP.&lt;/p&gt;

&lt;p&gt;For experienced ASP.NET (Core) developers stepping into the desktop world, Electron.NET can be an exciting option. It’s especially true if the application should be cross-platform.&lt;/p&gt;

&lt;p&gt;Avalonia can be a viable choice for experimental projects or developers who want to build their product using cutting-edge technology on .NET Core.&lt;/p&gt;

&lt;p&gt;Let me know in the comments below which technology stack you like the most and which and why you use certain technology in your current project.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://www.claudiobernasconi.ch/2019/05/09/net-technology-stacks-for-windows-desktop-development/" rel="noopener noreferrer"&gt;claudiobernasconi.ch&lt;/a&gt; on May 9th, 2019.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>dotnet</category>
      <category>csharp</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Should You Listen to Music While Programming?</title>
      <dc:creator>Claudio Bernasconi</dc:creator>
      <pubDate>Sat, 04 May 2019 09:37:01 +0000</pubDate>
      <link>https://forem.com/claudiobernasconi/should-you-listen-to-music-while-programming-2gel</link>
      <guid>https://forem.com/claudiobernasconi/should-you-listen-to-music-while-programming-2gel</guid>
      <description>&lt;p&gt;Do you listen to music while working on your programming project? Is it okay, helpful or a bad idea? Are you an enterprise developer and are you able to make this decision or are you forced to sit in a quiet environment or listen to your boss’ favorite radio program?&lt;/p&gt;

&lt;p&gt;I recently discussed the topic, and I was not sure on which side to put myself. From time to time I like having a quiet environment which lets me focus on a problem and dive deep into the internals of any given code.&lt;/p&gt;

&lt;p&gt;On other days, I like having music in my ears. Sometimes it helps me concentrate on a specific problem and helps me avoid other distractions.&lt;/p&gt;

&lt;p&gt;In this article, I’m going to discuss the pros and cons of listening to music while programming. Some information is based on a bit of research, and I also give my own opinion on the topic.&lt;/p&gt;

&lt;h1&gt;
  
  
  Pro
&lt;/h1&gt;

&lt;p&gt;Listening to music can help you get into the “zone”. It’s a powerful state most developers hit from time to time where the world seems to be irrelevant and the only thing that needs to be done is the problem you’re working on.&lt;/p&gt;

&lt;p&gt;Music also helps you reduce the impact of the environment on you. If you’re working in an open space office or in a noisy restaurant it might be helpful to reduce the noise around you and by listening to music you have control over what you hear.&lt;/p&gt;

&lt;p&gt;Music can motivate you to get things done. Sometimes you think hard about a problem and cannot decide on which solution fits best and you end up in a deadlock in your brain. Music can help you get things done. The nature of tracks ending and rhythms changing can urge your brain to make decisions. I do not have scientific evidence for this, but I once read about it and I think it’s true for me.&lt;/p&gt;

&lt;p&gt;You can block off co-workers. Seriously, depending on your office situation it can be helpful to isolate you against people lurking around and asking you stupid things. I am all for working together as a team and if someone has an important question he or she can always approach me at my desk. But how often people stop by just to talk to you about their weekend and other non-work related things? It’s happened to me, and I am sure, it happened to you.&lt;/p&gt;

&lt;h1&gt;
  
  
  Contra
&lt;/h1&gt;

&lt;p&gt;One of the most heard arguments against listening to music while working is that you get distracted from work. Indeed, if most of your day consists of changing tracks, adjusting volumes, managing your playlist, and finding the newest music to listen to, it can be a big distraction.&lt;/p&gt;

&lt;p&gt;Some people also claim that your brain cannot do multiple things at once and therefore it is generally a bad idea to listen to anything while doing work.&lt;/p&gt;

&lt;h1&gt;
  
  
  Different types of music
&lt;/h1&gt;

&lt;p&gt;An interesting topic is the type of music you listen. Usually, I listen to different music while working than I listen to while working out or doing something else in my free time. It is personal preference, but I have my logic why this might be a good thing.&lt;/p&gt;

&lt;p&gt;First of all, I do not care about the music itself. If you listen to the new album of your favorite interpret, I am sure you want to catch more of it than just a few bits. Therefore, you should listen to it in your free time.&lt;/p&gt;

&lt;p&gt;In general, music with fewer lyrics tends to work best for me. If there is too much singing or rapping going on my brains needs too much energy to absorb the lyrics.&lt;/p&gt;

&lt;h1&gt;
  
  
  Office rules
&lt;/h1&gt;

&lt;p&gt;I am not a fan of rules. It is especially true when it comes to working. In my opinion, every person knows himself best and is mature enough to do the right thing at the right time. But some offices have rules about using headphones or listening to music.&lt;/p&gt;

&lt;p&gt;If the rules fit you, perfect, if not, I would try to speak up about it and provide arguments on why listening to music would help you do your job better. Sometimes you do not have the freedom to decide. You either accept it, or you move on.&lt;/p&gt;

&lt;h1&gt;
  
  
  Randomly generated playlist
&lt;/h1&gt;

&lt;p&gt;I like the &lt;strong&gt;Flow&lt;/strong&gt; functionality of &lt;a href="https://www.deezer.com/"&gt;Deezer&lt;/a&gt;. It’s an algorithm which selects music tracks for you. I think it’s trained based on my playlists but also on the music I listened to in general on the platform. It creates a good mix of different music styles which can run in the background and which help me to focus on my work.&lt;/p&gt;

&lt;p&gt;I do not have to change tracks, and there are also new tracks mixed-in which makes it enjoyable even after a few hours or weeks. There is always something new in there, while some of the well-known tracks will be repeated over a few days.&lt;/p&gt;

&lt;h1&gt;
  
  
  Music to code by
&lt;/h1&gt;

&lt;p&gt;I have never tried it, but as a regular listener to the DotNetRocks podcast, I know about Carl Franklin’s &lt;a href="http://mtcb.pwop.com/"&gt;Music to Code by&lt;/a&gt; project. I’ve heard many success stories from people listening to those tracks which are “scientifically designed to quickly get you into a state of flow and keep you there”.&lt;/p&gt;

&lt;p&gt;As I wrote above, I have not tried it yet. Do you have any experience with it? Let me know in the comments below. It might be worth checking it out in the future. I like the idea behind the project.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;There is no right or wrong. There is no yes or no. If it makes sense for you to listen to music while working, you should do it. Some people will benefit, others don’t.&lt;/p&gt;

&lt;p&gt;In my opinion, it’s up to you, how you want to work. With music, or without. The only important thing is that you make your decision on your own and that you make the most appropriate decision. Everyone is different.&lt;/p&gt;

&lt;p&gt;Maybe it makes sense to listen to music for specific tasks while it’s best for you to have absolute silence when working on something different? Who knows?&lt;/p&gt;

&lt;p&gt;There is no general answer to the question of whether you should listen to music while programming or not.&lt;/p&gt;

&lt;p&gt;Let me know in the comments below how you deal with listening to music while programming. I am curious about your experience!&lt;/p&gt;

&lt;h1&gt;
  
  
  Other Resources
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://medium.com/@klpatil/is-it-fine-to-listen-music-while-coding-d005a5fcbf0e"&gt;Medium: Is it fine to listen to music while coding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jaxenter.com/why-you-should-listen-to-music-while-coding-and-what-kind-to-listen-to-108013.html"&gt;Jaxenter: Why you should listen to music while coding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.quora.com/Does-listening-to-music-while-programming-really-increase-a-programmers-performance-If-there-is-science-supporting-it-how-is-performance-impacted-by-the-music-style-itself-and-the-style-in-relation-to-the-programmers-taste-mood-or-behavior"&gt;Quora: Does listening to music while programming really increase a programmers performance?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;This article was originally published on &lt;a href="https://www.claudiobernasconi.ch/2019/02/20/should-you-listen-to-music-while-programming/"&gt;claudiobernasconi.ch&lt;/a&gt; on February 20th, 2019.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>discuss</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
