<?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>DEV Community: Leonardo Gasparini Romão</title>
    <description>The latest articles on DEV Community by Leonardo Gasparini Romão (@lleonardogr).</description>
    <link>https://dev.to/lleonardogr</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%2F140659%2Fbdee890f-a46c-48d4-b302-e0b7fd407877.png</url>
      <title>DEV Community: Leonardo Gasparini Romão</title>
      <link>https://dev.to/lleonardogr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lleonardogr"/>
    <language>en</language>
    <item>
      <title>A great feature in C# 9.0 (Simplified Parameter Null Validation)</title>
      <dc:creator>Leonardo Gasparini Romão</dc:creator>
      <pubDate>Fri, 10 Jul 2020 15:11:40 +0000</pubDate>
      <link>https://dev.to/lleonardogr/i-m-in-love-with-this-new-feature-in-c-9-0-simplified-parameter-null-validation-afp</link>
      <guid>https://dev.to/lleonardogr/i-m-in-love-with-this-new-feature-in-c-9-0-simplified-parameter-null-validation-afp</guid>
      <description>&lt;p&gt;Well, as C# advances, some features are been more simplified inside the language. One common problem that beginners programmers have is how to deal with nullable variables.&lt;/p&gt;

&lt;p&gt;In the first versions of C# language, validate null values were very explicity when I was coding, eg...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name&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="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Name&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="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;NullReferenceException&lt;/span&gt;
            &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Error, the name is null"&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;After version 4.0 of .Net Framework, C# has gain some other interesting options to use. eg...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;//Using ?? Operator&lt;/span&gt;
        &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name&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="s"&gt;"Undefined"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="n"&gt;Name&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="c1"&gt;//Using String Extension Mehtods&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;IsNullOrEmpty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
            &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;NullReferenceException&lt;/span&gt;
            &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Error, the name is null or Empty"&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;But now with C# 9.0, I can simplify all of this with the !! Operator like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;
&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name&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="nf"&gt;ManipulateString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;OtherManipulateString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;//Using new ! Operator to throw exception&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nf"&gt;ManipulateString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;!)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="s"&gt;" is a Valid string"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;//Using new !! Operator to substitute null to other things like "" (probably)&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="nf"&gt;OtherManipulateString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;!!)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="s"&gt;" is a Valid string"&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;although it is too early to validate whether it will be interesting to use this operator, in fact, it seems an interesting option to consider, despite not making it so explicit in the code, the economy of lines of code may be surprising.&lt;/p&gt;

&lt;p&gt;Useful links:&lt;br&gt;
&lt;a href="http://www.macoratti.net/20/02/c_versao9.htm" rel="noopener noreferrer"&gt;http://www.macoratti.net/20/02/c_versao9.htm&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.infoq.com/news/2020/06/CSharp-9-Null/" rel="noopener noreferrer"&gt;https://www.infoq.com/news/2020/06/CSharp-9-Null/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.c-sharpcorner.com/article/null-value-and-null-reference-handling-c-sharp6-to-c-sharp-9-new-features-day-1/" rel="noopener noreferrer"&gt;https://www.c-sharpcorner.com/article/null-value-and-null-reference-handling-c-sharp6-to-c-sharp-9-new-features-day-1/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>news</category>
    </item>
    <item>
      <title>SQL vs NoSQL vs both options for Web projects?</title>
      <dc:creator>Leonardo Gasparini Romão</dc:creator>
      <pubDate>Tue, 26 May 2020 18:47:43 +0000</pubDate>
      <link>https://dev.to/lleonardogr/sql-vs-nosql-vs-bothoptions-for-web-projects-3902</link>
      <guid>https://dev.to/lleonardogr/sql-vs-nosql-vs-bothoptions-for-web-projects-3902</guid>
      <description>&lt;h3&gt;
  
  
  I have a question involving the choice of database technology in a specific case.
&lt;/h3&gt;

&lt;p&gt;SQL vs NoSQL is a common discussion about what Database suits better for developing web projects, and we already have a lot of articles explaining the differences, advantages/disadvantages of each type of Database like the articles below. &lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/pankajythakare" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.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%2F274212%2F43bc8538-d37c-4a24-82b0-8946d816c01c.jpg" alt="pankajythakare"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/pankajythakare/database-sql-or-nosql-30pg" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Database: SQL or NoSQL&lt;/h2&gt;
      &lt;h3&gt;Pankaj Thakare ・ Mar 11 '20&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#sql&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#nosql&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#database&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#cap&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="ltag__link"&gt;
  &lt;div class="ltag__link__content"&gt;
    &lt;div class="missing"&gt;
      &lt;h2&gt;Article No Longer Available&lt;/h2&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;So, in the last years, I have seen people choosing NoSQL by default, just considering the scalability as the main precaution to use that type of Databases, but they disregard all the complexity to use an unstructured schema or disregard the other use cases that NoSQL is built for like support large teams with a lot of services (and the team choice NoSQL having only 5 members).&lt;/p&gt;

&lt;p&gt;Recently, I saw an architecture diagram for a web project using both technologies in this &lt;a href="https://github.com/donnemartin/system-design-primer" rel="noopener noreferrer"&gt;link&lt;/a&gt; and I really liked to see both technologies being used to get the best of the two worlds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fc3sshpnybp9f3iuas4up.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fc3sshpnybp9f3iuas4up.jpg" alt="Alt Text" width="741" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My question is, is really necessary to use NoSQL as default choice only considering scalability issues rather than use SQL or a Hybrid Solution? &lt;/p&gt;

</description>
      <category>discuss</category>
      <category>database</category>
      <category>sql</category>
    </item>
    <item>
      <title>How to migrate SQL Databases to a new version</title>
      <dc:creator>Leonardo Gasparini Romão</dc:creator>
      <pubDate>Wed, 18 Mar 2020 03:33:24 +0000</pubDate>
      <link>https://dev.to/lleonardogr/how-to-migrate-sql-databases-to-a-new-version-server-58mc</link>
      <guid>https://dev.to/lleonardogr/how-to-migrate-sql-databases-to-a-new-version-server-58mc</guid>
      <description>&lt;p&gt;This post was part of a series talking about How to create a good architecture for SQL Databases:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;a href="https://dev.to/lleonardogr/how-to-create-a-scalable-architecture-when-the-businessdomain-logic-is-in-the-database-2bko"&gt;How to versioning SQL databases architecture using GitHub and Visual Studio&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://dev.to/lleonardogr/how-to-create-an-evolutive-architecure-from-legacy-databases-pt-2-2df9"&gt;How to organize SQL legacy Databases&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://dev.to/lleonardogr/how-to-create-an-evolutive-architecure-from-legacy-databases-pt-3-32fl"&gt;How to debug SQL Databases&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;How to migrate SQL Databases to a new version server&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;It's common when we have legacy databases, to maintain not only the database as all infrastructure that supports it, like OS version or MSSQL version. But with time, new features are including in new versions of MSSQL, and these features can simplify some internal jobs that can be hard to do. &lt;/p&gt;

&lt;p&gt;An example that I have, was when I working with a BulkInsert with different sources of CSV files that have different encodings like UTF-8, UTF-16, ASCII, etc...And my problem was to know that my version of MSSQL doesn't support UTF-8, and I didn't have the tools to upgrade the version. So I will show a good strategy to make these changes without problems. Other features are created with the years like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accepting JSON besides XML&lt;/li&gt;
&lt;li&gt;Support to more encodings&lt;/li&gt;
&lt;li&gt;Improve their Query Intelligence&lt;/li&gt;
&lt;li&gt;Native BigData or BI software integration like Spark or PowerBI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, we have some items that we need to be careful about when we make a migration...&lt;/p&gt;

&lt;h3&gt;
  
  
  1- Always have a support machine
&lt;/h3&gt;

&lt;p&gt;It's impossible to change SQL version in the production server, impossible maybe it is not the best word but is impracticable to do this, so creating a new machine to put this new Data is the best option, besides, we can make tests before changing the machines.&lt;/p&gt;

&lt;h3&gt;
  
  
  2- Check all app that uses your Databases
&lt;/h3&gt;

&lt;p&gt;If you need to migrate a database that is used to many applications, remember to copy not only data and Schema but:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logs&lt;/li&gt;
&lt;li&gt;Users (Username and Password)&lt;/li&gt;
&lt;li&gt;Permissions&lt;/li&gt;
&lt;li&gt;Jobs and Procedures&lt;/li&gt;
&lt;li&gt;Folders&lt;/li&gt;
&lt;li&gt;Files generated by procedures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This need to be precisely done, probably, you will have some issues in the first weeks after the migration.&lt;/p&gt;

&lt;h3&gt;
  
  
  3- Try to use SQL copy database wizard
&lt;/h3&gt;

&lt;p&gt;Probably, Microsoft has to know what is the better strategy to migrate the database, so the SQL Management Studio does have a wizard to Copy the database to another server. This is interesting because we don't have to worry about some features that we can be forgotten when we make a migration. Microsoft has links to help with this, either by migrating to Azure or by another SQL server.&lt;/p&gt;

&lt;p&gt;Migrate database it's not a trivial job, to make this we have to take proper precautions.&lt;/p&gt;

&lt;p&gt;Useful links:&lt;br&gt;
&lt;a href="https://docs.microsoft.com/pt-br/sql/dma/dma-overview?view=sql-server-ver15" rel="noopener noreferrer"&gt;https://docs.microsoft.com/pt-br/sql/dma/dma-overview?view=sql-server-ver15&lt;/a&gt;&lt;br&gt;
&lt;a href="https://datamigration.microsoft.com/scenario/sql-to-azuresqldb?step=1" rel="noopener noreferrer"&gt;https://datamigration.microsoft.com/scenario/sql-to-azuresqldb?step=1&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-version-15" rel="noopener noreferrer"&gt;https://docs.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-version-15&lt;/a&gt;&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/31483452/store-nosql-data-on-sql-server" rel="noopener noreferrer"&gt;https://stackoverflow.com/questions/31483452/store-nosql-data-on-sql-server&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>database</category>
    </item>
    <item>
      <title>Speed up web scraping using C#</title>
      <dc:creator>Leonardo Gasparini Romão</dc:creator>
      <pubDate>Tue, 17 Mar 2020 18:40:29 +0000</pubDate>
      <link>https://dev.to/lleonardogr/parallelizing-web-scrapping-using-c-1d1p</link>
      <guid>https://dev.to/lleonardogr/parallelizing-web-scrapping-using-c-1d1p</guid>
      <description>&lt;p&gt;This article is a part of web scrapping series using c#:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;a href="https://dev.to/lleonardogr/how-to-make-webscrapping-using-c-597b"&gt;How to web scrapping using C#&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Speed up web scrapping using C#&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Now we use parallels to up speed our web scrapping code. It's common to want multiple pages when we getting data from the web, and in the last article I use one page to test web scrapping but, if we need to get a large set of information, we need a better solution.&lt;/p&gt;

&lt;p&gt;Use a single process looping all the pages will take so much time to get all data, so another option is use parallels. This is an example to use multiple processes to take data from the web:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;links&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s"&gt;"https://www.rottentomatoes.com/m/the_lord_of_the_rings_the_fellowship_of_the_ring"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s"&gt;"https://www.rottentomatoes.com/m/the_lord_of_the_rings_the_two_towers"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s"&gt;"https://www.rottentomatoes.com/m/the_lord_of_the_rings_the_return_of_the_king"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s"&gt;"https://www.rottentomatoes.com/m/the_hobbit_an_unexpected_journey"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s"&gt;"https://www.rottentomatoes.com/m/the_hobbit_the_desolation_of_smaug"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s"&gt;"https://www.rottentomatoes.com/m/the_hobbit_the_battle_of_the_five_armies"&lt;/span&gt;
            &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Gettting page from movie..."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;Parallel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ForEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;links&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ParallelOptions&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;MaxDegreeOfParallelism&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;4&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="n"&gt;link&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;using&lt;/span&gt; &lt;span class="nn"&gt;var&lt;/span&gt; &lt;span class="n"&gt;Client&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;WebClient&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="c1"&gt;//Download Html from a Url:&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;HtmlRequestResult&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;DownloadString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;link&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;//Load HtmlString to AgilityPack Document&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;Document&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;HtmlDocument&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="n"&gt;Document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;LoadHtml&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HtmlRequestResult&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;//Get movie title, critic score and user score&lt;/span&gt;
        &lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;MovieTitle&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DocumentNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Descendants&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"h1"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;FirstOrDefault&lt;/span&gt;&lt;span class="p"&gt;()?.&lt;/span&gt;&lt;span class="n"&gt;InnerText&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Trim&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;CriticScore&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetElementbyId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"tomato_meter_link"&lt;/span&gt;&lt;span class="p"&gt;)?.&lt;/span&gt;&lt;span class="n"&gt;InnerText&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Trim&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;UserScore&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DocumentNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Descendants&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"a"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FirstOrDefault&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetAttributeValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"href"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="s"&gt;"#audience_reviews"&lt;/span&gt;&lt;span class="p"&gt;)?.&lt;/span&gt;&lt;span class="n"&gt;InnerText&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Trim&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;" Title:{0} \r\n Critic Score:{1} \r\n User Score:{2}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MovieTitle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;CriticScore&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;UserScore&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Press any key to close the program..."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadKey&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;The console now prints all the movies, unordered because we are using multiprocess and with this, we have an different behavior for every link that we get.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fo4z56g8agib5ukxnxgx7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fo4z56g8agib5ukxnxgx7.png" alt="Alt Text" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Well, like any other multiprocess application, we now need to care about how to manage and control our parallelism level, because we can make the code use so much memory or CPU and slow down all our infrastructure, so be careful, besides, we need to have attention to the website that we visit, using multiple processes can be confused as a DDOS attack and block our code, so, don't push links so harder.&lt;/p&gt;

&lt;p&gt;Useful sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/pt-br/dotnet/standard/parallel-programming/how-to-write-a-simple-parallel-foreach-loop" rel="noopener noreferrer"&gt;https://docs.microsoft.com/pt-br/dotnet/standard/parallel-programming/how-to-write-a-simple-parallel-foreach-loop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/9290498/how-can-i-limit-parallel-foreach" rel="noopener noreferrer"&gt;https://stackoverflow.com/questions/9290498/how-can-i-limit-parallel-foreach&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/5009181/parallel-foreach-vs-task-factory-startnew" rel="noopener noreferrer"&gt;https://stackoverflow.com/questions/5009181/parallel-foreach-vs-task-factory-startnew&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/potential-pitfalls-in-data-and-task-parallelism" rel="noopener noreferrer"&gt;https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/potential-pitfalls-in-data-and-task-parallelism&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://towardsdatascience.com/ethics-in-web-scraping-b96b18136f01" rel="noopener noreferrer"&gt;https://towardsdatascience.com/ethics-in-web-scraping-b96b18136f01&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webscrapping</category>
      <category>csharp</category>
      <category>dotnet</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to web scraping using C#</title>
      <dc:creator>Leonardo Gasparini Romão</dc:creator>
      <pubDate>Sat, 14 Mar 2020 20:20:18 +0000</pubDate>
      <link>https://dev.to/lleonardogr/how-to-make-webscrapping-using-c-597b</link>
      <guid>https://dev.to/lleonardogr/how-to-make-webscrapping-using-c-597b</guid>
      <description>&lt;p&gt;This article is a part of web scrapping series using c#:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;How to web scrapping using C#&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://dev.to/lleonardogr/parallelizing-web-scrapping-using-c-1d1p"&gt;Speed up web scrapping using C#&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Web scraping is a useful skill to learn for getting data. We can get data from the web, to use for Data Analysis, Data Science or even to Learn some features of Web. So what is necessary to get data from Web?&lt;/p&gt;

&lt;h2&gt;
  
  
  HtmlAgilityPack
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fbydbgsfljjj9y32ym8w9.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fbydbgsfljjj9y32ym8w9.jpeg" alt="HtmlAgilityPack" width="225" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://html-agility-pack.net/" rel="noopener noreferrer"&gt;HtmlAgilityPack&lt;/a&gt; is a library to help getting information from Html pages. With this library, we can transform Html pages into strings and get some part of the entire text, using string methods or Xpath to search specific CSS classes. Here is an example to get page info using then.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;
&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Getting page from Lord of the rings..."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;//Download Html from a Url:&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;HtmlRequestResult&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;DownloadString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"https://www.rottentomatoes.com/m/the_lord_of_the_rings_the_return_of_the_king"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;//Load HtmlString to AgilityPack Document&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;Document&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;HtmlDocument&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="n"&gt;Document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;LoadHtml&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;HtmlRequestResult&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Gettting data from page..."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;//Get movie title, critic score and user score&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;MovieTitle&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DocumentNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Descendants&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"h1"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;FirstOrDefault&lt;/span&gt;&lt;span class="p"&gt;()?&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;InnerText&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Trim&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;CriticScore&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetElementbyId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"tomato_meter_link"&lt;/span&gt;&lt;span class="p"&gt;)?&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;InnerText&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Trim&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;UserScore&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DocumentNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Descendants&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"a"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;FirstOrDefault&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;GetAttributeValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"href"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;==&lt;/span&gt; &lt;span class="s"&gt;"#audience_reviews"&lt;/span&gt;&lt;span class="p"&gt;)?&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;InnerText&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Trim&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;//Show the results&lt;/span&gt;
&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;" Title:{0} \r\n Critic Score:{1} \r\n User Score:{2}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MovieTitle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;CriticScore&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;UserScore&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Press any key to close the program..."&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ReadKey&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;This is a simple example to get data from rotten tomatoes. It's common to see in the internet other examples, generally in Python using &lt;a href="https://www.crummy.com/software/BeautifulSoup/bs4/doc/" rel="noopener noreferrer"&gt;Beaultiful Soup&lt;/a&gt; to get data. Here, the strategy is the same as Python. The results are showed bellow and you can see the original page in this &lt;a href="https://www.rottentomatoes.com/m/the_lord_of_the_rings_the_return_of_the_king" rel="noopener noreferrer"&gt;link&lt;/a&gt;...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fgey9kqhtmzgriksc8j9j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fgey9kqhtmzgriksc8j9j.png" alt="Results" width="800" height="171"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So.. after this, you can improve your strategy to web scrapping, but this is a good start point if you want to learn how to get data from the web.&lt;/p&gt;

</description>
      <category>webscrapping</category>
      <category>csharp</category>
      <category>dotnet</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>What languages I choose to learn and why?</title>
      <dc:creator>Leonardo Gasparini Romão</dc:creator>
      <pubDate>Sat, 14 Mar 2020 19:18:05 +0000</pubDate>
      <link>https://dev.to/lleonardogr/what-languages-i-choose-to-learn-and-why-59cj</link>
      <guid>https://dev.to/lleonardogr/what-languages-i-choose-to-learn-and-why-59cj</guid>
      <description>&lt;p&gt;The choice of the programming language can be the most important choice when you are starting to learn to program, and in most cases, is the main question in all debates involving software development. Well, I think that's interesting to show my decisions about my programming language choices and why...&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Csharp
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkn4ei8wb8s1exh6h4h36.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkn4ei8wb8s1exh6h4h36.png" width="640" height="688"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;C# was not my first language but was the first language that I could make my first professional project in my career. I was started programming with C# in 2012, when WebForms was, unfortunately, the main web framework used in that time to develop web projects.&lt;br&gt;
But C# has improved to be an excellent option now. With the creation of .NET Core, the framework is now independent of windows, and with this, erasing the Microsoft past when the company was avoiding OpenSource initiatives. bellow is why I choose C# as my principal programming language...&lt;/p&gt;

&lt;h3&gt;
  
  
  1.1 StackOverflow
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwi38w7ztl72r1okvokzw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fwi38w7ztl72r1okvokzw.png" width="455" height="111"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In 2012, C# was the main language of questions inside Stackoverflow, and this helps me a lot because I had a unique source of information to ask questions and understand how I could make some code. Nowadays, I can't even think how my life will be without StackOverflow rs&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2 Visual Studio
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flgx4zxcx5hysuei3eptc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Flgx4zxcx5hysuei3eptc.png" alt="Alt Text" width="318" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An IDE is an important thing to help any programmer to make the job quickly and the right way. In 2012 we have Java with NetBeans or Eclipse to develop some software, and I thought it was horrible to use then, Eclipse IDE was slow, heavy and always have an unknown problem. Visual Studio was an impressive choice comparing with others IDE because Microsoft always knew to make a good UX in theirs softwares. &lt;br&gt;
Nowadays we have VS Code considered the most used text editor to write code, and the VS Community is a good option to have a complete IDE.&lt;/p&gt;

&lt;p&gt;I'm still using C# as my main language, also, the language extended to other worlds beyond enterprise software such games with Unity, Machine Learning with ML.NET, and Mobile Apps with Xamarin, so I can honestly say that I'm very glad to have chosen C# many years ago 😄 .&lt;/p&gt;

&lt;h3&gt;
  
  
  1.3. Jobs
&lt;/h3&gt;

&lt;p&gt;A few years ago, here in Brazil, Java and C# still were the most used languages in companies, probably, this is changing with mobile apps and the popularization of Python for DataScience/MachineLearning projects and JS with Node, but we still don't have changed at all so, we still have great jobs with the "traditional" languages. And I'm unconsidered some old languages like VisualBasic or COBOL because learn then was probably a BAD choice, and when I'm checking the data about what is the most programming languages hated, I'm certain that these languages were really not good options. Next, my other chosen language&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Python
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F8q2g5s6giuqxfb9b5n4k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F8q2g5s6giuqxfb9b5n4k.png" alt="Alt Text" width="387" height="130"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I started to learn Python in 2017 as an option to learn Data Science, Python was growing absurdly in the last few years and this is incredible, we have so many questions in StackOverflow involving Python, but there are more points involving why I choose Python as my second language.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.1 Jupyter Notebooks
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6fzffogj43ssqpq4k91q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6fzffogj43ssqpq4k91q.png" width="800" height="927"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As I said about Visual Studio, Jupyter Notebooks for me was an incredible software to build projects involving Data Science, Jupyter was a different way to put value in our code merging with text like a word document. The possibilities to use Jupyter are so great that big companies and software was putting notebooks in their environment like Microsoft in VS Code, Amazon with AWS or even IBM with Watson Machine Learning Studio.&lt;/p&gt;

&lt;p&gt;I'm glad to choose those languages, they were useful to learn some skills that turn me a developer. Even some other languages have their advantages like JS with React Framework or Swift to make Great apps in IOS, C# and Python have some others features that I prefer, so, even this languages was not in your options, that's OK, but if you considering learning a new programming language, this options can be a great choice. And you, what languages you choose and why? \o  &lt;/p&gt;

</description>
      <category>career</category>
      <category>csharp</category>
      <category>python</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Class vs Dynamic vs Tuple in C#</title>
      <dc:creator>Leonardo Gasparini Romão</dc:creator>
      <pubDate>Thu, 05 Mar 2020 18:01:23 +0000</pubDate>
      <link>https://dev.to/lleonardogr/tuples-vs-class-vs-dynamic-in-c-3g3a</link>
      <guid>https://dev.to/lleonardogr/tuples-vs-class-vs-dynamic-in-c-3g3a</guid>
      <description>&lt;p&gt;Nowadays, with c# 8.0 we have a lot of options to make code, with all these options, it is hard for the first time to know-how is the best option to use when we create complex objects. &lt;/p&gt;

&lt;p&gt;With a functional approach inserting more and more in .NET framework, some people use less code thinking in class and object or using an Object-Oriented approach (when all is an object or a Class). &lt;/p&gt;

&lt;p&gt;This is more evident with the new data structure "Tuple", inserted in c# 7.0.&lt;/p&gt;

&lt;p&gt;But how and when I choose between Class, Dynamic or Tuple? Well, we have some options here...&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Class
&lt;/h2&gt;

&lt;p&gt;Real classes are very useful when we use a DDD approach to architect our systems, creating a class is very simple, just create a new file in your project and we can create our class to make instances of then after&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Person&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;FirstName&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;LastName&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="p"&gt;;}&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;Age&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="k"&gt;set&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;Classes are very useful to prevent duplicates in your code, besides, we have a lot of documentation of software architecture, design patterns, SOLID teaching how we can organize classes to reduce the complexity of our code. Real classes are evident when a new programmer is analyzing our code.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Anonymous Type Object
&lt;/h2&gt;

&lt;p&gt;Anonymous is a feature introduced in c# 3.0 to create complex structures in real-time, with a name and a value, eg...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;Person&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; 
&lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="n"&gt;FirstName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Leonardo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="n"&gt;LastName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"Gasparini"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
   &lt;span class="n"&gt;Age&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;26&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Anonymous types are useful when we deal with Linq operations to select some properties in our program we did not reuse that code in other parts eg...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;PersonCompleteNameList&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Persons&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Person&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;CompleteName&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Person&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FirstName&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="s"&gt;" "&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt; &lt;span class="n"&gt;Person&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LastName&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Anonymous types have a lighter structure comparing with classes because we don't have many options to create constructors or functions inside dynamic. I like to use dynamic when I working on with JSON objects that change all the time and I work on it in a few methods &lt;/p&gt;

&lt;h2&gt;
  
  
  3. Tuple
&lt;/h2&gt;

&lt;p&gt;A tuple is a data structure introduced as a feature in c# 7.0. Tuples are common in other languages like Python to manage complex types without a class. here an example of a tuple&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="c1"&gt;//Unamed tuple&lt;/span&gt;
&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;Person&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Leonardo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Gasparini"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;26&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;//Named tuple&lt;/span&gt;
&lt;span class="n"&gt;Person&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FirstName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"Leonardo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LastName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s"&gt;"Gasparini"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Age&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;26&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tuples are not very different a dynamic when we use a named type, but tuples can be lighter than dynamic because we don't need to name properties of the tuple, besides, comparison of tuples are more easily to do comparing to dynamic and are useful when we need a return a value inside a method.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which of this I choose to my next project?
&lt;/h3&gt;

&lt;p&gt;And the answer is...depends. this is an example that code does not have a single way to learn and use, c# have all these options to make easier any type of programmer to feel comfortable with the language. Even with some differences and advantages among then, is possible to assume that all these options are a good suit to programming...&lt;/p&gt;

&lt;p&gt;Some useful links:&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/44650636/when-to-use-tuple-vs-class-c-sharp-7-0" rel="noopener noreferrer"&gt;When to use: Tuple vs Class c# 7.0&lt;/a&gt;&lt;br&gt;
&lt;a href="https://stackoverflow.com/questions/48118187/value-tuples-vs-anonymous-types-performance" rel="noopener noreferrer"&gt;Value Tuples Vs Anonymous Types Performance&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.codeproject.com/Questions/842992/what-is-the-advantages-of-declaring-anonymous-type" rel="noopener noreferrer"&gt;What are the advantages of declaring anonymous type Object ?&lt;/a&gt;&lt;/p&gt;

</description>
      <category>csharp</category>
      <category>dotnet</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Forget Agile if you don't think about CULTURE</title>
      <dc:creator>Leonardo Gasparini Romão</dc:creator>
      <pubDate>Thu, 05 Sep 2019 03:34:40 +0000</pubDate>
      <link>https://dev.to/lleonardogr/forget-agile-if-you-don-t-think-about-culture-first-33ol</link>
      <guid>https://dev.to/lleonardogr/forget-agile-if-you-don-t-think-about-culture-first-33ol</guid>
      <description>&lt;p&gt;Nowadays, with Agile being sold as a product with many different versions of Agile or important Software Engineering people talking about leaving Agile, I thought that you need to look at an interesting point within organizations, which if your company doesn't is willing to &lt;u&gt;&lt;strong&gt;Changing the way you act and behave in the face of a project's adversity is no use trying to implement any Agile model.&lt;/strong&gt;&lt;/u&gt;. In other words, make sure your company culture has no problems before you think of Agile.&lt;/p&gt;

&lt;h3&gt;The importance of Organization Culture&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencaixandoblocoshome.files.wordpress.com%2F2019%2F09%2F07a0fddb4558086f7d20a55374c1469e.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencaixandoblocoshome.files.wordpress.com%2F2019%2F09%2F07a0fddb4558086f7d20a55374c1469e.jpg" width="800" height="400"&gt;&lt;/a&gt;Jeremy Andrus, Traeger CEO, Source: Pintrest&lt;/p&gt;

&lt;p&gt;The Company Culture, is one of the most important points for a good functioning of the organization, after all, are the practices, behaviors, principles and mindsets that make up this culture, which will give the guidelines on how the company should follow to obtain the desired results.&lt;/p&gt;

&lt;p&gt;But a few months ago, reading a Jeremy Andrus HBR &lt;a href="https://hbr.org/2019/03/traegers-ceo-on-cleaning-up-a-toxic-culture" rel="noopener noreferrer"&gt;article&lt;/a&gt; about his challenge to remove an entire toxic Traeger culture, and starting one from scratch by becoming CIO, made me think that by trying to use modern development models, To improve our software development results, we don't realize that the real problem may simply be the company's culture.&lt;/p&gt;

&lt;p&gt;It's no use trying to bring &lt;b&gt;Scrum&lt;/b&gt; to the company if the culture within your company behaves like a Manufacturing, with stiffened products, no direct customer tracking, and no planning on how to evolve your product, iteration by iteration. It's no use trying to use the benefits of &lt;u&gt;&lt;strong&gt;XP&lt;/strong&gt;&lt;/u&gt;, if your business doesn't bother to make the lives of its employees simpler while delivering acceptable results to its customers it conceives the idea of ​​iterations.&lt;/p&gt;

&lt;p&gt;Sometimes development models considered abominable today, such as the Cascade Model, will be the least conflicting within your company, and if that's your case, then it's definitely not the Agile that will save you.&lt;/p&gt;

&lt;h3&gt; What changes can we then make? &lt;/h3&gt;

&lt;p&gt;Running a business is not easy, especially if we have a problematic culture within it, organizational cultures, as well as cultures of a country, are almost unchanged unless good ideas, time and resources are really invested for such a challenge. But at least I can propose some actions that may be beneficial in this process:&lt;/p&gt;

&lt;h4&gt; 1 - We need to abandon the traditional manufacturing model &lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencaixandoblocoshome.files.wordpress.com%2F2019%2F09%2Ff7910aa4-5809-4a96-a8be-f12bc6d0049b-e1567649359649.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencaixandoblocoshome.files.wordpress.com%2F2019%2F09%2Ff7910aa4-5809-4a96-a8be-f12bc6d0049b-e1567649359649.jpg" width="800" height="400"&gt;&lt;/a&gt;Source: Google&lt;/p&gt;

&lt;p&gt;Many companies still follow a pattern of behavior inherited from the big factories of the industrial revolution, but this model is terrible when we try to apply it to software development. Software is not like cars where if something goes wrong, you have to stop the entire factory, recall the products, and review the project from the start.&lt;/p&gt;

&lt;p&gt;A good analogy I've heard is treating software like cooking in a restaurant. Your challenge is to deliver a plate (software), even with minor errors, or some delay, is better than delivering no plate, or returning it to the kitchen if the customer does not like it. And as you see how the customer reacts and opines about this dish, deliver a more robust dish.&lt;/p&gt;

&lt;h4&gt; 2 - Your Culture needs to understand that agile methods are designed to make the programmer's work less complicated and stressful. &lt;/h4&gt;

&lt;p&gt;Applying Scrum consequently brings a better result to the customer, but it is not a direct benefit to him. As in the restaurant analogy, Agile would be like cooking and improving the process doesn't change the customer's perception of your product, so the programmer gets the benefit.&lt;/p&gt;

&lt;p&gt;But that's great, changing a culture that understands and behaves to help the developer's work is a great way to not cause demotivation or stress, things that are not lacking in the market today.&lt;/p&gt;

&lt;h4&gt; 3 - Your client needs to be actively with your team. &lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencaixandoblocoshome.files.wordpress.com%2F2019%2F09%2Fdesigner_and_client_2__dribbble__1.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencaixandoblocoshome.files.wordpress.com%2F2019%2F09%2Fdesigner_and_client_2__dribbble__1.gif" width="800" height="400"&gt;&lt;/a&gt;Source: Dibble, Artist: DeeKay&lt;/p&gt;

&lt;p&gt;This is a principle widely used by Scrum. Being around to help get the development team on track helps reduce the stumbling blocks that can occur midway.&lt;/p&gt;

&lt;p&gt;Modern applications like Netflix, Ebay or PokemonGo. They are nothing more than ideas that have been transposed into an application to generate value for your customers, be it money or entertainment. It does not have to be perfect on first delivery, with all of its functions being delivered at once.&lt;/p&gt;

&lt;p&gt;These changes go directly to the principles that the agile manifesto proposed, simplicity, evolution, and engagement. If these things are within your company culture then you can be more relaxed, you're on the right track.&lt;/p&gt;

&lt;p&gt;Sources:&lt;br&gt;
&lt;a href="https://medium.com/yello-offline/agile-is-cooking-scrum-is-just-a-recipe-and-the-team-is-a-restaurant-1f8706e2fdc3" rel="noopener noreferrer"&gt;Agile is cooking, Scrum is just a recipe, and the team is a restaurant.&lt;/a&gt;&lt;br&gt;
&lt;a href="https://hbr.org/2019/03/traegers-ceo-on-cleaning-up-a-toxic-culture" rel="noopener noreferrer"&gt;Traeger’s CEO on Cleaning Up a Toxic Culture&lt;/a&gt;&lt;br&gt;
&lt;a href="https://agilemanifesto.org/" rel="noopener noreferrer"&gt;Agile Manifesto&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;*This article is in Portugesese in &lt;a href="https://wp.me/paJQm5-5k" rel="noopener noreferrer"&gt;"Esquece AGILE, se você antes não se preocupar com Cultura."&lt;/a&gt; on &lt;a href="https://encaixandoblocos.com" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="http://encaixandoblocos.com" rel="noopener noreferrer"&gt;http://encaixandoblocos.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>carrer</category>
      <category>agile</category>
    </item>
    <item>
      <title>Forget that AI is future, AI is NOW!</title>
      <dc:creator>Leonardo Gasparini Romão</dc:creator>
      <pubDate>Mon, 15 Jul 2019 23:36:17 +0000</pubDate>
      <link>https://dev.to/lleonardogr/forget-ai-is-future-ai-is-now-27en</link>
      <guid>https://dev.to/lleonardogr/forget-ai-is-future-ai-is-now-27en</guid>
      <description>&lt;p&gt;This article is in Portuguese &lt;a href="https://wp.me/paJQm5-4L" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After a few months learning about Machine Learning and participating in the Behind The Code development marathon offered by IBM here in Brazil, in the course of the challenges I was amazed at how big companies are creating AI solutions that are so simple to implement that we do not need them any more. a line of code for it!&lt;/p&gt;

&lt;h2&gt;Taking AI from gods and giving to humans&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;"He was a defender of humanity, known for his clever intelligence, responsible for stealing the fire of Hestia and giving it to mortals."&lt;/p&gt;

&lt;p&gt;Wikipedia Brazil about the Greek Mythology of Prometheus&lt;/p&gt;




&lt;/blockquote&gt;
&lt;br&gt;&lt;br&gt;
Python, R, Julia, hours and hours of reading posts, books, articles, watching the most diverse videos and watching classes until I understand &lt;strong&gt; a little &lt;/strong&gt; of this incredible universe that is AI. But now and then I wondered if it would be possible for AI to become something simpler, because it now seemed that it was necessary to be an extremely skilled professional, almost a "God" of mathematics and programming, so that one could work with AI, but it seems that this is already changing and like the Promethean legend, the AI ​​is coming out of "Olympus", and being delivered to "mortals."

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsteamcdn-a.akamaihd.net%2Fsteam%2Fapps%2F619150%2Fheader.jpg%3Ft%3D1561033513" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fsteamcdn-a.akamaihd.net%2Fsteam%2Fapps%2F619150%2Fheader.jpg%3Ft%3D1561033513" alt="while-true-learn-gd" width="460" height="215"&gt;&lt;/a&gt;While True: Learn was the first idea that showed me how AI could be simpler, the game teaches you through streams like creating classifiers. In it, you are a freelance programmer who performs the most varied work of ML.&lt;/p&gt;

&lt;p&gt;The works are very similar to real-world problems, in addition to the game provide content to learn how it works in real-life game models, if you want to see more about the game it is for sale on Steam &lt;a href="https://luden.io/wtl/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;Life imitates art&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencaixandoblocoshome.files.wordpress.com%2F2019%2F07%2F718bbbbb-f139-4cec-97ae-a25511cce565.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencaixandoblocoshome.files.wordpress.com%2F2019%2F07%2F718bbbbb-f139-4cec-97ae-a25511cce565.png" alt="718bbbbb-f139-4cec-97ae-a25511cce565" width="800" height="400"&gt;&lt;/a&gt; IBM Watson Studio with Machine Learning&lt;/p&gt;

&lt;p&gt;IBM with Watson, Microsoft with Azure ML Studio, Jupyter with Jupyter Labs, several platforms are creating ways to make AI no longer a complex thing to do.&lt;/p&gt;

&lt;p&gt;Instead of hours writing lines of code to assemble a predictive model, use flowcharts to assemble your model. When working with Watson Studio, and realizing that without a line of code I could create an excellent classifier of image recognition was something amazing.&lt;/p&gt;

&lt;p&gt;With this, you realize that now, &lt;strong&gt; AI is now for all &lt;/strong&gt;. Over time, more and more areas will benefit from this, these platforms are taking away the need to have a highly skilled Data Science professional and providing resources for practitioners from other areas such as medicine, economics, biology to be able to use AI to their pleasure . And that breakthrough was in a matter of a few years, which surprised me most in this process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencaixandoblocoshome.files.wordpress.com%2F2019%2F07%2Fibm_watson_studio__create_train_and_test_a_visual_recognition_model.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencaixandoblocoshome.files.wordpress.com%2F2019%2F07%2Fibm_watson_studio__create_train_and_test_a_visual_recognition_model.gif" alt="IBM_Watson_Studio__Create,_Train,_and_Test_a_Visual_Recognition_Model" width="800" height="400"&gt;&lt;/a&gt; Watson Creating as classes for training from images in .zip files recognizing each type of dog.&lt;/p&gt;

&lt;h2&gt;The challenge of AI is not so simple either&lt;/h2&gt;

&lt;blockquote&gt;"Making simple the complicated is easy, making the complicated in simple, this is creativity"
&lt;p&gt;Charles mingus&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Of course, those who possess a theoretical ML bag can create better predictive models as needed. We can not forget that these platforms are abstracting complications so that people who are not IT area can take advantage of AI, but they are platforms of support.&lt;/p&gt;

&lt;p&gt;Asking the right questions about what your data can show is a challenge that will still require of our heads, in being creative and innovative so that we can extract intelligence from the data that we have, in the end, the work is still ours.&lt;/p&gt;

&lt;p&gt;But now the competition is changing, now it's no longer the best Data Scientist or ML Engineer, but whoever collects, organizes the best data and asks the best questions on these data. Now the important thing is guidelines and data sources that will be used.&lt;/p&gt;

&lt;p&gt;But seeing all this, I see how Data Science has evolved in such a short time, the future looks bright, and it ends up making me very excited, as they always say, technology has come to stay haha.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;Sources:&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://luden.io/wtl/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://luden.io/wtl/" rel="noopener noreferrer"&gt;https://luden.io/wtl/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.ibm.com/watson/br-pt/" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://www.ibm.com/watson/br-pt/" rel="noopener noreferrer"&gt;https://www.ibm.com/watson/br-pt/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://en.wikipedia.org/wiki/Prometheus" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://en.wikipedia.org/wiki/Prometheus" rel="noopener noreferrer"&gt;https://en.wikipedia.org/wiki/Prometheus&lt;/a&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>machinelearning</category>
      <category>ibmwatson</category>
      <category>datascience</category>
    </item>
    <item>
      <title>If you wanna learn data Science before coding, try this book.</title>
      <dc:creator>Leonardo Gasparini Romão</dc:creator>
      <pubDate>Mon, 24 Jun 2019 23:33:08 +0000</pubDate>
      <link>https://dev.to/lleonardogr/review-data-science-for-business-25b8</link>
      <guid>https://dev.to/lleonardogr/review-data-science-for-business-25b8</guid>
      <description>&lt;p&gt;As clumsy as I am, I have lost count of the books I read, I believe I am between the seventh and eighth at the time I am writing this publication, but I am happy to have finished one of the books that may be the most painful on the head this year, I'm talking about the&lt;br&gt;
&lt;strong&gt;Data Science for Business&lt;/strong&gt; &lt;a href="http://tomfawcett.info/" rel="noopener noreferrer"&gt; Tom Fawcet's &lt;/a&gt; book, which although I liked much of the experience of having read this book was not as much fun as I thought it would be.&lt;/p&gt;

&lt;h3&gt;1. Putting the pieces together&lt;/h3&gt;

&lt;p&gt;
    Well, before my analysis makes you change your mind about getting this book or not, I'll say
    &lt;strong&gt;for my experience as a programmer,&lt;/strong&gt;, this one book was worth buying.
&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;
        "Success in today's business environment,
        &lt;span&gt;
            requires the ability to think about
            how these fundamental concepts apply to
            certain business problems -
            think analytically in data ".
        &lt;/span&gt;
    &lt;/p&gt;
    &lt;p&gt;- Data Science for Business&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Like other people I've heard of this book, I've understood it to be great for managers, directors, or leaders who need to understand how to evaluate a Data Science professional and how to hire them. You end the book by understanding how various Data Science concepts work, and at the same time you apply them to those who already work in that area, the book may present some &lt;span&gt;Insights&lt;/span&gt; interesting.&lt;/p&gt;

&lt;h3&gt;2. The other hand&lt;/h3&gt;

&lt;p&gt;However, as the book itself says, it's not a technical book, not that it's a problem, on the contrary, maybe that's the best thing about this book. What might have given me some discomfort to read it, was that the book is not as educational as I thought it would be.&lt;/p&gt;

&lt;p&gt;The examples presented in this book are great, they are based on real events and it goes very well to explain them, but perhaps the lack of visualizations and metaphors made me have to think hard about what I was reading. there are other books that are very good at bringing the reader with metaphors, such as &lt;b&gt;Understanding Algorithms by Aditya Y. Bhargava&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;Perhaps this has happened to me, because Machine Learning and Data Science are not at all trivial matters, which require a certain commitment from any professional who wishes to learn about it. It is possible that with other books that have a more didactic proposal make me understand and enjoy the book much more. Or it has been a loss of my expectation.&lt;/p&gt;

&lt;p&gt;Another problem of this book is perhaps the size, not that it could be different, after all it has a fair size to explain so many concepts, though I believe that if he separated the book into 3 parts, explaining to the reader that he should perfectly understand each part to go on, it would feel better when I was reading.&lt;/p&gt;

&lt;h3&gt;3. In the end, all be alright&lt;/h3&gt;

&lt;p&gt;I was pleased to finish this book, it took me a long time but it was not a complete waste, unfortunately I may have to revise it when it is more used to the Data Science universe. The good thing about this book is that for an already savvy professional, it's objective and accurate in all its applications, so a statistician or a more experienced programmer with this area of ​​data analysis will probably love this approach.&lt;/p&gt;

&lt;p&gt;My recommendation: If you are new to the area of ​​statistics and Big Data, I suggest you read only the chapters pertaining to the work of Data Science, then read other more didactic books on mathematics for Data Science and after much practice re-read it. If you start with this book, there's a good chance you'll get frustrated. Keep this book fondly, but speaking of analogy, treat this book as the Nemesis of RE3, you will have to face it several times, but only after a while will you be ready to defeat it.&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>business</category>
      <category>book</category>
    </item>
    <item>
      <title>Developer, do you want more satisfaction: be social and earn time</title>
      <dc:creator>Leonardo Gasparini Romão</dc:creator>
      <pubDate>Sun, 14 Apr 2019 20:55:51 +0000</pubDate>
      <link>https://dev.to/lleonardogr/developer-do-you-want-more-satisfaction-be-social-and-earn-time-3epk</link>
      <guid>https://dev.to/lleonardogr/developer-do-you-want-more-satisfaction-be-social-and-earn-time-3epk</guid>
      <description>&lt;p&gt;Reading this month's edition of the HRB, if you have a topic that is being discussed today is emotional intelligence, companies and professionals increasingly seek answers to the confusion of our mind, How can we have more satisfaction with ourselves and in companies? How can we have our healthy mind amid so many conflicts that we have nowadays? How to stop us from having Burnout? These are just small questions that companies try to solve so that we have less dissatisfaction and unhappiness with our routines, after all, nowadays the main phrase of the movie "Fight Club" has never been as present as today: &lt;/p&gt;

&lt;blockquote&gt; "We are the middle children of history, without purpose or place. We had no great War, we had no Great Depression. Our Great War is the spiritual war, our Great Depression is our life. We Were created by television to believe that one day we would be rich, movie stars and the globe. But we won't be. And we're gradually learning that. And we are very, very angry. "&lt;/blockquote&gt; 

&lt;p&gt;Well, at least we learned a few things to solve our dissatisfaction, and by putting it in the T. I scenario, there are two things that we developers usually have a little bit of disability: &lt;/p&gt;

&lt;h2&gt;Be Sociable&lt;/h2&gt; 

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencaixandoblocoshome.files.wordpress.com%2F2019%2F04%2Fadult-cellphone-cheerful-1530313-e1555274498419.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencaixandoblocoshome.files.wordpress.com%2F2019%2F04%2Fadult-cellphone-cheerful-1530313-e1555274498419.jpg" alt="Adult-cellphone-cheerful-1530313. jpg" width="800" height="400"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;We Have to admit, we are very sociable animals, we need to reserve time to see our friends, family, even strangers so that our day-to-day looks better. Volunteer Work, group activities, even a book club. At the end of the day, we need people, after all, some articles even say that loneliness can do us more harm than sedentarism and poor nourishment. &lt;/p&gt;

&lt;h3&gt;Sociability is not our strong&lt;/h3&gt; 

&lt;p&gt;If There is one thing that really is not our forte is sociability, a study of the professional personality of the T. I area shows that our strong is not sociability, but we need this challenge, we need to learn to have more sociability in our routine, with Our co-workers, with the people in our neighbourhood, and people we barely know. &lt;/p&gt;

&lt;h2&gt;Learn to earn more time than money&lt;/h2&gt; 

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencaixandoblocoshome.files.wordpress.com%2F2019%2F04%2Fadult-alarm-alarm-clock-1028741-e1555274460818.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencaixandoblocoshome.files.wordpress.com%2F2019%2F04%2Fadult-alarm-alarm-clock-1028741-e1555274460818.jpg" alt="adult-alarm-alarm-clock-1028741" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our area has the privilege of currently having lots of demand and having excellent wages, if we analyze, our area is excellent for those who want to have a solid career and with fast results, but if there is one thing our area does not learn, it is to gain time, after all, many of We have already gone through the need to stay later to deliver a project on time, a feature, a new component. Although we have a good financial return with overtime, the most recent studies seem to not compensate to spend our time. &lt;/p&gt;

&lt;h3&gt;We can save time out of office&lt;/h3&gt; 

&lt;p&gt;We Have many activities we do not like to do even out of office, well people who hate shopping in the market or ironing clothes or dust from the house, or cooking. To save our time outsourcing activities like these, while we can use this time for our leisure, socialize or even have the fullness to do nothing can give us a much better financial return than a few extra hours. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt; [Conclusion]: &lt;/strong&gt; It Seems that we are now learning about how our emotions shape us, and as developers, we need to find solutions to control them just as we find solutions to develop new systems. At least now we have a north, so &lt;strong&gt; give value to your time, because once spent, we can't recover it &lt;/strong&gt;. &lt;/p&gt;

&lt;h4&gt;Sources:&lt;/h4&gt;

&lt;ul&gt;
    &lt;li&gt;https://hbrbr.uol.com.br/vale-a-pena-trocar-dinheiro-por-tempo/&lt;/li&gt;
    &lt;li&gt;https://www.cnn.com/2017/09/11/health/sitting-increases-risk-of-death-study/index.html&lt;/li&gt;
    &lt;li&gt;https://www.amazon.com.br/Managing-Yourself-Measure-Clayton-Christensen/dp/1422157997?tag=goog0ef-20&amp;amp;smid=A1ZZFT5FULY4LN&amp;amp;ascsubtag=go_1494986073_58431735035_285514469186_aud-519888259198:pla-485032980911_c_&lt;/li&gt;
&lt;/ul&gt; 

&lt;p&gt; &lt;/p&gt;

</description>
      <category>carrer</category>
    </item>
    <item>
      <title>How to debug SQL Databases</title>
      <dc:creator>Leonardo Gasparini Romão</dc:creator>
      <pubDate>Sat, 06 Apr 2019 12:29:33 +0000</pubDate>
      <link>https://dev.to/lleonardogr/how-to-create-an-evolutive-architecure-from-legacy-databases-pt-3-32fl</link>
      <guid>https://dev.to/lleonardogr/how-to-create-an-evolutive-architecure-from-legacy-databases-pt-3-32fl</guid>
      <description>&lt;p&gt;This post was part of a series talking about How to create a good architecture for SQL Databases:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;a href="https://dev.to/lleonardogr/how-to-create-a-scalable-architecture-when-the-businessdomain-logic-is-in-the-database-2bko"&gt;How to versioning SQL databases architecture using GitHub and Visual Studio&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://dev.to/lleonardogr/how-to-create-an-evolutive-architecure-from-legacy-databases-pt-2-2df9"&gt;How to organize SQL legacy Databases&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;How to debug SQL Databases&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://dev.to/lleonardogr/how-to-migrate-sql-databases-to-a-new-version-server-58mc"&gt;How to migrate SQL databases to a new version&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;First, we set up an environment for database version control, then we work on creating a new framework to organize the code we created on the server, now let's talk about another feature that we can use in our databases to us Help, &lt;strong&gt;debugging&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Debugging in Database
&lt;/h3&gt;

&lt;p&gt;That part was weird to me because I've never seen anyone debug in a database for the obvious reason: &lt;strong&gt;The debug mode is much less performative&lt;/strong&gt;. But, debug is a tool that most programmers do not live without now, and I think I could not solve 90% of problems with programming if I had not debug. A Microsoft &lt;a href="https://docs.microsoft.com/pt-br/sql/ssms/scripting/run-the-transact-sql-debugger?view=SQL-server-2017" rel="noopener noreferrer"&gt;article&lt;/a&gt; explains very well the walkthrough to have this feature on your SQL servers. &lt;/p&gt;

&lt;p&gt;So, how to bring such an important resource to databases without compromising performance?&lt;/p&gt;

&lt;h3&gt;
  
  
  Strategy: Prepare multiple environments
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencaixandoblocoshome.files.wordpress.com%2F2019%2F04%2F0_ubwa5aqwxqqp17gf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fencaixandoblocoshome.files.wordpress.com%2F2019%2F04%2F0_ubwa5aqwxqqp17gf.png" alt="0_uBWA5AQwxqqp17Gf" width="800" height="400"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Separate development environments when we talk about systems, companies already adopt the idea of having development, homologation and production environments. These environments allow us to make a transition from new functionalities in a less problematic way, even though the deliveries are somewhat bureaucratizing. With the development environment, we can work freely in the debug of apology currencies and jobs quietly, only this will already help a lot the work of scheduling new features and doing maintenance on possible bugs. An article in&lt;br&gt;
&lt;a href="https://medium.com/venture-garden-group-technology-blog/effective-development-environments-development-test-staging-pre-production-and-production-environmen-a3a85cd349b2" rel="noopener noreferrer"&gt;Medium&lt;/a&gt; explains this process very well.&lt;/p&gt;

&lt;h4&gt;
  
  
  Synchronize production data with the development
&lt;/h4&gt;

&lt;p&gt;It Is important to remember that we need the data updated with the development environment if we always want to have the best real proof of new functionality or the errors our base may be experiencing. This synchronization can be instantaneous or scheduled but if possible have it prepared.&lt;/p&gt;

&lt;h4&gt;
  
  
  Adding another database to my infrastructure can be very expensive
&lt;/h4&gt;

&lt;p&gt;Nowadays, robust databases do not have a few bytes of information, on the contrary, the largest technology companies are playing with PETA bytes of data, making transfers and analyses in real-time and massively. With our current scenario, having disk space in a robust infrastructure to develop software, it can be very expensive, even more, if we want to have environments as close to production as possible. But the local infrastructure to work with the database is becoming something much cheaper as it spends the years. Open-source infrastructure, storage, and data processing Solutions are increasingly appearing in the world. Database-specific cloud computing Solutions then dropping to the public's liking so enabling you to work with more resources. So spend some time analyzing how to align the cost of your infrastructure so you have multiple environments.&lt;/p&gt;

&lt;p&gt;These suggestions, plus the other parts of this article, you will have a much more robust and prepared environment for the organization routine, less prone to failure and more organized.&lt;/p&gt;

</description>
      <category>sql</category>
      <category>database</category>
      <category>tutorial</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
