<?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: Fabio Costa</title>
    <description>The latest articles on DEV Community by Fabio Costa (@fabiocosta89).</description>
    <link>https://dev.to/fabiocosta89</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%2F614635%2F4062c525-758e-4d53-89eb-ee895c64e8e1.png</url>
      <title>DEV Community: Fabio Costa</title>
      <link>https://dev.to/fabiocosta89</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fabiocosta89"/>
    <language>en</language>
    <item>
      <title>Side Project: RedirectMe</title>
      <dc:creator>Fabio Costa</dc:creator>
      <pubDate>Mon, 27 Jun 2022 18:37:17 +0000</pubDate>
      <link>https://dev.to/fabiocosta89/side-project-redirectme-33gi</link>
      <guid>https://dev.to/fabiocosta89/side-project-redirectme-33gi</guid>
      <description>&lt;p&gt;I created a side project, not long ago, to create some proof of concepts on tech stacks. It is a simple web application that allows you to create short URLs from a bigger link, and I called it RedirectMe.&lt;/p&gt;

&lt;p&gt;My main focus was creating a simple web application, focusing on user privacy, free to use and &lt;a href="https://fabiocosta.eu/blog/guilt-on-the-open-source"&gt;open-source&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Front-end
&lt;/h2&gt;

&lt;p&gt;For the front-end, I chose &lt;a href="https://reactjs.org/"&gt;Reactjs&lt;/a&gt;, because I had never used it before and I thought it would be a great opportunity to learn while using it. (It was created with Reactjs 17, an upgrade to v18 will happen soon, along with a post on how it goes).&lt;/p&gt;

&lt;p&gt;The app was simple enough. One page that allows inserting the URL to be shortened, calls a backend REST API endpoint, receives the new shorted URL, and shows it to the user. No user data is recorded, other than the connection between the short URL and the URL inserted by the user.&lt;/p&gt;

&lt;p&gt;The other page is where the redirection happens. When someone uses the short URL, it arrives on a page, where the backend API is called, in order to retrieve the correspondent's full URL. After that, the front redirects the user to this link.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fXW5ccTn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/862lz4gjcqctr2b676oc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fXW5ccTn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/862lz4gjcqctr2b676oc.jpg" alt="A board with an application planning" width="800" height="533"&gt;&lt;/a&gt; &lt;a href="https://unsplash.com/photos/qWwpHwip31M"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Back-end
&lt;/h2&gt;

&lt;p&gt;The application is simple and my intent is only to have a really short amount of API endpoints (at least for now), so I created the back-end API with &lt;a href="https://azure.microsoft.com/en-us/services/functions/"&gt;Azure Functions&lt;/a&gt;, using .NET Core 3.1 (migration to .NET 6 and Azure Functions v4 planned - another post planned to follow it) since there was not a lot of processing to be done on each endpoint.&lt;/p&gt;

&lt;p&gt;There are only 2 endpoints. One that receives the long URL from the user, generates one unique short URL, saves on the database, and returns it to the front. The other endpoint receives from the front the short URL, search in the database for the correspondent full URL, and returns it to the front.&lt;/p&gt;

&lt;p&gt;Quite simple and perfect for this kind of backend. Creating one &lt;a href="https://dotnet.microsoft.com/en-us/apps/aspnet/apis"&gt;.Net Core Web API&lt;/a&gt; application would be overengineering for this kind of data treatment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Database
&lt;/h2&gt;

&lt;p&gt;For the database, I choose &lt;a href="https://docs.microsoft.com/en-us/azure/cosmos-db/introduction"&gt;Azure CosmosDB&lt;/a&gt;. I chose it because of its simplicity, flexibility, and performance. I had never used it before, so it was also the perfect application to learn it.&lt;/p&gt;

&lt;p&gt;In it, only one table exists, where I save the correlation between the short and the long URL. Other than that, I also record the creation date, the last used date, and a counter of how many times that short URL was used. These last 3 fields exist only to generate some statistics.&lt;/p&gt;

&lt;h2&gt;
  
  
  App link and GitHub
&lt;/h2&gt;

&lt;p&gt;The application is online, free to use, hosted on Azure, on the &lt;a href="https://r.fabiocosta.eu"&gt;https://r.fabiocosta.eu&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For the people that want to check the source code or even fork it and create their own version, I created the application as open-source and everyone can do whatever they want with it. I just ask that people provide feedback and give the credits for the creation. Link to &lt;a href="https://github.com/fabiocosta89/redirectme"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qsmP_wEj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a4sf6uucc1q0o9oz58n5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qsmP_wEj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a4sf6uucc1q0o9oz58n5.jpg" alt="Post's it's with Todo, Doing and Done phrases" width="800" height="628"&gt;&lt;/a&gt; &lt;a href="https://unsplash.com/photos/OXmym9cuaEY"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;I have several ideas to improve the web application, some of which you can check on the GitHub repository, in the project zone.&lt;/p&gt;

&lt;p&gt;There are several small improvements to make, but there is one big one that I should work on first, which is a back-office, so I can manage the URLs (without going to the database directly) and have a dashboard with statistics.&lt;/p&gt;

&lt;p&gt;More on it in a future post 🙂&lt;/p&gt;




&lt;p&gt;This was first published on my website &lt;a href="https://fabiocosta.eu"&gt;fabiocosta.eu&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>react</category>
      <category>cosmosdb</category>
      <category>opensource</category>
      <category>dotnet</category>
    </item>
    <item>
      <title>State of the World - April 2022</title>
      <dc:creator>Fabio Costa</dc:creator>
      <pubDate>Sun, 24 Apr 2022 08:56:49 +0000</pubDate>
      <link>https://dev.to/fabiocosta89/state-of-the-world-april-2022-3nm7</link>
      <guid>https://dev.to/fabiocosta89/state-of-the-world-april-2022-3nm7</guid>
      <description>&lt;p&gt;Unless you have been in a bunker at the north pole, you have heard about the war in Ukraine. All the world has eyes on the news from there. &lt;/p&gt;

&lt;p&gt;This war has impacted the world. From the feeling of insecurity, the misfortune towards the Ukrainian people, or the economic impact on our lives, everyone was impacted. But nothing compared to the suffering felt by the Ukrainians. They have to run from their homes, watch people die, watch friends die, watch family die...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_TOU1hRl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bcsse01zgn0n7jw6quj0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_TOU1hRl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bcsse01zgn0n7jw6quj0.jpg" alt="A photo of different people with Ukraine military's cloth " width="800" height="433"&gt;&lt;/a&gt;&lt;a href="https://twitter.com/moui/status/1497593997455343616"&gt;❤𝕄𝕠𝕦𝕚™❤️ 💉💉💉💉 on Twitter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It takes courage to fight an enemy, but it helps to have a superior motive. There are several examples of people fighting for their homes and lives. It does not matter what the profession, the age, the gender, the political party, or even the nationality. They are all united.&lt;/p&gt;

&lt;p&gt;But the world cannot stop. There are many other ways to help Ukraine. You have the &lt;a href="https://stand-with-ukraine.pp.ua/"&gt;StandWithUkraine&lt;/a&gt;, a website that lists several ways to help, including donations, how to protest against Russia, or even how to join the &lt;a href="https://fightforua.org/"&gt;Foreign legion of Ukraine&lt;/a&gt;!!!.&lt;/p&gt;

&lt;p&gt;In the tech world, supporting Ukraine is also a priority. On the 25 and 26 of April, for instance, the &lt;a href="https://www.devsforukraine.io/"&gt;Devs For Ukraine&lt;/a&gt; conference will take place, with the objective of raising funds and providing support. You can find the program on their website. The event is free, but if you have the possibility and agree with the cause, please donate. It’s a great opportunity to help and learn at the same time.&lt;/p&gt;

&lt;p&gt;Off-Course, on the other side, we cannot confuse Putin with Russia, nor can we confuse Russia with Russians. Each person is an individual person and has the right to their own opinion and not everyone shares Putin’s vision.&lt;/p&gt;

&lt;p&gt;We are all human and we should not fight each other. We have evolved so much since the end of the Second World War that we should have already discovered that war does not solve problems. Let’s just hope that the next generation does a better job than the current one...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OM8QVAoo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ju77jz3wv908q6djzz9g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OM8QVAoo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ju77jz3wv908q6djzz9g.jpg" alt="A paper with Peace written and a person on background with the Ukraine flag" width="800" height="535"&gt;&lt;/a&gt; &lt;a href="https://unsplash.com/photos/iHNT6Ii7x5A"&gt;Free Help ukraine Image on Unsplash&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;This was first published on my website &lt;a href="https://fabiocosta.eu"&gt;fabiocosta.eu&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>peace</category>
      <category>world</category>
    </item>
    <item>
      <title>Guilt on the open-source</title>
      <dc:creator>Fabio Costa</dc:creator>
      <pubDate>Thu, 13 Jan 2022 13:37:55 +0000</pubDate>
      <link>https://dev.to/fabiocosta89/guilt-on-the-open-source-4811</link>
      <guid>https://dev.to/fabiocosta89/guilt-on-the-open-source-4811</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--j22oObD2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l0zg6ysr7mk88dudhoje.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--j22oObD2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l0zg6ysr7mk88dudhoje.jpg" alt="A person feeling guilty" width="800" height="533"&gt;&lt;/a&gt; &lt;em&gt;Photo by &lt;a href="https://unsplash.com/@ericjamesward"&gt;Eric Ward&lt;/a&gt; on &lt;a href="https://unsplash.com/"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Everyone uses or has used at some point, some open-source library or framework. But have you stopped your work to give your gratitude toward the creator/maintainer? Have you stopped to think that this creator/maintainer or even team of maintainers are not machines and they are working for free most of the time? They are not obliged to by any means to the project.&lt;/p&gt;

&lt;p&gt;They are humans... they have a life outside of GitHub... They have families... and most of them, have jobs that pay the bills... Most of them work on these side projects, on their own time, after work, or when the family is already sleeping. And like all of us, they also need to sleep and rest.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fxIYgup_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o7qya0y0pbme03wrilo3.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fxIYgup_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o7qya0y0pbme03wrilo3.jpg" alt="An hand in the middle of the ocean" width="796" height="966"&gt;&lt;/a&gt; &lt;em&gt;Photo by &lt;a href="https://unsplash.com/@sseeker"&gt;Stormseeker&lt;/a&gt; on &lt;a href="https://unsplash.com/"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Have you heard of “&lt;strong&gt;Burnout&lt;/strong&gt;”? yes, it’s more discussed right now because of COVID-19 and the constant working from home consequence. But it existed before the COVID-19 situation and it will continue to exist. As long as people have a “burden” higher than they can manage. If you have more tasks on your plate than you can manage/work on and this situation happens for a long time, you are on the path to having burnout. It’s a serious problem and should be addressed carefully. If you have this feeling, do not hesitate to seek help. I am sure that you are surrounded by colleagues/managers/family or even specialists that will be able to help you before it gets too problematic. And of course, if you know someone that might be experiencing this, help him, as he might not even notice that he is on the path of doom.&lt;/p&gt;

&lt;p&gt;After this public health call, let us go back to the open-source subject. It’s possible for open-source maintainers also to have burned out. When the project gets famous, it’s used by several people/companies, the issues/requests arrive. They arrive faster than you can correct/implement them. But you feel bad if you do not work on it. You have a feeling of guilt. The path of doom is being walked by, and if not carefully, it will arrive at a dead end. What happens after? Usually, the project is abandoned. No longer maintained. No evolution. Security holes accumulation. And of course, people get mad about it. They need to find an alternative or fork themselves the project and do the corrections needed. Another dead project to be added to the big cemetery of code repository that we can find online.&lt;/p&gt;

&lt;p&gt;BUT, let’s go back a little. You might think: “Is there something that I can do to help avoid this situation”? And I say, “&lt;strong&gt;Yes&lt;/strong&gt;”. Even if it does not fully “cure” this problem, it’s possible to reduce it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uqCCZPrZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tussc3j21qyes0ab3xpx.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uqCCZPrZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tussc3j21qyes0ab3xpx.jpg" alt="A woman holding an umbrella for a child" width="800" height="533"&gt;&lt;/a&gt; &lt;em&gt;Photo by &lt;a href="https://unsplash.com/@bakutroo"&gt;J W&lt;/a&gt; on &lt;a href="https://unsplash.com/"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There are several ways to help. You can find out how to contribute to the project (producing code, documentation, etc), you can donate (If the maintainer gets enough donations, he might dedicate full time to the project) or even give a simple “&lt;strong&gt;Thank you for your work&lt;/strong&gt;” to the maintainer. Shown to the maintainer your gratitude. Do polite requests/suggestions, not demands. &lt;/p&gt;

&lt;p&gt;Let's all contribute to a better world, where we help each other. We are all in the same boat. I leave here a video of the event dotJS 2012, where this guilt is told in the first person, by &lt;a href="https://twitter.com/fat"&gt;Fat&lt;/a&gt;:&lt;/p&gt;

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




&lt;p&gt;This was first published on my website &lt;a href="https://fabiocosta.eu"&gt;fabiocosta.eu&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>github</category>
      <category>guilt</category>
      <category>support</category>
    </item>
    <item>
      <title>My first post</title>
      <dc:creator>Fabio Costa</dc:creator>
      <pubDate>Fri, 24 Dec 2021 09:26:31 +0000</pubDate>
      <link>https://dev.to/fabiocosta89/my-first-post-4629</link>
      <guid>https://dev.to/fabiocosta89/my-first-post-4629</guid>
      <description>&lt;p&gt;Hello, my name is Fábio and I am a &lt;a href="https://fabiocosta.eu/#about"&gt;Web developer&lt;/a&gt;, specialized in .NET. Although I have a developer degree, I always considered myself a web developer, since I started my career doing web development and I love it.&lt;/p&gt;

&lt;p&gt;I live in &lt;a href="https://en.wikipedia.org/wiki/Luxembourg"&gt;Luxembourg&lt;/a&gt; for almost 8 years now, and I like it. It's a very international (small) country, where you can find several different cultures.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xDqAbUpJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rzesr83qpkv8c14vpy71.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xDqAbUpJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rzesr83qpkv8c14vpy71.jpg" alt="Luxembourg flag" width="800" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now the question, why did I create a blog? I could have just created my website, with just my information and done, right?..&lt;/p&gt;

&lt;p&gt;Well, I could do that and then go to &lt;a href="https://medium.com/"&gt;Medium&lt;/a&gt; or &lt;a href="https://dev.to/"&gt;Dev&lt;/a&gt; and read some post from some other developer. The world is full of content consumers and there aren't many creators. Most people spend their free time reading newspapers, on Facebook, Instagram, blogs, etc. I am one of those people also...&lt;/p&gt;

&lt;p&gt;So, I decided I need to create content. Even if it's only for myself. About what? Wherever comes to my mind at the time. About thoughts, tech, coding, .NET, etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Avpt4hk8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tr4m3lebyvhmii3ed0z4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Avpt4hk8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tr4m3lebyvhmii3ed0z4.jpg" alt="Une person at the top of a rock" width="800" height="1067"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And here is my first post, with a small introduction and a promise (that I will give my best, not to fail), with my quest of producing content, relevant and interesting preferentially, and contributing to the world's content. I will share my knowledge and learn a lot with this challenge.&lt;/p&gt;

&lt;p&gt;Accept yourself the challenge. Produce some content for others. Contribute with your knowledge. It will be hard, but you will learn in the process and feel good in the end.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This was first published on my website &lt;a href="https://fabiocosta.eu/blog/my-first-post"&gt;fabiocosta.eu&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>firstpost</category>
      <category>dotnet</category>
      <category>challenge</category>
      <category>writing</category>
    </item>
  </channel>
</rss>
