<?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: Rafael Levi Costa</title>
    <description>The latest articles on DEV Community by Rafael Levi Costa (@rafaellevissa).</description>
    <link>https://dev.to/rafaellevissa</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%2F1094787%2F8f0c929c-3b72-48f8-bfdf-f769d9932a2f.jpeg</url>
      <title>DEV Community: Rafael Levi Costa</title>
      <link>https://dev.to/rafaellevissa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rafaellevissa"/>
    <language>en</language>
    <item>
      <title>Simplificando o desenvolvimento de aplicativos com o Flutter em arquitetura MVVM</title>
      <dc:creator>Rafael Levi Costa</dc:creator>
      <pubDate>Fri, 26 Jan 2024 21:16:24 +0000</pubDate>
      <link>https://dev.to/rafaellevissa/simplificando-o-desenvolvimento-de-aplicativos-com-o-flutter-em-arquitetura-mvvm-553d</link>
      <guid>https://dev.to/rafaellevissa/simplificando-o-desenvolvimento-de-aplicativos-com-o-flutter-em-arquitetura-mvvm-553d</guid>
      <description>&lt;p&gt;&lt;em&gt;Introdução:&lt;/em&gt;&lt;br&gt;
No mundo do desenvolvimento de aplicativos móveis multiplataforma, o Flutter ganhou popularidade significativa devido ao seu ciclo de desenvolvimento rápido, bela interface do usuário e excelente desempenho. Como desenvolvedores, nos esforçamos constantemente para aprimorar nosso fluxo de trabalho e criar código sustentável, escalável e testável. É aqui que o padrão de arquitetura MVVM (Model-View-ViewModel) entra em ação. Neste artigo, exploraremos como o Flutter e o MVVM trabalham juntos para simplificar o desenvolvimento de aplicativos, compartilhando as experiências que possuo em par com o desenvolvedor Victor Martins.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faogtysbgyqx2zi3nvpoy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faogtysbgyqx2zi3nvpoy.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;
Noções básicas sobre o MVVM&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy6uk5lm07tqxv9smjh5d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy6uk5lm07tqxv9smjh5d.png" alt="Image description" width="800" height="249"&gt;&lt;/a&gt;&lt;br&gt;
MVVM é um padrão de arquitetura que separa a lógica da interface do usuário (UI) da lógica de negócios de um aplicativo. Ele promove a separação de preocupações, tornando o código mais modular, reutilizável e testável. O padrão consiste em três componentes principais:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;1. Model:&lt;/em&gt; O Model representa os dados e a lógica de negócios do aplicativo. Ele encapsula objetos de dados, métodos de acesso a dados e regras de validação. No Flutter, o Model pode ser implementado como classes Dart simples ou como objetos mais complexos usando pacotes como ‘json_serializable’ ou ‘freezed’.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk3uc5shipemsmxrtgrdu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk3uc5shipemsmxrtgrdu.png" alt="Image description" width="800" height="256"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;2. View:&lt;/em&gt; A view é responsável por exibir a interface do usuário para o usuário. No Flutter, ele é normalmente implementado usando widgets. Os widgets são declarativos e descrevem como a interface do usuário deve parecer com base no estado atual. A exibição deve ser a mais simples possível, concentrando-se apenas na renderização da interface do usuário e nas interações do usuário.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvfr72jmdyunhnbk86s5a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvfr72jmdyunhnbk86s5a.png" alt="Image description" width="714" height="882"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;3. ViewModel:&lt;/em&gt; O ViewModel atua como um intermediário entre a view e o Model. Ele expõe os dados e comandos necessários para a exibição e fornece métodos para lidar com interações do usuário. O ViewModel também mantém o estado do modo de exibição e notifica o modo de exibição de quaisquer alterações nos dados. No Flutter, o ViewModel pode ser implementado usando o pacote ‘provider’, que oferece uma maneira direta de gerenciar o estado.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8w65ra4nq1z9es6ig3dy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8w65ra4nq1z9es6ig3dy.png" alt="Image description" width="800" height="430"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Implementando MVVM no Flutter&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Para implementar o MVVM no Flutter, precisamos seguir algumas diretrizes:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;1. Separe a interface do usuário da lógica de negócios:&lt;/em&gt;&lt;br&gt;
como mencionado anteriormente, a exibição deve ser responsável apenas por renderizar a interface do usuário e lidar com as interações do usuário. Mova a lógica de negócios e as operações de dados para o ViewModel ou o próprio Model.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2. Use a vinculação de dados:&lt;/em&gt;&lt;br&gt;
A vinculação de dados permite a sincronização automática entre a exibição e o ViewModel. O Flutter fornece várias abordagens para vinculação de dados, incluindo o uso de ‘ChangeNotifier’, ‘StreamBuilder’ ou o pacote ‘provider’. O pacote ‘provider’ é particularmente útil, pois simplifica o gerenciamento de estado e oferece uma variedade de recursos, como injeção de dependência e recarregamento rápido.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;3. Implemente a comunicação bidirecional:&lt;/em&gt;&lt;br&gt;
No MVVM, o ViewModel se comunica com o view por meio de ligações ou observáveis, e o view se comunica com o ViewModel por meio de comandos. Use o pacote ‘provider’ para expor dados e comandos do ViewModel para a exibição.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Benefícios do Flutter MVVM&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Separação de função: O MVVM promove uma separação clara entre a interface do usuário e a lógica de negócios, tornando a base de código mais sustentável e fácil de entender. Essa separação permite o desenvolvimento independente da interface do usuário e da lógica de negócios, tornando a colaboração entre os membros da equipe mais eficiente.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reutilização de código: Com o MVVM, o ViewModel e o Model podem ser reutilizados em diferentes componentes da interface do usuário ou até mesmo em diferentes plataformas. Isso economiza tempo e esforço de desenvolvimento, especialmente ao criar vários aplicativos que compartilham funcionalidades semelhantes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Testabilidade: A separação de funções no MVVM torna mais fácil testar cada componente isoladamente. O teste unitário do ViewModel e do Model torna-se mais simples, permitindo uma execução de teste mais rápida e uma maior cobertura de código.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;segue exemplo de código implementado essa arquitetura: &lt;a href="https://gitlab.com/rafaellevissa/flutter-mvvm-example"&gt;https://gitlab.com/rafaellevissa/flutter-mvvm-example&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Conclusão&lt;/em&gt;&lt;br&gt;
Flutter, com seu rico conjunto de componentes de interface do usuário e renderização de alto desempenho, combinado com o padrão de arquitetura MVVM, oferece aos desenvolvedores uma maneira poderosa e eficiente de criar aplicativos móveis de multiplataforma. Ao separar as funções da interface do usuário, da lógica de negócios e dos dados, o Flutter MVVM promove a modularidade, a reutilização e a estabilidade do código.&lt;/p&gt;

&lt;p&gt;A implementação do MVVM no Flutter envolve aproveitar a estrutura de interface do usuário baseada em widgets do Flutter e usar pacotes como ‘provider’ para gerenciamento de estado e vinculação de dados. Essa separação de funções permite que as equipes trabalhem de forma colaborativa, se concentrem em áreas específicas de especialização e criem bases de código sustentáveis e escaláveis.&lt;/p&gt;

&lt;p&gt;Além disso, o MVVM aprimora a reutilização de código, permitindo que o ViewModel e o Model sejam compartilhados entre vários componentes da interface do usuário ou até mesmo plataformas diferentes, economizando tempo valioso de desenvolvimento.&lt;/p&gt;

&lt;p&gt;Com a capacidade de escrever testes de unidade abrangentes para cada componente, o MVVM no Flutter melhora a qualidade e a estabilidade gerais do código, garantindo que os aplicativos se comportem como pretendido em diferentes cenários.&lt;/p&gt;

&lt;p&gt;Em conclusão, o Flutter MVVM é uma combinação vencedora que simplifica o desenvolvimento de aplicativos, melhora a capacidade de manutenção do código e promove a estabilidade. Ao adotar essa arquitetura, os desenvolvedores podem simplificar seu fluxo de trabalho, criar aplicativos robustos e escaláveis e oferecer experiências de usuário agradáveis.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Dicas básicas de como desenvolver software</title>
      <dc:creator>Rafael Levi Costa</dc:creator>
      <pubDate>Fri, 26 Jan 2024 21:05:32 +0000</pubDate>
      <link>https://dev.to/rafaellevissa/dicas-basicas-de-como-desenvolver-software-4hm9</link>
      <guid>https://dev.to/rafaellevissa/dicas-basicas-de-como-desenvolver-software-4hm9</guid>
      <description>&lt;p&gt;Introdução ao Desenvolvimento de Software com Rafael Levi&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgqexre3t0vxn3tihoxn6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgqexre3t0vxn3tihoxn6.png" alt="Image description" width="720" height="451"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;O Ponto de Partida: Código Fonte e Categorias de Software&lt;/em&gt;&lt;br&gt;
No mundo do desenvolvimento de software, tudo começa com o código fonte. Ele é a base sobre a qual toda a estrutura do software é construída. Entender o modelo de negócio é crucial para determinar a categoria do software, seja ele um sistema bancário, um ERP ou qualquer outro tipo. Esta etapa inicial é fundamental para direcionar as decisões futuras e estruturar o desenvolvimento de forma alinhada às necessidades específicas do projeto.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Modelo de negócio e categoria de software:&lt;/em&gt;&lt;br&gt;
Normalmente quando o desenvolvedor inicia a carreira de desenvolvimento de software, ele começa a desenvolver em um projeto e assim se torna essencial e necessário que você identifique qual tipo de software está sendo desenvolvido, do ponto de vista de negócio. Baseado no tipo de software é interessante que você pesquise sobre quais tipos de funcionalidades normalmente existem nessa categoria de software.&lt;/p&gt;

&lt;p&gt;Procure em softwares concorrentes, quais features cobrem o escopo da categoria de software. Isso fará total diferença em sua carreira como desenvolvedor ao longo prazo.&lt;/p&gt;

&lt;p&gt;Sobre os modelos de negócio dos principais tipos de softwares como Fintechs, Edtechs, HealthTechs, sistemas de gestão empresarial como ERPs, CRMs, MarketPlaces, SaaS entre outros, serão abordados com mais detalhes em outros artigos e já estão disponíveis em vídeo no meu canal do Youtube, como por exemplo o vídeo intitutlado: Live 23 — Como montar uma arquitetura para HealthTechs?&lt;/p&gt;

&lt;p&gt;Live 23 - Como montar uma arquitetura para HealthTechs?&lt;br&gt;
Live 23 - Como montar uma arquitetura para HealthTechs?Descrição: Em qual contexto surgem as empresas de tecnologia…&lt;br&gt;
&lt;a href="http://www.youtube.com"&gt;www.youtube.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ferramentas de documentação&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Caso o software ao qual você irá desenvolver possua uma documentação, leia e fique atento a como se deu a evolução e lançamento de features do projeto, seja usando o release notes no Github, acompanhando um versionamento, um dicionário de dados, documentação de API no Postman ou Swagger, Design de telas no Figma ou Adobe XD, modelagem de banco de dados ERD, modelagem UML, documento de análise de requisitos, diagramas com regras de negócio em um Miro, documentação no Confluence e em último caso, não havendo nenhum tipo de documentação mais precisa, você pode até olhar o histórico de pull requests para entender e até ajudar a criar uma documentação do projeto, além de em alguns casos poder usar também o histórico de tasks e sprints feitos no Jira.&lt;/p&gt;

&lt;p&gt;Sobre essas ferramentas escreverei outros artigos e farei outros vídeos detalhando o uso de um desenvolvedor sobre cada uma dessas ferramentas em breve.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Escolhendo a Stack Tecnológica&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A escolha da stack tecnológica é um passo crítico no desenvolvimento de software. Ela é composta pelo conjunto de tecnologias que serão utilizadas no projeto, incluindo linguagens de programação, frameworks e ferramentas. Cada stack tem suas peculiaridades e é escolhida com base nos requisitos do projeto e nas habilidades da equipe. Php, Golang, Javascript e Python são exemplos de tecnologias comuns, cada uma adequada a diferentes tipos de projetos e necessidades.&lt;/p&gt;

&lt;p&gt;É importante que o desenvolvedor no início da sua carreira tenha sólidos conhecimentos em Algoritmos, Estrutura de dados, orientação a objetos, em alguns casos conhecimento da base matemática de lógica para computação, matemática discreta e análise de complexidade de algoritmos. Isso dará ao desenvolvedor ferramentas teóricas para compreender em alguns casos a resolução de problemas através de código. Acredito que no início de carreira é importante o desenvolvedor focar mais nos conceitos e princípios do que na tecnologia em si.&lt;/p&gt;

&lt;p&gt;Normalmente quando o desenvolvedor entra em um projeto o mais coum de acontecer é que ele já entre em um projeto com uma stack pré-definida então além da base de conhecimento acadêmico e teórico, é necessário alguma experiência prática e compreensão técnica do uso da linguagem de programação ao qual irá trabalhar. Para isso existem diversos livros sobre tecnologias específicas, vídeos na internet, comunidades, ferramentas web de aprendizagem baseada em desafios e tarefas usando determinada tecnologia.&lt;/p&gt;

&lt;p&gt;Para cada uma das tecnologias citadas acima eu pretendo produzir um artigo e vídeos tratando de detalhes de cada uma. Para o passo seguinte, o que será necessário é que o desenvolvedor entenda e escolha entre tecnologias de front ou back-end.&lt;/p&gt;

&lt;p&gt;Sobre Python eu possuo alguns vídeos em meu canal, por exemplo o intitulado: Live 30 — Programação em Python e Orientação a Objetos — pt.1&lt;/p&gt;

&lt;p&gt;Live 30 - Programação em Python e Orientação a Objetos - pt.1&lt;br&gt;
Live 30 - Programação em Python e Orientação a Objetos - Parte 1hoje 14/dez (quinta) ás 17:30Descrição: Base de…&lt;br&gt;
&lt;a href="http://www.youtube.com"&gt;www.youtube.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Papéis no Desenvolvimento: Back-end, Front-end, e Full-stack&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;No desenvolvimento de software, existem diferentes especializações: back-end, focado no servidor e na lógica do negócio; front-end, voltado para a interface e experiência do usuário; e full-stack, que combina ambos. Um desenvolvedor full-stack, embora versátil, geralmente tem uma inclinação para back-end ou front-end, especializando-se em uma área enquanto mantém conhecimentos funcionais na outra.&lt;/p&gt;

&lt;p&gt;Exemplos de stacks combinadas com o segmento de desenvolvimento back-end é por exemplo o uso de linguagens de programação combinadas com frameworks web como: Python e Flask, Python e Django, NodeJs e AdonisJS (Javascript), NodeJs e NestJS (Javascript), Php e Laravel, Golang e Gin ou Golang e Fiber. Enquanto no front-end temos: ReactJS (Javascript) ou VueJS (Javascript), Flutter (Kotlin). Essas não são as únicas opções e ainda estão segmentadas dentro do escopo de desenvolvimento Web, mas são as stacks ao qual eu possuo algum conhecimento e que posso ajudar no seu desenvolvimento.&lt;/p&gt;

&lt;p&gt;No meu caso eu sou um desenvolvedor Full-Stack Back-end First, o que significa que meu ponto forte de maior experiência está no back-end e cabe a você, desenvolvedor inciante descobrir ao longo da sua jornada como dev, qual segmento irá tomar para si em sua carreira.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A Jornada de um Desenvolvedor Full-Stack: Back-end First&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Como um desenvolvedor full-stack com foco em back-end, é importante ter um forte entendimento dos processos do servidor e da infraestrutura, além de uma sólida habilidade em linguagens de programação pertinentes. Ferramentas como React Native e Flutter para apps, e React JS e VueJS para front-end, são essenciais para a parte do front-end, tendo mais profundidade em tecnologias como Php, Python, JS ou Golang para o back-end. Esta jornada é marcada pela constante atualização e adaptação às novas tecnologias.&lt;/p&gt;

&lt;p&gt;O conhecimento que você adquiriu nos conceitos teóricos e acadêmicos, além de conhecimentos de arquitetura e engenharia de software serão aplicados aqui com mais profundidade na parte do back-end, logo nesse ponto você já deve saber as limitações e propriedades de cada uma das tecnologias que escolheu para ter como ponto forte.&lt;/p&gt;

&lt;p&gt;No meu caso, eu comecei no mundo de tecnologia com o uso de ferramentas da área de infraestrutura como por exemplo AWS (Amazon Web Services) como Cloud e assim me desenvolvi conjuntamente nos conceitos, tecnologias e ferramentas de back-end. Nessa jornada você irá lidar com banco de dados que normalmente se começa com os da categoria SQL e posteriormente os bancos não estruturados como Redis, DynamoDB, MongoDB, entre outros.&lt;/p&gt;

&lt;p&gt;Além dos conhecimentos e habilidades com banco de dados, infraestrutura cloud é necessário o entendimento de como funciona um projeto Web (no meu caso que decedi seguir esse caminho de categoria de software), assim como seus protocolos HTTP, verbos HTTP e arquitetura e estrutura base de um projeto web como por exemplo uma API, Websocket, entre outros tipos de aplicações web.&lt;/p&gt;

&lt;p&gt;Para me aprimorar nas tecnologias e linguagens de programação foi essencial em minha jornada a participação em comunidades de tecnologia.&lt;/p&gt;

&lt;p&gt;Engajamento com Comunidades de Tecnologia&lt;br&gt;
Participar de comunidades de tecnologia é vital para o crescimento contínuo e aprendizado. Essas comunidades oferecem um espaço para compartilhar conhecimento, resolver dúvidas e manter-se atualizado com as últimas tendências e práticas. Durante minha caminhada no mundo da tecnologia eu criei referências e líderes nestas comunidades, como Pokemaobr para Php, Dunossauro para Python, ou Fábio Akita para Ruby on Rails, lembrando que essas pessoas não representam a comunidade da linguagem de programação, mas servem como guias valiosos nesse ecossistema em constante evolução ao qual vocês podem procurar para ter acesso às comunidades.&lt;/p&gt;

&lt;p&gt;Armazenando e Gerenciando Código Fonte&lt;br&gt;
A escolha de uma plataforma para armazenar e gerenciar o código fonte é essencial. Serviços como GitLab, GitHub e Bitbucket oferecem não apenas hospedagem de código, mas também ferramentas para revisão, colaboração e versionamento. Além disso, entender CI/CD e as práticas de deploy é crucial para um ciclo de desenvolvimento eficiente e contínuo, garantindo que as atualizações possam ser entregues rapidamente, minimizando os erros.&lt;/p&gt;

&lt;p&gt;O Git é a engine base para essas ferramentas e você deve escolher uma das ferramentas citadas acima para começar a armazenar seu código fonte, manter um portfolio de projetos e treinar para o uso profissionalmente no dia a dia do seu trabalho como desenvolvedor. Dominar essas ferramentas é essencial para seu processo de aprendizagem e trivial para sua rotina de trabalho como desenvolvedor.&lt;/p&gt;

&lt;p&gt;Sobre Gitflow eu possuo um vídeo intulado: Live 18 — O que um dev precisa saber sobre Gitflow?&lt;/p&gt;

&lt;p&gt;Live 18 - O que um dev precisa saber sobre Gitflow?&lt;br&gt;
Live 18 - O que um dev precisa saber sobre Gitflow?Descrição: Como organizar um projeto de código fonte no Git, como…&lt;br&gt;
&lt;a href="http://www.youtube.com"&gt;www.youtube.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ferramentas e Serviços em Infraestrutura e DevOps&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A infraestrutura e DevOps são fundamentais para a entrega e manutenção eficaz do software. Ferramentas como ArgoCD, Jenkins e Spinnaker automatizam o processo de deploy, enquanto soluções de armazenamento de artefatos como Harbor e Docker Hub ajudam na gestão e distribuição de builds. Compreender e implementar essas ferramentas garante um ciclo de desenvolvimento mais ágil e confiável.&lt;/p&gt;

&lt;p&gt;O desenvolvedor não necessariamente precisa dominar o processo de infraestrutura e Devops, mas é necessário ao menos conseguir utilizar dos recursos disponibilizados por um time de Devops. No meu caso eu tenho a minha base de formação de tecnologia na infraestrutura e isso facilita minha vida quando eu preciso subir minhas aplicações em um ambiente.&lt;/p&gt;

&lt;p&gt;O mínimo que um desenvolvedor precisa saber é como usar um pipeline, containerizar uma aplicação com Docker, gerar arquivos de builds para produção, gerenciar dados sensíveis como variáveis de ambientes com credenciais da aplicação, utilizar serviços de nuvem como na AWS para armazenar arquivos estáticos da sua aplicação usando um bucket S3 por exemplo, utilizar serviços de filas e mensageria como Kafka, RabbitMQ, SQS, entre outros.&lt;/p&gt;

&lt;p&gt;Sobre o tema Devops eu possuo um vídeo intitulado: Live 5 — O que você precisa saber para ser um Devops Engineer&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/ItTVyXZVKIs"&gt;https://youtu.be/ItTVyXZVKIs&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;O Mundo da Cloud e Serviços Associados&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A computação em nuvem revolucionou a forma como os softwares são hospedados e gerenciados, oferecendo escalabilidade e eficiência. Serviços como AWS e Google Cloud proporcionam uma vasta gama de ferramentas, desde gerenciamento de DNS com Route53 até sistemas de filas para micro-serviços. Navegar por esse mundo é essencial para arquitetar soluções modernas e eficazes.&lt;/p&gt;

&lt;p&gt;A partir do momento em que um desenvolvedor pretende escalar em sua carreira, os próximos passos são aprender a integrar sua aplicação a serviços de Cloud.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ambientes e teste automatizados&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Dessa forma ele poderá entender os estágios de desenvolvimento de um software, como segmentação de ambiente como Dev, staging, Homologação, produção.&lt;/p&gt;

&lt;p&gt;A aplicação passa por etapas de desenvolvimento e durante essas etapas ela é testada através dos testes automatizados, usando conceitos como TDD e a maioria desses testes é rodado de forma automatizada, usando bibliotecas como em Python temos o Pytest, em Javascript o Jest, entre outras ferramentas que podemos utilizar para diversos tipos de testes como testes unitários, de carga, de segurança, de integração e end-to-end.&lt;/p&gt;

&lt;p&gt;Sobre testes automatizados eu possuo um vídeo intulado: Live 21 — Como fazer testes automatizados na sua aplicação?&lt;/p&gt;

&lt;p&gt;Live 21 - Como fazer testes automatizados na sua aplicação?&lt;br&gt;
Live 21 - Como fazer testes automatizados na sua aplicação?Descrição: Pirâmide de testes com testes unitários, de…&lt;br&gt;
&lt;a href="http://www.youtube.com"&gt;www.youtube.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Estratégias de Deploy e Gestão de Containers&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;O deploy e a gestão de containers são etapas críticas na entrega de software. Escolher a plataforma correta, seja um servidor virtual ou um gestor de containers como ECS ou Kubernetes, impacta diretamente na performance e acessibilidade da aplicação. Essas estratégias definem como e onde a aplicação será executada, garantindo que ela esteja acessível e estável.&lt;/p&gt;

&lt;p&gt;Normalmente nesse nível apenas os mais experientes do projeto colaboram e ajudam a definir as estratégias de deploy, sendo que estou já presupondo que será utilizado uma ferramenta de container para a aplicação, encapsulando assim a camada de infraestrutura. O ideal é que nessa etapa o time tenha uma pessoa especializada em infraestrutura ou Devops, para que sejam tomadas decisões alinhadas com as estratégias de negócio e custos, além da técnica.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Gerenciamento de Tarefas e Comunicação em TI&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Um sistema eficaz de gerenciamento de tarefas e comunicação é vital para qualquer equipe de TI. Ferramentas como Jira, Bitrix e Trello ajudam a organizar e priorizar o trabalho, enquanto metodologias ágeis como Scrum orientam o processo de desenvolvimento. Uma comunicação clara e eficiente, facilitada por plataformas como Slack, Google Chats, ou Microsoft Teams, é fundamental para a colaboração e sucesso do projeto.&lt;/p&gt;

&lt;p&gt;O desenvolvedor irá no seu dia a dia ter que operar ferramentas de gestão de TI para poder controlar as tarefas que serão feitas na Sprint, os pontos de complexidade (SCRUM points) de cada tarefa que será definido no rito de planning meet, provavelmente jogando um planning Poker e caso tenha um trabalho remoto, irá utilizar uma das ferramentas de comunicação empresarial citadas acima, o ideal é que isso não seja uma barreira para sua contratação, logo é ideal que você entenda e aprenda como utilizar essas ferramentas e como a metodologia SCRUM funciona.&lt;/p&gt;

&lt;p&gt;Sobre o SCRUM e gestão de TI eu possuo um vídeo intitulado: Live 6 — O que um dev precisa saber sobre SCRUM?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/Kl2OywbhB8Q"&gt;https://youtu.be/Kl2OywbhB8Q&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Conclusão: O Caminho do Desenvolvedor&lt;/em&gt;&lt;br&gt;
O caminho do desenvolvedor é uma jornada contínua de aprendizado e adaptação. Escolher especializar-se em uma área, seja infraestrutura, back-end, front-end ou full-stack, é apenas o início. Com a evolução constante da tecnologia, manter-se atualizado e engajado com a comunidade é essencial para o crescimento profissional e a entrega de soluções de software eficazes e inovadoras.&lt;/p&gt;

&lt;p&gt;Para sua jornada na carreira de tecnologia e desenvolvimento de software, eu recomendo que encontrem um tutor, que de preferência seja alguém disponível na comunidade de tecnologia a ajudar e orientar novos devs em suas carreiras.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Basic Tips on Software Development</title>
      <dc:creator>Rafael Levi Costa</dc:creator>
      <pubDate>Wed, 24 Jan 2024 19:10:39 +0000</pubDate>
      <link>https://dev.to/rafaellevissa/basic-tips-on-software-development-4lin</link>
      <guid>https://dev.to/rafaellevissa/basic-tips-on-software-development-4lin</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fekxwvagimbs4211jcrke.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fekxwvagimbs4211jcrke.png" alt="Image description" width="720" height="451"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The Starting Point: Source Code and Software Categories&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In the world of software development, everything begins with the source code. It’s the foundation upon which the entire software structure is built. Understanding the business model is crucial to determine the software category, whether it’s a banking system, an ERP, or any other type. This initial stage is essential to direct future decisions and structure development aligned with the specific needs of the project.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Business Model and Software Category:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Typically, when a developer starts their career in software development, they begin by working on a project, and it becomes essential to identify what type of software is being developed from a business perspective. Based on the software type, it’s beneficial to research what types of functionalities usually exist in that software category.&lt;/p&gt;

&lt;p&gt;Look at competitor software to see which features cover the scope of the software category. This will make a total difference in your career as a developer in the long term.&lt;/p&gt;

&lt;p&gt;Details about the business models of the main types of software, such as Fintechs, Edtechs, HealthTechs, business management systems like ERPs, CRMs, MarketPlaces, SaaS, among others, will be covered in more detail in other articles.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Documentation Tools:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If the software you are going to develop has documentation, read it and pay attention to how the evolution and release of features of the project occurred, whether using release notes on Github, following versioning, a data dictionary, API documentation on Postman or Swagger, screen design on Figma or Adobe XD, ERD database modeling, UML modeling, requirements analysis document, diagrams with business rules on a Miro, documentation on Confluence, and in the last case, if there’s no more precise type of documentation, you can even look at the history of pull requests to understand and even help create documentation for the project, and in some cases, you can also use the history of tasks and sprints done on Jira.&lt;/p&gt;

&lt;p&gt;I will write other articles and make more videos detailing a developer’s use of each of these tools soon.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Choosing the Technological Stack:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Choosing the technological stack is a critical step in software development. It consists of the set of technologies that will be used in the project, including programming languages, frameworks, and tools. Each stack has its peculiarities and is chosen based on the project’s requirements and the team’s skills. Php, Golang, Javascript, and Python are examples of common technologies, each suitable for different types of projects and needs.&lt;/p&gt;

&lt;p&gt;It’s important that the developer at the beginning of their career has solid knowledge of Algorithms, Data Structures, Object Orientation, and in some cases, knowledge of the mathematical basis of logic for computing, discrete mathematics, and analysis of algorithm complexity. This will give the developer theoretical tools to understand, in some cases, problem-solving through code. I believe that at the beginning of the career, it’s important for the developer to focus more on the concepts and principles than the technology itself.&lt;/p&gt;

&lt;p&gt;Typically, when a developer enters a project, the most common thing to happen is that they already enter a project with a pre-defined stack, so in addition to the academic and theoretical knowledge base, some practical experience and technical understanding of the programming language to be worked on are necessary. For this, there are various books about specific technologies, videos on the internet, communities, web tools for learning based on challenges and tasks using a particular technology.&lt;/p&gt;

&lt;p&gt;For each of the technologies mentioned above, I intend to produce an article and videos dealing with the details of each. For the next step, what will be necessary is for the developer to understand and choose between front or back-end technologies.&lt;/p&gt;

&lt;p&gt;Here’s an article I wrote about the Python programming language:&lt;a href="https://medium.com/@rafaellevissa/exploring-python-and-frameworks-my-experiences-in-software-architecture-7af943fd8e30"&gt;https://medium.com/@rafaellevissa/exploring-python-and-frameworks-my-experiences-in-software-architecture-7af943fd8e30&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Roles in Development: Back-end, Front-end, and Full-stack&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In software development, there are different specializations: back-end, focused on the server and business logic; front-end, aimed at the interface and user experience; and full-stack, which combines both. A full-stack developer, although versatile, usually has an inclination for back-end or front-end, specializing in one area while maintaining functional knowledge in the other.&lt;/p&gt;

&lt;p&gt;Examples of stacks combined with back-end development segment are, for example, the use of programming languages combined with web frameworks like: Python and Flask, Python and Django, NodeJs and AdonisJS (Javascript), NodeJs and NestJS (Javascript), Php and Laravel, Golang and Gin or Golang and Fiber. While on the front-end we have: ReactJS (Javascript) or VueJS (Javascript), Flutter (Kotlin). These are not the only options and are still segmented within the scope of web development, but these are the stacks with which I have some knowledge and can help in your development.&lt;/p&gt;

&lt;p&gt;In my case, I am a Full-Stack Back-end First developer, which means that my strongest point of experience is in the back-end, and it’s up to you, the beginning developer, to discover along your dev journey which segment you will take for yourself in your career.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Journey of a Full-Stack Developer: Back-end First&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As a full-stack developer with a focus on back-end, it’s important to have a strong understanding of server processes and infrastructure, as well as solid skills in relevant programming languages. Tools such as React Native and Flutter for apps, and React JS and VueJS for front-end, are essential for the front-end part, having more depth in technologies like Php, Python, JS, or Golang for the back-end. This journey is marked by constant updating and adaptation to new technologies.&lt;/p&gt;

&lt;p&gt;The knowledge you acquired in theoretical and academic concepts, as well as knowledge of architecture and software engineering, will be applied here with more depth in the back-end part, so at this point, you should already know the limitations and properties of each of the technologies you have chosen to have as a strong point.&lt;/p&gt;

&lt;p&gt;In my case, I started in the world of technology with the use of tools from the infrastructure area, such as AWS (Amazon Web Services) as Cloud and thus developed jointly in concepts, technologies, and back-end tools. On this journey, you will deal with databases that typically start with those of the SQL category and later non-structured databases such as Redis, DynamoDB, MongoDB, among others.&lt;/p&gt;

&lt;p&gt;In addition to knowledge and skills with databases, cloud infrastructure is necessary to understand how a web project works (in my case, I decided to follow this category of software), as well as its HTTP protocols, HTTP verbs, and architecture and basic structure of a web project such as an API, Websocket, among other types of web applications.&lt;/p&gt;

&lt;p&gt;To improve my skills in technologies and programming languages, participating in technology communities was essential in my journey.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Engagement with Technology Communities:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Participating in technology communities is vital for continuous growth and learning. These communities offer a space to share knowledge, resolve doubts, and stay updated with the latest trends and practices. During my walk in the world of technology, I created references and leaders in these communities, such as Pokemaobr for Php, Dunossauro for Python, or Fábio Akita for Ruby on Rails, remembering that these people do not represent the programming language community, but serve as valuable guides in this constantly evolving ecosystem that you can look for to access the communities.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Storing and Managing Source Code:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Choosing a platform to store and manage the source code is essential. Services like GitLab, GitHub, and Bitbucket offer not only code hosting but also tools for review, collaboration, and versioning. Additionally, understanding CI/CD and deploy practices is crucial for an efficient and continuous development cycle, ensuring that updates can be delivered quickly and minimizing errors.&lt;/p&gt;

&lt;p&gt;Git is the base engine for these tools, and you should choose one of the tools mentioned above to start storing your source code, maintain a portfolio of projects, and train for professional use in your day-to-day work as a developer. Mastering these tools is essential for your learning process and trivial for your routine as a developer.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tools and Services in Infrastructure and DevOps:&lt;/em&gt;&lt;br&gt;
Infrastructure and DevOps are fundamental for the effective delivery and maintenance of software. Tools such as ArgoCD, Jenkins, and Spinnaker automate the deploy process, while storage solutions for artifacts like Harbor and Docker Hub help manage and distribute builds. Understanding and implementing these tools ensures a more agile and reliable development cycle.&lt;/p&gt;

&lt;p&gt;The developer doesn’t necessarily need to master the infrastructure and DevOps process, but at least they need to be able to use the resources provided by a DevOps team. In my case, I have my technology training base in infrastructure, and this makes my life easier when I need to raise my applications in an environment.&lt;/p&gt;

&lt;p&gt;The minimum a developer needs to know is how to use a pipeline, containerize an application with Docker, generate production build files, manage sensitive data such as environment variables with application credentials, use cloud services like AWS to store static files of your application using an S3 bucket, for example, use queue and messaging services like Kafka, RabbitMQ, SQS, among others.&lt;/p&gt;

&lt;p&gt;Here’s an article I wrote about the my experiences in Devops technologies: &lt;a href="https://medium.com/devops-dev/journey-as-a-devops-engineer-experiences-challenges-and-insights-19bb9f352ce4"&gt;https://medium.com/devops-dev/journey-as-a-devops-engineer-experiences-challenges-and-insights-19bb9f352ce4&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The World of Cloud and Associated Services:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Cloud computing has revolutionized the way software is hosted and managed, offering scalability and efficiency. Services like AWS and Google Cloud provide a wide range of tools, from DNS management with Route53 to queue systems for micro-services. Navigating this world is essential to architect modern and effective solutions.&lt;/p&gt;

&lt;p&gt;From the moment a developer intends to scale in their career, the next steps are to learn to integrate their application with Cloud services.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Automated Testing Environments:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In this way, they can understand the stages of software development, such as environment segmentation like Dev, staging, Homologation, production.&lt;/p&gt;

&lt;p&gt;The application goes through stages of development, and during these stages, it is tested through automated tests, using concepts like TDD, and most of these tests are run automatically, using libraries like in Python we have Pytest, in Javascript Jest, among other tools we can use for various types of tests like unit tests, load tests, security tests, integration tests, and end-to-end tests.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Deploy Strategies and Container Management:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Deploy and container management are critical steps in software delivery. Choosing the correct platform, whether a virtual server or a container manager like ECS or Kubernetes, directly impacts the application’s performance and accessibility. These strategies define how and where the application will be executed, ensuring that it is accessible and stable.&lt;/p&gt;

&lt;p&gt;Typically at this level, only the most experienced in the project collaborate and help define deploy strategies, assuming that a container tool will be used for the application, thus encapsulating the infrastructure layer. Ideally, at this stage, the team has a person specialized in infrastructure or DevOps so that decisions are aligned with business strategies and costs, in addition to the technique.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Task Management and IT Communication:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;An effective system for task management and communication is vital for any IT team. Tools like Jira, Bitrix, and Trello help organize and prioritize work, while agile methodologies like Scrum guide the development process. Clear and efficient communication, facilitated by platforms like Slack, Google Chats, or Microsoft Teams, is fundamental for the collaboration and success of the project.&lt;/p&gt;

&lt;p&gt;The developer will have to operate IT management tools in their day-to-day to control the tasks that will be done in the Sprint, the complexity points (SCRUM points) of each task that will be defined in the planning meet rite, probably playing a planning Poker, and if you have remote work, you will use one of the business communication tools mentioned above, the ideal is that this is not a barrier to your hiring, so it’s ideal that you understand and learn how to use these tools and how the SCRUM methodology works.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Conclusion: The Developer’s Path&lt;/em&gt;&lt;br&gt;
The developer’s path is a continuous journey of learning and adaptation. Choosing to specialize in an area, whether infrastructure, back-end, front-end, or full-stack, is just the beginning. With the constant evolution of technology, staying updated and engaged with the community is essential for professional growth and delivering effective and innovative software solutions.&lt;/p&gt;

&lt;p&gt;For your journey in the technology and software development career, I recommend finding a mentor, preferably someone available in the technology community to help and guide new devs in their careers.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Roteiro para criar e configurar Linux Server usando os principais serviços Cloud</title>
      <dc:creator>Rafael Levi Costa</dc:creator>
      <pubDate>Fri, 19 Jan 2024 22:05:16 +0000</pubDate>
      <link>https://dev.to/rafaellevissa/roteiro-para-criar-e-configurar-linux-server-usando-os-principais-servicos-cloud-10h3</link>
      <guid>https://dev.to/rafaellevissa/roteiro-para-criar-e-configurar-linux-server-usando-os-principais-servicos-cloud-10h3</guid>
      <description>&lt;p&gt;AWS (Amazon Web Service), GCP(Google Cloud Platform) e Microsoft Azure&lt;/p&gt;

&lt;p&gt;Objetivo: Experimentar diversos ambientes de cloud server.&lt;/p&gt;

&lt;p&gt;Tempo estimado: 2 h.&lt;/p&gt;

&lt;p&gt;Recursos:&lt;/p&gt;

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

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

&lt;p&gt;1- Primeiro vamos aprender a criar uma conta em cada uma das seguintes plataformas:&lt;/p&gt;

&lt;p&gt;-Google Cloud Plataform (GCP)&lt;/p&gt;

&lt;p&gt;-AWS&lt;/p&gt;

&lt;p&gt;-Microsoft Azure&lt;/p&gt;

&lt;p&gt;obs.: Lembrando que não é possível acessar o cloud server sem a senha do SO e a chave pública a ser inserida no Putty.&lt;/p&gt;

&lt;p&gt;GCP (Google Cloud Platform):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Acesse o google com sua conta gmail&lt;/li&gt;
&lt;li&gt;Acesse o site do GCP: &lt;a href="https://cloud.google.com/"&gt;https://cloud.google.com/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Clique em teste grátis&lt;/li&gt;
&lt;li&gt;Selecione, não na primeira opção e sim na segunda. Clique em concordar e continuar&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvzej6yk24thmirk7m5kp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvzej6yk24thmirk7m5kp.png" alt="Image description" width="593" height="381"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;5. Selecione pessoa física e digite seu CPF&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffwtazsl1rd3wmnenqmri.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffwtazsl1rd3wmnenqmri.png" alt="Image description" width="595" height="408"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;6. Digite o endereço e número de telefone (use um celular que você tenha acesso agora)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyotbhq2jpgpxf84c1890.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyotbhq2jpgpxf84c1890.png" alt="Image description" width="517" height="545"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;7. Adicione as informações do cartão de crédito (só será cobrado valor após o período de teste, se autorizar.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjxdlmhdiaqz2qh65a2ix.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjxdlmhdiaqz2qh65a2ix.png" alt="Image description" width="471" height="491"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;8. Você irá se deparar com a primeira página do GCP, clique em máquinas virtuais.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7cr39xjuh6zcfrhos55c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7cr39xjuh6zcfrhos55c.png" alt="Image description" width="666" height="674"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7n8obhywi0vdhb7jazud.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7n8obhywi0vdhb7jazud.png" alt="Image description" width="666" height="674"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;9. Desça a barra de rolagem até encontrar sistemas operacionais. Clique em VER TODOS&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcxf9d19zgu4sf9rkvw6f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcxf9d19zgu4sf9rkvw6f.png" alt="Image description" width="656" height="246"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;10. Vamos escolher uma das opções: Ubuntu Xenial, Red Hat ou CentOS ou Debian.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;11. Após selecionar sua opção, clique em Lançar no Compute Engine. Crie uma instância com seu nome.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8yznwsy75agln75xb6nh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8yznwsy75agln75xb6nh.png" alt="Image description" width="650" height="197"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;12. Outra opção é você ir direto no menu em Compute Engine e clicar em Criar uma instância e escolher em seguida o SO que deseja, em alterar disco de inicialização.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkdfc3ss8rl6sihb88wgz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkdfc3ss8rl6sihb88wgz.png" alt="Image description" width="598" height="830"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqy9q33jfvtif8q4xky4s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqy9q33jfvtif8q4xky4s.png" alt="Image description" width="598" height="830"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;13. Após criado a instância vai aparecer no dashboard, o nome da instância e o IP externo dela, é exatamente o que precisamos para fazer o acesso ssh (porta padrão 22).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;14. Outra opção para acessar sua instância é clicar em conectar ssh, abrirá um terminal em uma nova janela do navegador.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjzqwo6m0e1vz0p8h6ntj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjzqwo6m0e1vz0p8h6ntj.png" alt="Image description" width="594" height="393"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;15. A primeira coisa que fazemos ao conectar a primeira vez em um cloud server é alterar a senha do usuário que normalmente vem vazia, para isso utilizamos o comando passwd nomeDOusuario&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;16. Agora chegou a parte de segurança. Todo servidor em nuvem tem como item de segurança uma chave pública de acesso. No caso do GCP, o primeiro acesso é dado pelo terminal do navegador, no dashboard do sistema. Para acessar via putty você terá que gerar uma chave .pub e cadastrar ela no item Metadados, Chaves SSH, no menu do dashboard do GCP.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;17. Para Gerar uma chave pública, você pode utilizar o Linux com o comando ssh-keygen -t rsa -b 4096 -C “&lt;a href="mailto:seuemail@gmail.com"&gt;seuemail@gmail.com&lt;/a&gt;” e seguir esse tutorial.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;18. Para gerar a chave no Windows, basta baixar o PuttyGen em putty.org e seguir o tutorial&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;19. O que importa é que no GCP, ao final você deve copiar o código que começa com ssh-rsa … da chave gerada. Colar no menu de chaves ssh do GCP, clicando em editar.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1nftjev9laaao0af0tab.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1nftjev9laaao0af0tab.png" alt="Image description" width="629" height="747"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ficj2168m8tfcer79bxw1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ficj2168m8tfcer79bxw1.png" alt="Image description" width="629" height="747"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;20. Após adicionar o código gerado pela sua chave, você deve, ao abrir o putty, digitar o IP, porta de seu servidor e clicar em SSH, AUTH&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb9q2gggg4g9fbp0po48c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb9q2gggg4g9fbp0po48c.png" alt="Image description" width="499" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffn3it7hb406sqrd71w6c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffn3it7hb406sqrd71w6c.png" alt="Image description" width="487" height="480"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;21. Clique em Browse… e adicione o arquivo .ppk ou .pub (a chave)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;22. Em nosso caso, provavelmente o professor irá dar uma chave já pronta para apenas ser adicionada no putty.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Agora que você já sabe configurar um cloud server na GCP, vamos para a Amazon, com o AWS.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AWS (Amazon Web Service):&lt;/em&gt;&lt;br&gt;
Preste atenção que durante as etapas de criação da instância, irá aparecer a opção de baixar o par de chaves de acesso remoto. Baixe o arquivo .pem e guarde, pois com ele pode-se acessar seu servidor de qualquer computador.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;1. Acesse &lt;a href="http://aws.amazon.com/"&gt;http://aws.amazon.com/&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;2. Clique em Faça Login no console&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh2b1ifg0wtosjwcnz2tc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh2b1ifg0wtosjwcnz2tc.png" alt="Image description" width="627" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fndu67qcma5obd29l04q1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fndu67qcma5obd29l04q1.png" alt="Image description" width="627" height="604"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;3. Criar uma nova conta. Nesse momento mesmo que você não tenha um cartão de crédito internacional, necessário para validação da conta, é recomendado que siga os passos de criação da conta até esse passo, para que você compreenda as etapas.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;4. Preencha com seus dados&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpcivaws46yoy79r8mv8k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpcivaws46yoy79r8mv8k.png" alt="Image description" width="637" height="319"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;5. Preencha com as informações de contato&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa37iaxq8yvmu1ap7i7fb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa37iaxq8yvmu1ap7i7fb.png" alt="Image description" width="458" height="427"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;6. Após essa etapa, insira os dados do cartão de crédito.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;7. Depois, irá validar o número de seu celular, através de SMS ou ligação.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;8. Após essa etapa de criação da conta do AWS, entre com seu login e senha no console.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi98k93r9jfd0n3wi82n6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi98k93r9jfd0n3wi82n6.png" alt="Image description" width="616" height="335"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;9. Agora escolha o serviço EC2&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc80tqsi5hrnawha03c19.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc80tqsi5hrnawha03c19.png" alt="Image description" width="660" height="336"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;10. Clique em Instâncias&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmz1wrtrm0sj6d4dhtqlp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmz1wrtrm0sj6d4dhtqlp.png" alt="Image description" width="647" height="326"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;11. Clicar em Launch instance.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxznqhao38fpwkbmqq19e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxznqhao38fpwkbmqq19e.png" alt="Image description" width="649" height="326"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;12. Podemos criar qualquer instância Linux, como Red Hat, Debian, Ubuntu, CentOS. Escolhamos Ubuntu Server. Crie a instância com seu nome!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgo7j49wmre2vg30gfop4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgo7j49wmre2vg30gfop4.png" alt="Image description" width="657" height="298"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;13. Escolher o tipo de instância. Nessa etapa temos que ter muito cuidado, pois a opção t2.micro é a gratuita. Escolhamos t2.micro e clique em Review and Launch.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxdkwxecl67ngtgnvg3ax.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxdkwxecl67ngtgnvg3ax.png" alt="Image description" width="655" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;14. Preste atenção que durante as etapas de criação da instância, irá aparecer a opção de baixar o par de chaves de acesso remoto. Baixe o arquivo .pem e guarde, pois com ele pode-se acessar seu servidor de qualquer computador. O nome dado ao arquivo pode ser qualquer.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuogb0lqhoc3mfw0p7rf5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuogb0lqhoc3mfw0p7rf5.png" alt="Image description" width="624" height="322"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;15. Assim que a instância for finalizada configuração, o sistema precisa de um tempo para estabilizar e criar a instância. Você verá nessa tela abaixo o status da instância, assim que já puder utilizar estará parecido com a imagem abaixo.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08g1opwmturu2gu9vd53.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08g1opwmturu2gu9vd53.png" alt="Image description" width="653" height="311"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;16. Caso queira alterar as portas de acesso ssh, dentre outras ao seu servidor VM in Cloud AWS, Clique em Grupos de segurança. Nessa tela você poderá modificar portas de acesso, criar novos grupos de segurança, criar novas portas.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feu7l4khr32mfikptfygc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feu7l4khr32mfikptfygc.png" alt="Image description" width="667" height="324"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;17. Voltemos a instância. Os dados que precisamos para acessar nosso servidor via ssh são apenas, porta e IP público, que pode ser visto ao selecionar a instância.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feb08enc78z2ukr7zke9b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feb08enc78z2ukr7zke9b.png" alt="Image description" width="640" height="331"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;18. Agora basta abrir o Putty. Gerar uma chave que possa ser inserida no Putty, pois a chave que você baixou, sob extensão .pem não pode ser inserida diretamente no Putty. Então vamos baixar o Putty GEN. Nele você pode seguir as etapas deste tutorial para gerar o arquivo .ppk&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;19. Agora basta inserir o arquivo .ppk no putty no menu AUTH e colocar as informações do seu servidor Amazon.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4nu2xepcd0njjx8jbklb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4nu2xepcd0njjx8jbklb.png" alt="Image description" width="423" height="409"&gt;&lt;/a&gt;&lt;br&gt;
Agora vamos para o servidor Microsoft Azure.&lt;/p&gt;

&lt;p&gt;Microsoft Azure:&lt;br&gt;
&lt;em&gt;1. Acesse o site da Azure. &lt;a href="https://azure.microsoft.com/pt-br/"&gt;https://azure.microsoft.com/pt-br/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhc0qdnkvtxrelpjezfrr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhc0qdnkvtxrelpjezfrr.png" alt="Image description" width="619" height="244"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;2. Clique em conta gratuita:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2jf8su6qg4s2xqnasis8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2jf8su6qg4s2xqnasis8.png" alt="Image description" width="593" height="297"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;3. Clique em Início gratuito. Se você já tiver uma conta microsoft (Hotmail, outlook), basta inserir ela após essa tela.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffeggsni97vpywh69rgvz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffeggsni97vpywh69rgvz.png" alt="Image description" width="582" height="383"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;4. Caso não tenha uma conta, crie uma e entre com ela:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29hpdrr46ljhi4rcxqi8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29hpdrr46ljhi4rcxqi8.png" alt="Image description" width="635" height="314"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;5. Após isso, você irá acessar o portal Azure.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;6. vamos criar uma máquina virtual do zero. Clique em Máquinas virtuais.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4tcr9baj49igpqbu1gk6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4tcr9baj49igpqbu1gk6.png" alt="Image description" width="621" height="311"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;7. Clique em Adicionar.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmmxobev9ppoue98il8jx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmmxobev9ppoue98il8jx.png" alt="Image description" width="594" height="299"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;8. Podemos criar qualquer instância Linux, como Red Hat, Debian, Ubuntu, CentOS. Escolhamos Ubuntu Server, a versão mais nova.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsawp6ommazi8ytldwy5k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsawp6ommazi8ytldwy5k.png" alt="Image description" width="611" height="364"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;9. Agora basta clicar em criar.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2z5erpiige5vgkho6wuv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2z5erpiige5vgkho6wuv.png" alt="Image description" width="597" height="301"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;10. Durante a criação da VM pedirá a chave pública, nesse caso assim como no GCP, temos que cadastrar uma chave durante o processo.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4gc2reg8x81pwdoq1rga.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4gc2reg8x81pwdoq1rga.png" alt="Image description" width="516" height="506"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;11. Em chave pública. Vamos criar uma chave para uso desse servidor, pode ser o mesmo criado na primeira parte, no GCP. Ao gerar uma chave pública, podendo ser feita também pelo Putty Gen, é gerado um arquivo .pub ou .ppk. No campo Chave pública cole o código da chave que começa sempre com ssh -rsa. Preencha tudo e clique em OK.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7o47aw1ee3f4tj1a5ne.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7o47aw1ee3f4tj1a5ne.png" alt="Image description" width="472" height="429"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;12. Em Configurações da máquina escolha a opção mais simples: D2S-V3&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flit7avosi0etjtn8udv9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flit7avosi0etjtn8udv9.png" alt="Image description" width="614" height="405"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;13. Clique em Selecionar&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;14. Em Recursos Opcionais de OK&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F44kpvnxq1w67vhqo91go.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F44kpvnxq1w67vhqo91go.png" alt="Image description" width="459" height="415"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;15. Em Resumo, clique em Criar.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjgukk5wf1om1fo5iin3u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjgukk5wf1om1fo5iin3u.png" alt="Image description" width="632" height="412"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;16. Após a criação da VM, você deve aguardar a criação da instância e deixar as configurações padrão. Após isso sua VM já irá aparecer no painel. Clique em sua VM.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7dxcvuty1kghtjruj26o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7dxcvuty1kghtjruj26o.png" alt="Image description" width="595" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;17. Nesse painel você poderá acompanhar tudo relacionado a sua instância.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;18. Para acessar o servidor via putty, basta pegar o IP e porta, nesse painel e inserir no putty a chave que foi apresentada na instalação da VM.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnz2v31trflo4i6488q5d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnz2v31trflo4i6488q5d.png" alt="Image description" width="541" height="531"&gt;&lt;/a&gt;&lt;br&gt;
Muito obrigado a todos e espero que tenha sido útil esse Tutorial. Deixe suas dúvidas nos comentários!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Automation with Arduino — Part 1: Electronics</title>
      <dc:creator>Rafael Levi Costa</dc:creator>
      <pubDate>Fri, 19 Jan 2024 21:23:21 +0000</pubDate>
      <link>https://dev.to/rafaellevissa/automation-with-arduino-part-1-electronics-4lhk</link>
      <guid>https://dev.to/rafaellevissa/automation-with-arduino-part-1-electronics-4lhk</guid>
      <description>&lt;p&gt;About the use of electronics with Arduino, focusing on automation&lt;/p&gt;

&lt;p&gt;This article will be divided into multiple parts, and the objective of this part 1 is to discuss the use of electronic components with Arduino, with a focus on achieving the automation of residential (smart house) or industrial routines using the Internet of Things (IoT).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Introduction
Smart House is a term used to represent technologies integrated into residences. Smart homes are becoming increasingly common in our reality. Embedded systems, the Internet of Things, microcontrollers, sensors, actuators — all these terms represent the meaning and concept of a smart house. In this course, we will explore these concepts and delve into the projects associated with this concept.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Typically, courses only provide a surface-level practice, without addressing the theoretical concepts and scientific foundation necessary to master this field. People are accustomed to accessing information instantly, but I must emphasize that attaining comprehensive and genuine knowledge about this set of technologies requires diligent effort and has no shortcuts.&lt;/p&gt;

&lt;p&gt;We will do our best to provide the “path” to understanding, but it will depend on each individual’s willingness to truly comprehend and study the topics recommended in this material. Believe me, mastering all this knowledge takes time, and as you delve deeper into the subject, you will realize how little you actually know.&lt;/p&gt;

&lt;p&gt;1.1 What is a Smart System?&lt;br&gt;
In our case, when we refer to a system, we assume it is something complex but not so complex that it becomes nearly impossible to comprehend. Rather, it involves several simpler subsystems. We should view smart projects as puzzle pieces that fit together carefully and thoughtfully at specific moments.&lt;/p&gt;

&lt;p&gt;It is not without reason that the term “smart” implies intelligence! From this point forward, we will consider our projects to be complex and intelligent. Therefore, we need to be cautious when designing and declaring a project as complete. We must acknowledge that a Smart System is not created by a single person. However, it can be designed and even executed in a non-optimized manner by an individual with diverse knowledge in electronics, databases, development, front-end, back-end, embedded systems, sensors, and actuators.&lt;/p&gt;

&lt;p&gt;1.2 How Does a Smart System Work?&lt;br&gt;
We can consider that the smart system is divided into: Database, System (programming), Electronics, Actuators, and Sensors, as depicted in the figure below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbp3mqudk0la3sxvabs7k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbp3mqudk0la3sxvabs7k.png" alt="Image description" width="720" height="540"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;2. Electronics from Scratch&lt;/em&gt;&lt;br&gt;
2.1 Physics, Electrons, Electrical Energy&lt;br&gt;
It is important to have a basic understanding of physics to comprehend the projects and circuits, along with their respective calculations. When you see a resistor with a specific resistance, you need to know why, rather than simply executing what is requested. In your own projects, you will be responsible for defining the circuit parameters.&lt;/p&gt;

&lt;p&gt;To achieve this, let’s study a bit of electrostatics and electromagnetism. What powers our circuits is the electron, or rather, the flow of electrons, also known as electric current. Think of electric voltage as the difference in electron potential between two points, in other words, the difference in concentration of electrons. Regarding resistance, which is inherent to any real material (including a wire), think of it as imperfections in a water pipe that allow droplets to cling to the tube’s edges. Drawing an analogy with a hydrodynamic system, we have:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvuhl9tl14blvjikegngk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvuhl9tl14blvjikegngk.png" alt="Image description" width="720" height="405"&gt;&lt;/a&gt;&lt;br&gt;
The current is being compared to the flow of water, the resistance acts as the valve that controls the amount of water (electron) passing through, and the voltage represents the difference in water levels between two tanks.&lt;/p&gt;

&lt;p&gt;2.2 Energy Generation — Hydroelectric&lt;br&gt;
Power Electricity reaches our homes through transmission wires. This energy is generated in hydroelectric power plants, as shown in the diagram below. The generated energy is alternating (AC — alternating current) because we have two magnetized elements that alternate around a coil. However, the electricity used by electronic components must be direct current (DC) since they do not tolerate voltage fluctuations.&lt;/p&gt;

&lt;p&gt;So why do we produce alternating current if direct current is ideal for electronic components?&lt;/p&gt;

&lt;p&gt;Well, alternating current allows for more efficient transmission due to reduced loss of charge. That’s why we use sources that filter, stabilize, and convert the power from the outlet (alternating current) into direct current.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7v8jlui1eef57mtw5lbc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7v8jlui1eef57mtw5lbc.png" alt="Image description" width="575" height="430"&gt;&lt;/a&gt;&lt;br&gt;
2.3 Direct Current / Alternating Current&lt;br&gt;
In direct current, the flow of electrons tends to move in one direction and follows along the conductor, while in alternating current, this flow changes direction, as shown in the graphs below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fruamzkm2fbgyrt93e5nv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fruamzkm2fbgyrt93e5nv.png" alt="Image description" width="448" height="199"&gt;&lt;/a&gt;&lt;br&gt;
Ohm’s law relates resistance (R), current (i), and voltage (v). It is crucial for dimensioning electronic projects, as it helps us determine if the electronic components can withstand the current and voltage.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhrhdzd21g2kb94nht9ff.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhrhdzd21g2kb94nht9ff.png" alt="Image description" width="429" height="266"&gt;&lt;/a&gt;&lt;br&gt;
As for the units of measurement, we have Volt (V) for voltage, Ampere (A) for current, and Ohm (Ω) for resistance.&lt;/p&gt;

&lt;p&gt;Electronic Components:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhgeezxtni8107skw9lsr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhgeezxtni8107skw9lsr.png" alt="Image description" width="720" height="370"&gt;&lt;/a&gt;0&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg7r743gjlfavx0xdruk0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg7r743gjlfavx0xdruk0.png" alt="Image description" width="720" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foxursnmkj2h2dxsfk2mf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foxursnmkj2h2dxsfk2mf.png" alt="Image description" width="720" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmi66exodjmspyidh3md3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmi66exodjmspyidh3md3.png" alt="Image description" width="720" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffkglo10v5rokh5yx6fnc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffkglo10v5rokh5yx6fnc.png" alt="Image description" width="720" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9pvewle1qoh8kws8a5ch.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9pvewle1qoh8kws8a5ch.png" alt="Image description" width="720" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp16ycm8acyr4c2gspwnv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp16ycm8acyr4c2gspwnv.png" alt="Image description" width="720" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fszmneljxh5xo8ruff4my.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fszmneljxh5xo8ruff4my.png" alt="Image description" width="720" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpvpcqe8nc4fwwi7p97gp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpvpcqe8nc4fwwi7p97gp.png" alt="Image description" width="720" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgqapqz82jagobe8vhl7a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgqapqz82jagobe8vhl7a.png" alt="Image description" width="720" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqpl5li8l0kmhf40c06ew.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqpl5li8l0kmhf40c06ew.png" alt="Image description" width="720" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr1gjy6cabtkbppvdxphi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr1gjy6cabtkbppvdxphi.png" alt="Image description" width="720" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyx1veusn6uorkn6c2wed.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyx1veusn6uorkn6c2wed.png" alt="Image description" width="720" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbu24wdut1fw5c1r5749y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbu24wdut1fw5c1r5749y.png" alt="Image description" width="720" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe7chk36c6d2vd9d20zn2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe7chk36c6d2vd9d20zn2.png" alt="Image description" width="657" height="662"&gt;&lt;/a&gt;&lt;br&gt;
Laboratories: Lab 1 — Connecting an LED (Light Emitting Diode) to the breadboard.&lt;/p&gt;

&lt;p&gt;Objective: Illuminate an LED.&lt;/p&gt;

&lt;p&gt;Materials needed: 1 LED, 1 Arduino UNO, 1 breadboard, jumper wires, 1 resistor of 2200 ohms or a resistor with a similar resistance.&lt;/p&gt;

&lt;p&gt;Follow the electronic diagram:0&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcb5m5u6tia1pvtov8888.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcb5m5u6tia1pvtov8888.png" alt="Image description" width="634" height="395"&gt;&lt;/a&gt;&lt;br&gt;
Observations: The red wire is connected to the 5V pin on the Arduino, while the black wire is connected to the GND pin on the Arduino.&lt;/p&gt;

&lt;p&gt;After the connection, simply connect the Arduino to your computer via USB, and the LED should light up.&lt;/p&gt;

&lt;p&gt;Tip: If you don’t have an electronics kit, you can use &lt;a href="https://circuits.io/"&gt;https://circuits.io/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Lab 2 — Connecting an LED to the breadboard using a push button.&lt;br&gt;
Objective: Illuminate an LED using a push button.&lt;/p&gt;

&lt;p&gt;Materials needed: 1 LED, 1 push button, 1 Arduino UNO, 1 breadboard, jumper wires, 2 resistors of 100 and 150 ohms or resistors with similar resistances.&lt;/p&gt;

&lt;p&gt;Follow the electronic diagram:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv8pmy305m8nlaql3rjv1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv8pmy305m8nlaql3rjv1.png" alt="Image description" width="720" height="399"&gt;&lt;/a&gt;&lt;br&gt;
Lab 3 — Connecting an LED with a Buzzer to the breadboard.&lt;br&gt;
Objective: Illuminate an LED with a buzzer.&lt;/p&gt;

&lt;p&gt;Materials needed: 1 LED, 1 buzzer, 1 Arduino UNO, 1 breadboard, jumper wires.&lt;/p&gt;

&lt;p&gt;Follow the electronic diagram:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu9rz8n193mifiyww7n2d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu9rz8n193mifiyww7n2d.png" alt="Image description" width="720" height="449"&gt;&lt;/a&gt;&lt;br&gt;
Lab 4 — Connecting an LED with an LDR (Light Dependent Resistor).&lt;br&gt;
Objective: Illuminate an LED with an LDR and vary the LED intensity inversely proportional to the light intensity that falls on the LDR.&lt;/p&gt;

&lt;p&gt;Materials needed: 1 LED, 1 LDR, 1 Arduino UNO, 1 breadboard, jumper wires.&lt;/p&gt;

&lt;p&gt;Follow the electronic diagram:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7qq8vhg1b9ou1q5kw7h6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7qq8vhg1b9ou1q5kw7h6.png" alt="Image description" width="720" height="427"&gt;&lt;/a&gt;&lt;br&gt;
Note: Use the flashlight on your phone to alternate the amount of light on the LDR, and you will see the variation in LED intensity.&lt;/p&gt;

&lt;p&gt;Conclusion:&lt;br&gt;
In this article, we introduced the concept of smart houses and the use of electronic components with Arduino for automation. We discussed the importance of understanding the underlying physics and electrical principles to comprehend and design projects effectively. The article also highlighted the need for a holistic approach when building smart systems, involving multiple subsystems and diverse knowledge domains.&lt;/p&gt;

&lt;p&gt;Mastering the knowledge and skills required for smart house automation takes time and dedication. It is not enough to rely on surface-level understanding or immediate access to information. The article emphasized the importance of studying and delving deeper into the recommended topics to truly comprehend the complexities of this field.&lt;/p&gt;

&lt;p&gt;By starting with the basics of electronics, including understanding electricity, voltage, current, and resistance, we set the foundation for more advanced projects. We explored the distinction between alternating current (AC) and direct current (DC) and their relevance in electronic systems.&lt;/p&gt;

&lt;p&gt;Furthermore, the article introduced the Arduino platform as a powerful tool for prototyping and developing smart systems. Several practical labs were presented, guiding readers through the process of connecting LEDs, push buttons, buzzers, and light-dependent resistors (LDRs) to the Arduino board.&lt;/p&gt;

&lt;p&gt;In conclusion, this article serves as an introduction to the world of electronic components, Arduino, and smart house automation. It provides a starting point for individuals interested in exploring and mastering the field of IoT and building innovative and intelligent systems for residential or industrial applications. While the journey may be challenging, the rewards of understanding and applying these technologies are immense. With dedicated effort and continuous learning, one can unlock the potential of automation and contribute to the advancement of smart living.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Ensino de serviços de redes: Conceitos, Estratégias e Técnicas 📚💻</title>
      <dc:creator>Rafael Levi Costa</dc:creator>
      <pubDate>Fri, 19 Jan 2024 21:14:25 +0000</pubDate>
      <link>https://dev.to/rafaellevissa/ensino-de-servicos-de-redes-conceitos-estrategias-e-tecnicas-2130</link>
      <guid>https://dev.to/rafaellevissa/ensino-de-servicos-de-redes-conceitos-estrategias-e-tecnicas-2130</guid>
      <description>&lt;p&gt;Introdução:&lt;br&gt;
O objetivo desse artigo é discutir minhas experiências e conteúdo no ensino de servidores no curso de infraestrutura de redes. Essa disciplina foi ministrada por mim, em um curso brasileiro, técnico de infraestrutura de redes, em 2017. O conteúdo dessa disciplina envolve conceitos básicos de servidores, tipos de servidores como DNS, Proxy, servidor Web, de arquivos, de impressão, DHCP, conexão remota, diretório de redes, transferência de arquivos, sincronismo de relógio, serviço de backup.&lt;br&gt;
As estratégias pedagógicas já foram abordadas em outro artigo meu, intutloado: "Ensino de Infraestrutura de Rede: Conceitos, Estratégias e Técnicas 📚💻" e além das estratégias mensionadas no mesmo, eu adotei o uso de ferramentas de servidores em nuvem, como AWS, onde pude dar uma nova abordagem ao curso, pois os métodos tradicionais previam as aulas práticas com servidores físicos locais.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzqit2c6gx2ldcsk2wafo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzqit2c6gx2ldcsk2wafo.png" alt="Image description" width="720" height="720"&gt;&lt;/a&gt;&lt;br&gt;
Módulo didático, conceitos e técnicas:&lt;br&gt;
No módulo de serviços de redes veremos como implementar e manter sistemas operacionais e serviços de redes de computadores, os conceitos de protocolos de redes, configuração de dispositivos para atender os requisitos de projetos.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;1. Conceito básico de servidores:&lt;/em&gt;&lt;br&gt;
Servidor é uma máquina que oferece um serviço a uma rede de clientes, hoje não podemos afirmar que é necessariamente uma máquina, com o conceito de computação em nuvem, a exemplo servidores Amazon, podemos tê-lo em qualquer lugar que tenha conexão com a internet sem ter que se preocupar com a infraestrutura de mantê-lo fisicamente em algum lugar.&lt;/p&gt;

&lt;p&gt;Nesse curso dividimos os conteúdos em tipos de servidores como servidor DNS, proxy, Web, de arquivos, de impressão, DHCP, de conexão remota, diretório de redes, transferência de arquivos, sincronismo de relógio, atualização de patchs e backup. Os laboratórios práticos faremos nos sistemas operacionais (SO) da microsoft e de distribuição linux.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2. Servidor DNS:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;DNS (Domain Name System) é um serviço que traduz endereços IPs de outros servidores em nome, por exemplo, quando criamos um servidor Amazon, teremos disponível um endereço IP, nome e senha de acesso e normalmente o que queremos é que ao acessar o nosso servidor ao invés de digitar uma sequência de números (IP), digitemos um nome como segue o exemplo na figura abaixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5v0rnkh91jhuf9po8y3s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5v0rnkh91jhuf9po8y3s.png" alt="Image description" width="600" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb1zu5cdb7bo1idfc75mj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb1zu5cdb7bo1idfc75mj.png" alt="Image description" width="720" height="405"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;3. Servidor de Proxy&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;É um serviço intermediário entre a rede local e a internet, normalmente utilizado para servir como filtro de acesso à internet para os equipamentos dentro de uma rede.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;4. Servidor WEB&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;É um serviço fornecido com acesso via internet, podemos oferecer nesse tipo de serviço respostas a pedidos HTTP de clientes com alguns dados que podem variar de textos à imagens. Por exemplo quando acessamos o site &lt;a href="http://www.google.com"&gt;www.google.com&lt;/a&gt; ele nos fornece informações de texto e imagem que aparecem em nosso navegador.&lt;/p&gt;

&lt;p&gt;Portas de comunicação POP, IMAP, SMTP&lt;/p&gt;

&lt;p&gt;&lt;em&gt;5. Servidor de arquivos&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;É um serviço que permite compartilhar arquivos dentro de uma rede, normalmente utilizamos o programa SAMBA que é um conjunto de pacotes de serviços, entre eles o de arquivos.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;6. Servidor de impressão&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;O servidor de impressão pode gerenciar múltiplas impressoras em uma rede, podendo limitar cotas de impressão por usuário ou horários permitidos, controle único de fila de impressão e redistribuição de impressão em caso de falha de um aparelho na rede.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;7. Servidor DHCP&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Dynamic Host Configuration Protocol, ou Protocolo de Configuração Dinâmica de Endereços de Rede é um servidor que permite que hosts em uma rede obtenham IPs de forma automática.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;8. Servidor de conexão remota&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;RDP e VNC, SSH, Telnet são meios de oferecer e se conectar a um servidor remoto. O acesso remoto é quando acessamos um dispositivo para configurá-lo a partir de outro. Sendo RDP (Remote Desktop Protocol) um protocolo de acesso remoto à um terminal desktop. VNC (Virtual Network Computing) e SSH (Secure Shell).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;9. Serviços de diretório de redes&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;No Serviço de diretório de redes o servidor armazena, organiza e fornece acesso à informações relacionadas a diretórios de um determinado Sistema Operacional, no caso do Windows Server temos o Active Directory e o OpenLDAP (Lightweight Directory Access Protocol) para os servidores Linux.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;10. Serviço de transferência de arquivos&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Um servidor de transferência de arquivos nos ajuda a transferir arquivos a um servidor de forma direta e com relativa segurança, utilizamos os protocolos FTP (File Transfer Protocol) e TFTP (Trivial File Transfer Protocol).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;11. Serviço de sincronismo de relógio&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;SYSLOG é um padrão de log de servidores, principalmente Linux. Podemos organizar e armazenar logs e sincronismo de relógio através desse sistema, hoje atualizado para o GrayLog.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;12. Serviço de atualização de patchs e Backup&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;O serviço de atualização de patch é útil para liberar correções em softwares, melhorar usabilidade e desempenho de um software. Normalmente utilizado para gerenciar atualizações de S.O. em uma rede.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;13. Considerações finais&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Qualquer dúvida quanto a alguma sigla ou conceito apresentado no curso favor consultar o dicionário de CONCEITOS TEÓRICOS.&lt;/p&gt;

&lt;p&gt;Laboratórios práticos:&lt;br&gt;
Todas as aulas fizemos conceituação teórica e execução prática usando servidores na AWS, eu preparei um guia para os alunos criarem uma conta na AWS e ganharem $300 para experimentar os serviços cloud. Durante as aulas os alunos se conectavam via ssh usando o software Putty nas máquinas locais para acessar remotamente os servidores Linux em instâncias ec2.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7mbqa91vwwl38x2vtqeg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7mbqa91vwwl38x2vtqeg.png" alt="Image description" width="686" height="757"&gt;&lt;/a&gt;&lt;br&gt;
Durante as atividades práticas de criação dos serivços, criamos instâncias ec2 t2.micro com linux ubuntu e aprendemos a fazer a liberação de portas no painel da AWS console e a configurar todos os serviços listados no tópico anterior no linux server e no Windows server, para ciração dos serviços no Windows, tomamos como base o livro: Stanek, william Windows server 2008 — guia completo.&lt;/p&gt;

&lt;p&gt;Durante a aula de servidor web, configuramos um servidor com apache2, criamos um Hello World em HTML para colocar na pasta do servidor web, acessamos nosso código via navegador, usando o ip público da instância e os alunos puderam ver na prática o navegador local (Webclient) acessando o WebServer em um servidor em nuvem na AWS. Fizemos casos similares para todos os tipos de servidores e isso motivou muito os alunos a cada fim de aula.&lt;/p&gt;

&lt;p&gt;Conclusão:&lt;br&gt;
Este artigo discutiu minhas experiências e o conteúdo do ensino de servidores no curso de infraestrutura de redes, com foco nas estratégias pedagógicas e nas técnicas utilizadas. O objetivo foi fornecer aos alunos uma compreensão abrangente dos conceitos e das habilidades práticas necessárias para lidar com diferentes tipos de servidores.&lt;/p&gt;

&lt;p&gt;Ao longo do curso, abordamos conceitos básicos de servidores, como DNS, proxy, servidor web, servidor de arquivos, servidor de impressão, DHCP, conexão remota, diretório de redes, transferência de arquivos, sincronismo de relógio, atualização de patches e backup. Além disso, exploramos o uso de ferramentas de servidores em nuvem, como a AWS, que trouxe uma abordagem inovadora ao curso, substituindo os métodos tradicionais baseados em servidores físicos locais.&lt;/p&gt;

&lt;p&gt;Os laboratórios práticos foram realizados tanto em sistemas operacionais da Microsoft quanto em distribuições Linux, permitindo que os alunos adquirissem experiência real na configuração e no gerenciamento dos diversos serviços de servidor mencionados.&lt;/p&gt;

&lt;p&gt;Através do uso de instâncias EC2 na AWS, os alunos puderam criar seus próprios servidores e se conectar a eles remotamente, utilizando ferramentas como o SSH. Essa abordagem prática proporcionou um ambiente de aprendizado dinâmico e interativo, permitindo que os alunos aplicassem os conceitos teóricos em cenários reais.&lt;/p&gt;

&lt;p&gt;No geral, o curso alcançou seu objetivo de fornecer aos alunos conhecimentos sólidos sobre servidores e suas diferentes aplicações em redes de computadores. As estratégias pedagógicas adotadas, combinadas com o uso de ferramentas modernas e práticas em nuvem, contribuíram para a compreensão efetiva dos alunos e para o desenvolvimento de suas habilidades técnicas.&lt;/p&gt;

&lt;p&gt;Como recomendação final, sugiro que os alunos consultem um dicionário de conceitos teóricos caso surjam dúvidas em relação a alguma sigla ou conceito apresentado no curso. Além disso, encorajo-os a continuar explorando outras técnicas e ferramentas relacionadas ao ensino de infraestrutura de redes, a fim de aprimorar ainda mais suas habilidades e contribuir para a comunidade de educação em tecnologia.&lt;/p&gt;

&lt;p&gt;Em suma, espero que este artigo tenha sido útil para os profissionais da área de ensino de infraestrutura de redes, fornecendo insights valiosos e práticas eficazes para aprimorar o ensino de servidores e promover o melhor desempenho dos alunos.&lt;/p&gt;

&lt;p&gt;Referências:&lt;br&gt;
-STANEK, William. Windows Server 2008 inside out. Pearson Education, 2008.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Roteiro para criar e configurar Windows Server 2008 usando a cloud GCP</title>
      <dc:creator>Rafael Levi Costa</dc:creator>
      <pubDate>Fri, 19 Jan 2024 20:49:12 +0000</pubDate>
      <link>https://dev.to/rafaellevissa/roteiro-para-criar-e-configurar-windows-server-2008-usando-a-cloud-gcp-2ojk</link>
      <guid>https://dev.to/rafaellevissa/roteiro-para-criar-e-configurar-windows-server-2008-usando-a-cloud-gcp-2ojk</guid>
      <description>&lt;p&gt;Objetivo: Aplicar servidores Windows em diversos ambientes de cloud server.&lt;/p&gt;

&lt;p&gt;Tempo estimado: 2 h.&lt;/p&gt;

&lt;p&gt;Recursos:&lt;/p&gt;

&lt;p&gt;-Computador&lt;br&gt;
-Internet&lt;br&gt;
-Conta no GCP (Google Cloud Platform)&lt;/p&gt;

&lt;p&gt;Anotem os IPs e portas do servidor Windows:&lt;/p&gt;

&lt;p&gt;GCP&lt;br&gt;
Conta: ********&lt;br&gt;
IP: ***********&lt;br&gt;
Porta: 3389&lt;br&gt;
Usuário: *********&lt;br&gt;
Senha do SO: *********&lt;br&gt;
Arquivo RDP (Remote Desktop Protocol): download&lt;/p&gt;

&lt;p&gt;-Vamos agora aprender a criar uma VM com instância do windows server, usando o GCP.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;1. Abra sua conta do GCP, no grupo de serviços COMPUTE ENGINE&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3agjqhne5kmltemaadt4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3agjqhne5kmltemaadt4.png" alt="Image description" width="720" height="406"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;2. Clique em criar instância.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6ib5gminzmel24ygb02.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6ib5gminzmel24ygb02.png" alt="Image description" width="720" height="485"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;3. Modifique o disco de inicialização para windows server, em nosso caso utilizamos a versão 2008.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmbefoj318akg2f3eepo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frmbefoj318akg2f3eepo.png" alt="Image description" width="573" height="599"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;4. Agora clique em criar:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7jl7qhur5wukxaln27ah.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7jl7qhur5wukxaln27ah.png" alt="Image description" width="716" height="640"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;5. Agora você tem acesso ao IP público do seu servidor windows, ao qual podemos acessar via RDP. Antes de acessar devemos configurar a senha do sistema.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1v2yletv5rxahjz0vwum.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1v2yletv5rxahjz0vwum.png" alt="Image description" width="720" height="398"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;6. Clique na seta para baixo, ao lado do nome RDP. Depois clique em configurar senha do windows.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fksrooke3no7nh27ahkog.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fksrooke3no7nh27ahkog.png" alt="Image description" width="720" height="360"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;7. Aparecerá uma tela com o usuário do sistema. Clique em definir&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvwkpulgg0axfj4h71ao4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvwkpulgg0axfj4h71ao4.png" alt="Image description" width="650" height="409"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;8. Após essa tela, aparecerá a senha do sistema, copie ela e guarde em um local seguro, pois nunca mais você terá como rever. Após isso podemos baixar o arquivo .rdp para acesso via qualquer computador com windows ou RDP client. Poderemos também acessar o servidor através do navegador, instalando no google chrome uma extensão. Vamos voltar ao painel do GCP, clicar em RDP.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5uhpxwwtij5abiksru9j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5uhpxwwtij5abiksru9j.png" alt="Image description" width="720" height="389"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;9. Agora se for utilizar o acesso ao servidor pelo navegador, clique em instalar extensão (caso esteja no navegador google chrome), ou se estiver utilizando um SO windows em sua máquina, pode baixar o arquivo RDP.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fw1ilcxj0xpiruntcn1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8fw1ilcxj0xpiruntcn1.png" alt="Image description" width="720" height="437"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;10. Se estiver acessando via navegador, aparecerá essa tela:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frao8lpelefzoogh5uewo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frao8lpelefzoogh5uewo.png" alt="Image description" width="720" height="385"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;11. Após essa tela, terá que digitar a senha do servidor, configurada na etapa 7:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3iagbm2kjsc3usdpmkbr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3iagbm2kjsc3usdpmkbr.png" alt="Image description" width="720" height="325"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;12. Via rdp, fica assim. Após baixar o arquivo rdp, abra ele no windows.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5e4a8m8hedr6yorz2ywn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5e4a8m8hedr6yorz2ywn.png" alt="Image description" width="141" height="140"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;13. Pode aparecer uma tela de alerta, clique em sim.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkbg7jmcacp604i39h4m3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkbg7jmcacp604i39h4m3.png" alt="Image description" width="491" height="281"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;14. Agora digite a senha, exibida na etapa 7:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7dtfxkqgziai8k8vvlel.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7dtfxkqgziai8k8vvlel.png" alt="Image description" width="432" height="321"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;15. Agora estaremos com a tela do servidor a disposição.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsti2uf4ih3n68zubgsew.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsti2uf4ih3n68zubgsew.png" alt="Image description" width="720" height="382"&gt;&lt;/a&gt;&lt;br&gt;
Vamos instalar os serviços no windows server:&lt;br&gt;
&lt;em&gt;1. Clique em Server Manager na barra de tarefas e clique em features:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Froofutvfh0s0idkauwv8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Froofutvfh0s0idkauwv8.png" alt="Image description" width="786" height="445"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;2. add features:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyjuou3e9jjgf994k36vx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyjuou3e9jjgf994k36vx.png" alt="Image description" width="786" height="317"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;3. vai abrir a lista de rucursos:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmlflw8gsike6ylo4dwzb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmlflw8gsike6ylo4dwzb.png" alt="Image description" width="786" height="577"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;4. marque as opções a seguir e clique em next:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5gr9g7nqw1bnkex8qok.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5gr9g7nqw1bnkex8qok.png" alt="Image description" width="786" height="573"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr5shq9fktb6qxqgf4fpa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr5shq9fktb6qxqgf4fpa.png" alt="Image description" width="786" height="579"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;novamente em next. Marque web server e ftp server:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ov54571cd3dx7ihuam8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ov54571cd3dx7ihuam8.png" alt="Image description" width="786" height="576"&gt;&lt;/a&gt;&lt;br&gt;
Agora seu servidor Windows Server 2008 está configurado e pronto para utilizar e fazer configurações adicionais no seu servidor. Espero que tenha ajudado, fique a vontade para tirar as suas dúvidas nos comentários.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Guia Passo a Passo: Como Registrar um Software no INPI no Brasil</title>
      <dc:creator>Rafael Levi Costa</dc:creator>
      <pubDate>Fri, 19 Jan 2024 20:10:59 +0000</pubDate>
      <link>https://dev.to/rafaellevissa/guia-passo-a-passo-como-registrar-um-software-no-inpi-no-brasil-5d9d</link>
      <guid>https://dev.to/rafaellevissa/guia-passo-a-passo-como-registrar-um-software-no-inpi-no-brasil-5d9d</guid>
      <description>&lt;p&gt;Introdução: Proteger o seu software por meio de meios legais é crucial no cenário digital atual. No Brasil, o Instituto Nacional da Propriedade Industrial (INPI) oferece um processo abrangente para o registro de software, garantindo os direitos de propriedade intelectual dos criadores. Neste guia passo a passo, vamos orientá-lo no processo de registro do seu software no INPI, fornecendo informações valiosas e dicas ao longo do caminho. Vou demonstrar aqui o passo a passo que eu fiz para poder registrar meu software gerado no processo de mestrado e ao final vou deixar o link do meu como exemplo!&lt;/p&gt;

&lt;p&gt;Passo 1: Preparação da Documentação Antes de iniciar o processo de registro, reúna a documentação necessária. Você precisará de:&lt;/p&gt;

&lt;p&gt;-Uma descrição detalhada do software, incluindo sua finalidade, funcionalidade e recursos exclusivos.&lt;/p&gt;

&lt;p&gt;-Documentação do código-fonte, explicando a arquitetura, algoritmos e princípios de design.&lt;/p&gt;

&lt;p&gt;-Fluxogramas, diagramas e desenhos técnicos que ilustrem o funcionamento do software.&lt;/p&gt;

&lt;p&gt;-Qualquer informação adicional que demonstre a originalidade e inovação do seu software.&lt;/p&gt;

&lt;p&gt;Passo 2: Criar uma Conta no Portal do INPI Acesse o site do INPI (&lt;a href="http://www.inpi.gov.br"&gt;www.inpi.gov.br&lt;/a&gt;) e crie uma conta no portal. Essa conta lhe dará acesso ao sistema de registro e outros serviços fornecidos pelo INPI.&lt;/p&gt;

&lt;p&gt;Passo 3: Preencher o Formulário de Registro de Software Faça login na sua conta do INPI e acesse a seção de registro de software. Preencha os campos obrigatórios, incluindo o título do software, descrição e classificações relevantes. Forneça informações precisas para garantir um processo de registro tranquilo.&lt;/p&gt;

&lt;p&gt;Passo 3.1: Gerar o SHA512 do Código-fonte&lt;/p&gt;

&lt;p&gt;Antes de prosseguir para o preenchimento do formulário de registro, é importante gerar o valor do SHA512 do código-fonte do seu software. O SHA512 (Secure Hash Algorithm 512 bits) é um algoritmo criptográfico que gera um valor único para o seu código-fonte. Isso ajudará a comprovar a autenticidade e integridade do software durante o processo de registro.&lt;/p&gt;

&lt;p&gt;Para gerar o SHA512, siga as etapas abaixo:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Abra um terminal ou prompt de comando no seu sistema operacional.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navegue até o diretório onde o código-fonte do seu software está localizado. Por exemplo, se o seu código está em uma pasta chamada “meu-software”, você pode usar o comando cd meu-software para entrar na pasta.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Execute o comando apropriado para gerar o SHA512 do código-fonte. Dependendo do sistema operacional e das ferramentas disponíveis, você pode usar comandos diferentes. Abaixo estão alguns exemplos:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;-No Linux ou macOS, você pode usar o comando sha512sum da seguinte maneira:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sha512sum nome-do-arquivo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;-Substitua “nome-do-arquivo” pelo nome do arquivo principal do seu código-fonte.&lt;/p&gt;

&lt;p&gt;-No Windows, se você tiver o Git Bash instalado, pode usar o comando sha512sum da mesma forma que no Linux ou macOS.&lt;/p&gt;

&lt;p&gt;-Se você estiver usando o PowerShell no Windows, pode usar o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Get-FileHash -Algorithm SHA512 nome-do-arquivo | Select-Object -ExpandProperty Hash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;-Novamente, substitua “nome-do-arquivo” pelo nome do arquivo principal do seu código-fonte.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;O comando irá calcular o SHA512 do arquivo e exibirá uma sequência de caracteres alfanuméricos. Copie essa sequência, pois você precisará inseri-la posteriormente no formulário de registro do INPI.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Certifique-se de gerar o SHA512 para o arquivo principal do seu código-fonte. Se o seu software consistir em vários arquivos, repita o processo para cada arquivo individualmente.&lt;/p&gt;

&lt;p&gt;Com o valor do SHA512 gerado, você estará pronto para preencher o formulário de registro do INPI com todas as informações relevantes, incluindo esse valor para comprovar a autenticidade do seu código-fonte.&lt;/p&gt;

&lt;p&gt;Passo 4: Enviar Documentação e Código-fonte Faça o upload da documentação preparada, incluindo a descrição detalhada, documentação do código-fonte e desenhos técnicos, por meio do portal do INPI. Verifique se todos os arquivos estão nos formatos especificados e atendem aos requisitos estabelecidos pelo INPI.&lt;/p&gt;

&lt;p&gt;Passo 5: Pagar a Taxa de Registro O INPI cobra uma taxa de registro para o registro de software. A taxa pode ser paga online pelo portal, utilizando os métodos de pagamento disponíveis. Guarde o comprovante de pagamento para referência futura.&lt;/p&gt;

&lt;p&gt;Passo 6: Acompanhar o Processo de Registro Após o pagamento da taxa de registro, o INPI iniciará o processo de análise. Você poderá acompanhar o progresso do seu registro por meio do portal do INPI. Tenha paciência, pois o processo de análise pode levar vários meses, dependendo da carga de trabalho e da complexidade do seu software.&lt;/p&gt;

&lt;p&gt;Passo 7: Responder às Demandas Oficiais Durante o processo de análise, o INPI pode solicitar informações adicionais ou esclarecimentos sobre o seu software. É essencial responder prontamente a quaisquer demandas oficiais recebidas. Forneça as informações solicitadas com precisão e abrangência para agilizar o processo.&lt;/p&gt;

&lt;p&gt;Passo 8: Concessão do Registro Se o seu software atender a todos os requisitos e passar pelo processo de análise, o INPI emitirá a concessão do Software.&lt;/p&gt;

&lt;p&gt;Exemplo do meu:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F00vysowkylyz4qckpqqq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F00vysowkylyz4qckpqqq.png" alt="Image description" width="720" height="993"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Simplifying App Development with Flutter in MVVM Architecture</title>
      <dc:creator>Rafael Levi Costa</dc:creator>
      <pubDate>Wed, 17 Jan 2024 21:51:29 +0000</pubDate>
      <link>https://dev.to/rafaellevissa/simplifying-app-development-with-flutter-in-mvvm-architecture-599l</link>
      <guid>https://dev.to/rafaellevissa/simplifying-app-development-with-flutter-in-mvvm-architecture-599l</guid>
      <description>&lt;p&gt;About My Experiences with Flutter&lt;/p&gt;

&lt;p&gt;Introduction:&lt;br&gt;
In the world of cross-platform mobile app development, Flutter has gained significant popularity due to its rapid development cycle, beautiful user interface, and excellent performance. As developers, we constantly strive to improve our workflow and create sustainable, scalable, and testable code. This is where the Model-View-ViewModel (MVVM) architectural pattern comes into play. In this article, we will explore how Flutter and MVVM work together to simplify app development, sharing experiences alongside developer Victor Martins.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ferp4o7rpeuglcngae9gz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ferp4o7rpeuglcngae9gz.png" alt="Image description" width="720" height="720"&gt;&lt;/a&gt;&lt;br&gt;
Understanding MVVM Basics:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdmh8e97b5ryrm4g1suc4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdmh8e97b5ryrm4g1suc4.png" alt="Image description" width="720" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;MVVM is an architectural pattern that separates the user interface (UI) logic from the business logic of an application. It promotes separation of concerns, making the code more modular, reusable, and testable. The pattern consists of three main components:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Model: The Model represents the data and business logic of the application. It encapsulates data objects, data access methods, and validation rules. In Flutter, the Model can be implemented as simple Dart classes or as more complex objects using packages like ‘json_serializable’ or ‘freezed’.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fieqyj1bqzcj6md464dc1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fieqyj1bqzcj6md464dc1.png" alt="Image description" width="720" height="231"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2.&lt;/em&gt; View: The View is responsible for displaying the user interface to the user. In Flutter, it is typically implemented using widgets. Widgets are declarative and describe how the UI should look based on the current state. The View should be as simple as possible, focusing only on UI rendering and user interactions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsz9os0uwolvc69b97igb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsz9os0uwolvc69b97igb.png" alt="Image description" width="714" height="882"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;3.&lt;/em&gt; ViewModel: The ViewModel acts as an intermediary between the View and the Model. It exposes the necessary data and commands to the View and provides methods to handle user interactions. The ViewModel also maintains the view’s state and notifies the view of any data changes. In Flutter, the ViewModel can be implemented using the ‘provider’ package, which offers a straightforward way to manage state.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgc29m7v9sjmrc3uc1x3g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgc29m7v9sjmrc3uc1x3g.png" alt="Image description" width="720" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Implementing MVVM in Flutter:&lt;br&gt;
To implement MVVM in Flutter, we need to follow some guidelines:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Separate the UI from the business logic: As mentioned earlier, the View should be responsible only for rendering the UI and handling user interactions. Move the business logic and data operations to the ViewModel or the Model itself.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use data binding: Data binding allows for automatic synchronization between the View and the ViewModel. Flutter provides several approaches to data binding, including using ‘ChangeNotifier’, ‘StreamBuilder’, or the ‘provider’ package. The ‘provider’ package is particularly useful as it simplifies state management and offers a variety of features such as dependency injection and hot reloading.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Implement bidirectional communication: In MVVM, the ViewModel communicates with the View through bindings or observables, and the View communicates with the ViewModel through commands. Use the ‘provider’ package to expose ViewModel’s data and commands to the View.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Benefits of Flutter MVVM:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Separation of Concerns: MVVM promotes a clear separation between the UI and the business logic, making the codebase more sustainable and easier to understand. This separation enables independent development of the UI and business logic, making team collaboration more efficient.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Code Reusability: With MVVM, the ViewModel and Model can be reused in different UI components or even across different platforms. This saves development time and effort, especially when creating multiple apps that share similar functionalities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Testability: The separation of concerns in MVVM makes it easier to test each component in isolation. Unit testing the ViewModel and Model becomes simpler, allowing for faster test execution and greater code coverage.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here’s a code example implementing this architecture: &lt;a href="https://gitlab.com/rafaellevissa/flutter-mvvm-example"&gt;https://gitlab.com/rafaellevissa/flutter-mvvm-example&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Conclusion:&lt;/em&gt;&lt;br&gt;
Flutter, with its rich set of UI components and high-performance rendering, combined with the MVVM architectural pattern, provides developers with a powerful and efficient way to create cross-platform mobile apps. By separating the UI, business logic, and data concerns, Flutter MVVM promotes modularity, reusability, and code stability.&lt;/p&gt;

&lt;p&gt;Implementing MVVM in Flutter involves leveraging the Flutter’s widget-based UI framework and using packages like ‘provider’ for state management and data binding. This separation of concerns allows teams to work collaboratively, focus on specific areas of expertise, and create sustainable and scalable codebases.&lt;/p&gt;

&lt;p&gt;Furthermore, MVVM enhances code reusability, enabling ViewModel and Model to be shared among various UI components or even different platforms, saving valuable development time.&lt;/p&gt;

&lt;p&gt;With the ability to write comprehensive unit tests for each component, MVVM in Flutter improves overall code quality and stability, ensuring that apps behave as intended in different scenarios.&lt;/p&gt;

&lt;p&gt;In conclusion, Flutter MVVM is a winning combination that simplifies app development, improves code maintainability, and promotes stability. By embracing this architecture, developers can streamline their workflow, create robust and scalable apps, and deliver enjoyable user experiences.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Streamlining Document Processing with AI: My Experience with AWS Texttract 📄🤖</title>
      <dc:creator>Rafael Levi Costa</dc:creator>
      <pubDate>Wed, 17 Jan 2024 21:42:01 +0000</pubDate>
      <link>https://dev.to/rafaellevissa/streamlining-document-processing-with-ai-my-experience-with-aws-texttract-27f</link>
      <guid>https://dev.to/rafaellevissa/streamlining-document-processing-with-ai-my-experience-with-aws-texttract-27f</guid>
      <description>&lt;p&gt;Introduction: “Artificial intelligence is the future, and the future is here.” — Alan Turing 🚀🔮&lt;/p&gt;

&lt;p&gt;In this article, I will share my experience with artificial intelligence (AI) focusing on data extraction from scanned documents using AWS Texttract. As a response to a company’s request to solve a process issue, I delved into the world of AI and successfully implemented a solution that revolutionized their document processing workflow. 💼💻&lt;/p&gt;

&lt;p&gt;The Problem: “The digital transformation is no longer just an option; it’s a necessity.” — Satya Nadella 💡💻&lt;/p&gt;

&lt;p&gt;The company received a large volume of documents on a monthly basis, which were scanned and sent in PDF format. Their manual process involved employees from the administrative department spending hours each day typing the information from these documents into the system. This created a significant delay in processing, leading to operational bottlenecks and a growing backlog. ⏳📚&lt;/p&gt;

&lt;p&gt;The Solution: “Technology is best when it brings people together.” — Matt Mullenweg 🌐🤝&lt;/p&gt;

&lt;p&gt;To address this challenge, I analyzed the company’s existing infrastructure, which consisted of several monolithic Ruby on Rails applications managed within a Docker network. After careful consideration, I decided to leverage the power of AWS Texttract, an AI tool that interprets text from PDFs and images and returns the extracted data in JSON format.&lt;/p&gt;

&lt;p&gt;Defining AWS Texttract: “Artificial intelligence will be the ultimate extension of human intelligence.” — Max Levchin 🤖🧠&lt;/p&gt;

&lt;p&gt;AWS Texttract is a service provided by Amazon Web Services (AWS) that utilizes machine learning algorithms to extract text and data from scanned documents. It enables the automated interpretation of various document formats, saving significant time and effort in manual data entry tasks. 💻🔍&lt;/p&gt;

&lt;p&gt;Implementation: “Technology is nothing. What’s important is that you have faith in people, that they’re basically good and smart, and if you give them tools, they’ll do wonderful things with them.” — Steve Jobs 💪🔧&lt;/p&gt;

&lt;p&gt;I developed a service that fetched the scanned and filled PDF forms from an S3 bucket and asynchronously processed them using AWS Texttract. The extracted data was then automatically populated into the corresponding fields in the system’s forms. Given the diversity of document patterns and formats, I built an internal intelligence system capable of interpreting the unique characteristics of each form. 🚀💡&lt;/p&gt;

&lt;p&gt;example of code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;require 'aws-sdk-s3'
require 'aws-sdk-textract'

class DocumentController &amp;lt; ApplicationController
  def process_documents
    # Retrieve scanned PDF documents from S3 bucket
    s3_client = Aws::S3::Client.new(region: 'your-region')
    documents = []

    # List objects in the S3 bucket
    resp = s3_client.list_objects_v2(bucket: 'your-bucket')
    resp.contents.each do |object|
      # Check if the object is a PDF file
      if object.key.end_with?('.pdf')
        # Download the PDF file from S3
        file = s3_client.get_object(bucket: 'your-bucket', key: object.key)
        pdf_content = file.body.read

        # Call AWS Textract to extract form data
        textract_client = Aws::Textract::Client.new(region: 'your-region')
        response = textract_client.start_document_text_detection({
          document_location: {
            s3_object: {
              bucket: 'your-bucket',
              name: object.key
            }
          }
        })

        # Wait for the extraction process to complete
        job_id = response.job_id
        textract_client.wait_until(:document_text_detection_job_completed, job_id: job_id)

        # Retrieve the extracted form data
        result = textract_client.get_document_text_detection(job_id: job_id)
        form_data = parse_form_data(result)

        # Store the form data in your Rails application
        Form.create(form_data: form_data)
        documents &amp;lt;&amp;lt; object.key
      end
    end

    render json: { message: 'Documents processed successfully', documents: documents }
  end

  private

  def parse_form_data(result)
    # Extract relevant form fields and values from the Textract result
    # ...
    # Return a hash representing the form data
    # ...
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🚀 DevOps: Streamlining Development and Deployment&lt;/p&gt;

&lt;p&gt;To ensure seamless collaboration and efficient deployment, we implemented a DevOps system centered around GitLab and GitFlow. The project’s source code was stored in GitLab, allowing for version control, code review, and easy collaboration among team members. The GitFlow workflow was followed, enabling a structured approach to feature development and release management.&lt;/p&gt;

&lt;p&gt;🔄 Continuous Integration and Deployment Pipeline&lt;/p&gt;

&lt;p&gt;The development process was enhanced by a robust CI/CD pipeline. Whenever a merge request was opened targeting the “homologation” branch, an automated pipeline was triggered. This pipeline incorporated various stages, including unit testing, building the containerized project using Docker, and deploying it to the AWS servers.&lt;/p&gt;

&lt;p&gt;🐳 Dockerfile Example:&lt;/p&gt;

&lt;p&gt;Below is an example Dockerfile for a Ruby on Rails application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Use the official Ruby image as the base
FROM ruby:2.7

# Set the working directory
WORKDIR /app

# Copy the Gemfile and Gemfile.lock
COPY Gemfile Gemfile.lock ./

# Install the project dependencies
RUN bundle install

# Copy the application code
COPY . .

# Set the entry point for the container
CMD ["rails", "server", "-b", "0.0.0.0"]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔧 GitLab Pipeline Configuration (gitlab.yaml)&lt;/p&gt;

&lt;p&gt;The GitLab pipeline was configured using a .gitlab-ci.yml file. It defined the stages, jobs, and deployment steps to be executed during the pipeline. Here's an example of a GitLab pipeline configuration file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stages:
  - test
  - build
  - deploy

unit_tests:
  stage: test
  script:
    - bundle install
    - bundle exec rspec

build_docker_image:
  stage: build
  script:
    - docker build -t your-image-name .

deploy_to_aws:
  stage: deploy
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker push your-image-name
    - aws ecs update-service --cluster your-cluster-name --service your-service-name --force-new-deployment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the pipeline consists of three stages: “test,” “build,” and “deploy.” Each stage includes one or more jobs that execute specific tasks. The unit_tests job performs unit tests using RSpec, the build_docker_image job builds a Docker image, and the deploy_to_aws job pushes the Docker image to the registry and triggers a new deployment on the AWS ECS cluster. Redis was used to store unstructured data that gave me the status of document processing in Textract.&lt;/p&gt;

&lt;p&gt;These examples demonstrate the integration of DevOps practices, such as version control, automated testing, and containerization, which helped streamline the development and deployment processes, ensuring reliability and scalability throughout the project.&lt;/p&gt;

&lt;p&gt;Reducing Processing Time: “The future is already here — it’s just not evenly distributed.” — William Gibson 🌟⌛&lt;/p&gt;

&lt;p&gt;The implementation of this intelligent solution brought significant improvements to the company’s document processing workflow. By automating the data extraction process, weeks of manual labor were saved each month. The processing delay, previously measured in weeks, was reduced to just a few hours. This achievement not only enhanced operational efficiency but also introduced automation to repetitive and manual tasks. ⏰💼&lt;/p&gt;

&lt;p&gt;Conclusion: “AI is not only for engineers; it’s for everyone.” — Fei-Fei Li 🌍🔮&lt;/p&gt;

&lt;p&gt;My experience with AI and AWS Texttract in streamlining document processing has demonstrated the tremendous potential of AI in transforming traditional manual processes into efficient, automated workflows. By harnessing the power of AI, we can revolutionize how organizations handle large volumes of data, increasing productivity and reducing operational costs.&lt;/p&gt;

&lt;p&gt;diagram of this architecture:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo5cvk3c49bjccyt1ae39.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo5cvk3c49bjccyt1ae39.png" alt="Image description" width="720" height="542"&gt;&lt;/a&gt;&lt;br&gt;
Let’s embrace the future of technology together, empowering ourselves with AI to achieve remarkable outcomes! 💪🚀&lt;/p&gt;

</description>
    </item>
    <item>
      <title>📢 Calling all Software Professionals in Fintech! 🚀</title>
      <dc:creator>Rafael Levi Costa</dc:creator>
      <pubDate>Wed, 17 Jan 2024 21:36:55 +0000</pubDate>
      <link>https://dev.to/rafaellevissa/calling-all-software-professionals-in-fintech-2f89</link>
      <guid>https://dev.to/rafaellevissa/calling-all-software-professionals-in-fintech-2f89</guid>
      <description>&lt;p&gt;Are you currently working or have you worked in the software sector of a fintech company? If so, this post is tailor-made for you! 💼💻&lt;/p&gt;

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

&lt;p&gt;🚀 Overcoming Challenges in Fintech Software Architecture: Insights from Personal Experience 🌐&lt;/p&gt;

&lt;p&gt;🔍 Building and developing software architectures for fintech companies can be a daunting task, but with the right strategies, it becomes an exhilarating journey of innovation. Today, I’d like to share some valuable insights and tips based on my experiences across multiple fintech ventures. 💼💻&lt;/p&gt;

&lt;p&gt;🏦 Having worked in a diverse range of fintech domains, including white-label solutions for banks, financial product information systems, and even directly with banking operations, I’ve encountered various challenges and discovered effective approaches. Let’s dive into the key points I’d like to discuss:&lt;/p&gt;

&lt;p&gt;1️⃣ Modular Architecture and Microservices: Among the various architectures I’ve witnessed, one that stood out was a microservices-based architecture developed in Go, complemented by automated unit and integration tests written in Python. This setup allowed for seamless communication between microservices using gRPC and ensured reliability through message queuing with Kafka. Leveraging the power of the cloud, we utilized Google Cloud Platform (GCP) and Kubernetes for container management and orchestration. This modular approach proved to be a solid foundation for fintech solutions. 🧩🚀&lt;/p&gt;

&lt;p&gt;example of code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Example of a service in Go using a microservices architecture
func main() {
  // gRPC Server Setup and Startup
  grpcServer := grpc.NewServer()
  pb.RegisterUserServiceServer(grpcServer, &amp;amp;userService{})

  // Start the gRPC server
  if err := grpcServer.Serve(lis); err != nil {
    log.Fatalf("Failed to serve: %v", err)
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2️⃣ Continuous Delivery with Spinnaker and Jenkins: Embracing the philosophy of continuous delivery, we utilized Spinnaker as our go-to tool for automating the deployment process. Jenkins seamlessly integrated into our CI/CD pipeline, ensuring smooth project builds and rapid iteration cycles. By automating these processes, we could focus on delivering new features and improvements to our customers efficiently. ⚙️🚀&lt;/p&gt;

&lt;p&gt;Example code in Jenkinsfile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pipeline {
  agent any

  stages {
    stage('Build') {
      steps {
        // Commands for compiling and packaging the code
        sh 'make build'
      }
    }
    stage('Test') {
      steps {
        // Run automated tests
        sh 'make test'
      }
    }
    stage('Deploy') {
      steps {
        // Commands to deploy the software
        sh 'make deploy'
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3️⃣ Control and Security through GMUD: In one particular fintech company, we implemented a Release Management Committee known as GMUD (Governance, Management, Uptime, and Delivery). This committee served as a valuable safeguard for controlled releases, assessing the impact on customers and the server environment. The GMUD process empowered us to make informed decisions and plan rollbacks when necessary, ensuring the stability and security of our systems. 🔒📈&lt;/p&gt;

&lt;p&gt;Example of code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Example function to perform a reversal of a posting
func rollbackRelease(releaseID string) error {
  // Logic to revert a specific release
  release, err := db.GetReleaseByID(releaseID)
  if err != nil {
    return err
  }

  if release.IsRolledBack {
    return errors.New("Release already reversed")
  }

  release.IsRolledBack = true
  err = db.UpdateRelease(release)
  if err != nil {
    return err
  }

  return nil
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;diagram of this architecture:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ue9ja51k8vj3iaxlcj9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ue9ja51k8vj3iaxlcj9.png" alt="Image description" width="720" height="429"&gt;&lt;/a&gt;&lt;br&gt;
🚀 These experiences have taught me that the fintech landscape requires adaptable and resilient architectures, incorporating the best tools and practices available. By embracing modular architectures, microservices, continuous delivery, and release management committees like GMUD, fintech companies can enhance security, scalability, and customer satisfaction. 💡🌍&lt;/p&gt;

&lt;p&gt;🤝 I’d love to connect and hear your thoughts on these insights. Share your own experiences and let’s discuss how we can tackle the challenges and shape the future of fintech together. Join me on this exciting journey! 💪💡&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Microservices Architecture in Golang: A Transformative Experience! 🚀</title>
      <dc:creator>Rafael Levi Costa</dc:creator>
      <pubDate>Wed, 17 Jan 2024 21:32:52 +0000</pubDate>
      <link>https://dev.to/rafaellevissa/microservices-architecture-in-golang-a-transformative-experience-g9n</link>
      <guid>https://dev.to/rafaellevissa/microservices-architecture-in-golang-a-transformative-experience-g9n</guid>
      <description>&lt;p&gt;&lt;em&gt;Introduction:&lt;/em&gt; As Steve Jobs, co-founder of Apple, once said, “Technology moves the world.” In this article, I will share my experience with microservices architecture in Golang and how it has revolutionized the way I build scalable and flexible systems. Through a solution implemented for a client, I will explore the concepts and technologies involved, providing valuable insights for those looking to adopt this architecture in their projects. Let’s embark on this journey of microservices empowered by Golang! 💡💻&lt;/p&gt;

&lt;p&gt;🌐 Building a REST API in Golang: As highlighted by Martin Fowler, a renowned author in the technology field, in his book “Patterns of Enterprise Application Architecture” “Software architecture is the fundamental organization of a system, embodying its key responsibilities and providing a skeleton for its implementation.” My journey started with building a REST API in Golang, leveraging its advanced concurrency and efficiency features. This API served as a service for the front-end, providing structured data from a MySQL database.&lt;/p&gt;

&lt;p&gt;example of code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package main

import (
 "fmt"
 "log"
 "net/http"
)

func main() {
 http.HandleFunc("/users", getUsersHandler)
 log.Fatal(http.ListenAndServe(":8080", nil))
}

func getUsersHandler(w http.ResponseWriter, r *http.Request) {
 // Handle GET request to fetch users from the database
 fmt.Fprintln(w, "Fetching users...")
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔒 Managing Sensitive Data: John Allspaw, a renowned author and software reliability expert, mentions in his book “The Art of Capacity Planning” the importance of protecting sensitive data. In the case of the system I developed, the MySQL database stored user information, including login details, access levels, and service history in a queue. These data were managed through a microservices architecture, where security was a priority. As part of this process, I implemented recommended practices for encryption and key management to ensure the confidentiality of user data.&lt;/p&gt;

&lt;p&gt;example of code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package main

import (
 "crypto/aes"
 "crypto/cipher"
 "crypto/rand"
 "encoding/base64"
 "fmt"
 "io"
)

func encryptData(data []byte, key []byte) ([]byte, error) {
 block, err := aes.NewCipher(key)
 if err != nil {
  return nil, err
 }

 encrypted := make([]byte, aes.BlockSize+len(data))
 iv := encrypted[:aes.BlockSize]
 if _, err := io.ReadFull(rand.Reader, iv); err != nil {
  return nil, err
 }

 stream := cipher.NewCFBEncrypter(block, iv)
 stream.XORKeyStream(encrypted[aes.BlockSize:], data)

 return encrypted, nil
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;💬 Using WebSockets for Real-Time Communication: “Effective communication is the key to any successful relationship” said Tony Hsieh, founder of Zappos. Inspired by this statement, I adopted WebSockets technology to provide real-time communication between the API and employees responsible for service handling. WebSockets enable bidirectional communication with support for real-time events. Events such as queue loading, changing service order, and removing a service were managed by the server using Golang’s native WebSocket library.&lt;/p&gt;

&lt;p&gt;example of code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package main

import (
 "log"
 "net/http"

 "github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{}

func handleWebSocket(w http.ResponseWriter, r *http.Request) {
 conn, err := upgrader.Upgrade(w, r, nil)
 if err != nil {
  log.Println("Failed to upgrade to WebSocket:", err)
  return
 }

 // Handle WebSocket communication and events
 // ...
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📊 Integrating Unstructured Data with Redis: To handle real-time unstructured data, I sought an agile and efficient solution. Event-Driven Microservices. When dealing with unstructured data, having an efficient caching storage layer is essential. Based on this principle, I integrated the Redis database into the microservices architecture, using it to store and manage data related to services. To ensure the security and efficiency of accessing Redis data, I developed a dedicated service called the Broker, which performed read, write, and delete operations in the Redis queue.&lt;/p&gt;

&lt;p&gt;example of code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package main

import (
 "fmt"

 "github.com/go-redis/redis"
)

func main() {
 redisClient := redis.NewClient(&amp;amp;redis.Options{
  Addr:     "localhost:6379",
  Password: "", // no password set
  DB:       0,  // use default DB
 })

 // Example of writing data to Redis
 err := redisClient.Set("key", "value", 0).Err()
 if err != nil {
  panic(err)
 }

 // Example of reading data from Redis
 val, err := redisClient.Get("key").Result()
 if err != nil {
  panic(err)
 }
 fmt.Println("key:", val)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📨 Asynchronous Communication with RabbitMQ: To retrieve service data from a messaging service, I chose RabbitMQ as the asynchronous interface. As stated by Gregor Hohpe, author of “Enterprise Integration Patterns” “Asynchronous communication is an efficient strategy for integrating distributed systems.” Through a service called the consumer, my system connected to RabbitMQ, captured, analyzed, and filtered service requests, forwarding them to the Broker for insertion into the Redis queue. Thus, I established efficient and reliable communication between microservices.&lt;/p&gt;

&lt;p&gt;example of code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package main

import (
 "log"
 "os"
 "os/signal"

 "github.com/streadway/amqp"
)

func main() {
 conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
 if err != nil {
  log.Fatalf("Failed to connect to RabbitMQ: %v", err)
 }
 defer conn.Close()

 ch, err := conn.Channel()
 if err != nil {
  log.Fatalf("Failed to open a channel: %v", err)
 }
 defer ch.Close()

 // Consume messages from RabbitMQ
 msgs, err := ch.Consume(
  "queue_name",
  "",
  true,
  false,
  false,
  false,
  nil,
 )
 if err != nil {
  log.Fatalf("Failed to register a consumer: %v", err)
 }

 forever := make(chan os.Signal, 1)
 signal.Notify(forever, os.Interrupt)

 // Process received messages
 go func() {
  for d := range msgs {
   log.Printf("Received a message: %s", d.Body)
   // Forward the message to the Broker for further processing
  }
 }()

 log.Println("Waiting for messages...")
 &amp;lt;-forever
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🚀 Enhancing Efficiency with gRPC: “Efficiency is never accidental,” said Elon Musk, founder of Tesla. Inspired by this vision, I opted to use gRPC for communication between microservices. As mentioned by Brendan Burns, one of the creators of Kubernetes, in “Designing Distributed Systems” “gRPC is a high-performance, data-interchange communication framework.” By adopting gRPC, I could accelerate communication between microservices, optimizing performance and efficiency, in contrast to the REST API used for serving the front-end.&lt;/p&gt;

&lt;p&gt;example of code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package main

import (
 "net/http"
 "net/http/httptest"
 "testing"
)

func TestGetUsersHandler(t *testing.T) {
 req, err := http.NewRequest("GET", "/users", nil)
 if err != nil {
  t.Fatal(err)
 }

 rr := httptest.NewRecorder()
 handler := http.HandlerFunc(getUsersHandler)

 handler.ServeHTTP(rr, req)

 if rr.Code != http.StatusOK {
  t.Errorf("Expected status code %v, but got %v", http.StatusOK, rr.Code)
 }

 expected := "Fetching users...\n"
 if rr.Body.String() != expected {
  t.Errorf("Expected response body %v, but got %v", expected, rr.Body.String())
 }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🔧 Managing Deployment Lifecycle with ArgoCD: As mentioned by Jez Humble and David Farley in “Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation” an automated deployment cycle is essential to ensure agility and reliability in software development. To manage the deployment lifecycle of services, I utilized ArgoCD. This tool monitored a repository containing YAML configuration files of the services, allowing for automatic deployment to a staging environment whenever a new version was detected.&lt;/p&gt;

&lt;p&gt;Here is an example of an ArgoCD Application manifest file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: my-namespace
spec:
  destination:
    namespace: my-namespace
    server: https://kubernetes.default.svc
  source:
    repoURL: https://github.com/my-repo
    targetRevision: main
    path: my-app
  project: my-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By defining the desired state of the application in the manifest file, ArgoCD automatically synchronized the deployment with the Kubernetes cluster, ensuring consistent and reliable application updates.&lt;/p&gt;

&lt;p&gt;⚙️ Infrastructure as Code with Kubernetes: In the era of cloud computing, managing infrastructure as code has become crucial. Kubernetes, an industry-leading container orchestration platform, allows for declarative management of infrastructure resources. By defining Kubernetes manifests, I could describe the desired state of the system, including deployments, services, ingress, and more.&lt;/p&gt;

&lt;p&gt;Here is an example of a Kubernetes Deployment manifest file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
  labels:
    app: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-registry/my-app:latest
        ports:
        - containerPort: 8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With Kubernetes, I could easily manage and scale microservices, ensuring high availability and fault tolerance.&lt;/p&gt;

&lt;p&gt;Diagram of architecture:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpu1dtvml83fziiyyk6zh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpu1dtvml83fziiyyk6zh.png" alt="Image description" width="720" height="518"&gt;&lt;/a&gt;&lt;br&gt;
References:&lt;/p&gt;

&lt;p&gt;Fowler, M. (2002). Patterns of Enterprise Application Architecture. Addison-Wesley Professional.&lt;br&gt;
Allspaw, J. (2017), The Art of Capacity Planning: Scaling Web Resources in the Cloud&lt;br&gt;
Gregor H. (2003) Enterprise Integration Patterns&lt;br&gt;
Farley, D.(2010) Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
