<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Engenharia De Software on Gilberto | GibaTech</title>
        <link>https://gibatech.dev/categories/engenharia-de-software/</link>
        <description>Recent content in Engenharia De Software on Gilberto | GibaTech</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>pt-br</language>
        <lastBuildDate>Thu, 03 Nov 2022 12:00:00 -0300</lastBuildDate><atom:link href="https://gibatech.dev/categories/engenharia-de-software/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>Frontend: Comece por aqui</title>
            <link>https://gibatech.dev/p/frontend-comece-por-aqui/</link>
            <pubDate>Thu, 03 Nov 2022 12:00:00 -0300</pubDate>
            <guid>https://gibatech.dev/p/frontend-comece-por-aqui/</guid>
            <description>&lt;p&gt;Se você está começando no mundo do desenvolvimento front-end e está procurando materiais, pode ficar confuso com a quantidade de nomenclaturas, tais como React, Next, Webpack, NPM, Yarn, Bootstrap e muitas outras. Realmente, há muitas tecnologias envolvidas nesse processo, mas esta página tem como objetivo esclarecer um pouco mais sobre cada uma delas.&lt;/p&gt;&#xA;&lt;p&gt;Assim como no desenvolvimento de backend, o front-end também está se tornando cada vez mais complexo e exigente. Para criar aplicações maiores e mais poderosas, pode ser necessário utilizar várias bibliotecas e frameworks, assim como no desenvolvimento de backend.&lt;/p&gt;&#xA;&lt;h3 id=&#34;ferramentas-de-build-build-tool&#34;&gt;Ferramentas de Build (Build Tool)&#xA;&lt;/h3&gt;&lt;p&gt;As ferramentas de build servem para facilitar a instalação de dependências, comandos necessários para testes, execução ou publicação, por exemplo. As soluções mais utilizadas são:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.npmjs.com/about-npm&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;NPM&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://classic.yarnpkg.com/lang/en/docs/getting-started/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;YARN&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://pnpm.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;PNPM&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Outros exemplos apenas a título de curiosidade são o &lt;a class=&#34;link&#34; href=&#34;https://bit.dev/docs/quick-start&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;BIT&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://gruntjs.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;GRUNT&lt;/a&gt; e o &lt;a class=&#34;link&#34; href=&#34;https://gulpjs.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;GULP&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;empacotador-module-bundler&#34;&gt;Empacotador (Module Bundler)&#xA;&lt;/h3&gt;&lt;p&gt;Além do processos de build em si, há algumas ferramentas mais especializadas para as ações de build, execução e publicação, como compactar recursos (como estilos e scripts), disponibilizar recursos estáticos, além de permitir a separação da aplicação em módulos. Algumas das ferramentas utilizas:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://webpack.js.org/concepts/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Webpack&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://vitejs.dev/guide/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Vite&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Outras ferramentas semelhantes: &lt;a class=&#34;link&#34; href=&#34;https://browserify.org/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Browserify&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://rollupjs.org/guide/en/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Rollup&lt;/a&gt; e o &lt;a class=&#34;link&#34; href=&#34;https://vercel.com/blog/turbopack&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Turbopack&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Comparando com o backend, no caso do mundo Java, não existe esse tipo de ferramenta pois essas ações normalmente são feitas pelo próprio Build Tool (Gradle/Maven)&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;frameworksbibliotecas-de-construção-de-interfaces&#34;&gt;Frameworks/Bibliotecas de Construção de Interfaces&#xA;&lt;/h3&gt;&lt;p&gt;Somente aqui vemos ferramentas como o &lt;em&gt;React&lt;/em&gt; aparecer. Como uma biblioteca de renderização de componentes para a web, ele funciona integrado ao código de forma a permitir a criação e renderização de páginas e partes da página de forma dinâmica e componentizada.&#xA;Ou seja, podemos ter uma aplicação com NPM+Webpack+React ou YARN+Browserify+React se assim quisermos.&lt;/p&gt;&#xA;&lt;p&gt;Vamos ver alguns dos frameworks e bibliotecas mais conhecidos:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://react.dev/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;React&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://angular.io/start&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Angular&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://vuejs.org/guide/introduction.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Vue.Js&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://guides.emberjs.com/release/getting-started/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Ember.Js&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://preactjs.com/guide/v10/getting-started&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Preact&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Você também pode desenvolver utilizando apenas JavaScript (chamado de VanilaJS).&lt;/p&gt;&#xA;&lt;h3 id=&#34;outras-bibliotecas-e-frameworks&#34;&gt;Outras bibliotecas e frameworks&#xA;&lt;/h3&gt;&lt;p&gt;Apenas para ajudar por onde começar, listamos alguns projetos interessantes que valem um estudo:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Componentes e plugins para criação de interfaces:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://getbootstrap.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Bootstrap&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://tailwindcss.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Tailwind CSS&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;http://flexboxgrid.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Flexbox Grid&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Entre &lt;a class=&#34;link&#34; href=&#34;https://classpert.com/pt-BR/blog/top-bootstrap-alternatives?&amp;amp;isredir&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;outros&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Para escrita de Testes:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://jestjs.io/pt-BR/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Jest&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/mochajs/mocha&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Mocha&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://jasmine.github.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Jasmine&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;ferramentas-tudo-em-um&#34;&gt;Ferramentas &amp;ldquo;tudo-em-um&amp;rdquo;&#xA;&lt;/h3&gt;&lt;p&gt;Há algumas ferramentas que se propôe a simplificar toda essa complexidade que é a criação e configuração dos projetos de frontend tornando a criação simples e auto-configurada.&lt;/p&gt;&#xA;&lt;p&gt;Destacamos essas que merecem atenção:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://vitejs.dev/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Vite&lt;/a&gt; - Ferramenta moderna e rápida para criar projetos React, Vue, Svelte e outros com suporte nativo a ES modules e Hot Module Replacement.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://nextjs.org&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;NextJS&lt;/a&gt; - Framework que traz todas as funcionalidades necessárias para uma aplicação React de forma auto-configurada, tanto para renderização no navegador, como código estático, quanto para renderização no servidor, com NodeJS.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://nuxtjs.org&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;NuxtJS&lt;/a&gt; - Abstração que também foca em simplicidade de configuração para aplicações VueJs.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;conclusão&#34;&gt;Conclusão&#xA;&lt;/h3&gt;&lt;p&gt;Espero que este material tenha te ajudado a entender um pouco mais sobre as ferramentas e siglas utilizadas no Frontend. Deixe seu comentário com sugestões ou contando sua experiência estudando Frontend :)&lt;/p&gt;&#xA;&lt;h3 id=&#34;outros-materiais&#34;&gt;Outros materiais&#xA;&lt;/h3&gt;&lt;h4 id=&#34;heading&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://gibatech.dev/&#34; &gt;&amp;raquo; Buscar no Guia&lt;/a&gt;&#xA;&lt;/h4&gt;&lt;h4 id=&#34;heading-1&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://gibatech.dev/tags&#34; &gt;&amp;raquo; Navegar por Tópicos&lt;/a&gt;&#xA;&lt;/h4&gt;</description>
        </item><item>
            <title>Backend: Comece por aqui</title>
            <link>https://gibatech.dev/p/backend-comece-por-aqui/</link>
            <pubDate>Thu, 03 Nov 2022 00:00:00 +0000</pubDate>
            <guid>https://gibatech.dev/p/backend-comece-por-aqui/</guid>
            <description>&lt;p&gt;O backend é a parte do sistema que trabalha em conjunto com o frontend, atuando como a &amp;ldquo;engrenagem&amp;rdquo; que executa as operações necessárias para obter, consolidar, processar e persistir informações. Toda vez que um usuário interage com o frontend, seja para obter informações ou salvar dados, o backend é acionado para executar essas tarefas.&lt;/p&gt;&#xA;&lt;p&gt;Assim, podemos dizer que o backend é responsável pelo processamento lógico do sistema, trabalhando em conjunto com o frontend para fornecer uma experiência completa e satisfatória para o usuário. É por meio do backend que os dados são armazenados, processados e transformados em informações úteis para o usuário.&lt;/p&gt;&#xA;&lt;h3 id=&#34;frameworks-java&#34;&gt;Frameworks Java&#xA;&lt;/h3&gt;&lt;p&gt;Ao falarmos especificamente sobre o desenvolvimento de backend, é importante mencionar o Java, que é uma das linguagens mais utilizadas para essa finalidade. Com o objetivo de facilitar a estruturação de projetos, configurações e integrações com outras ferramentas, é possível utilizar frameworks específicos para a linguagem.&lt;/p&gt;&#xA;&lt;p&gt;Os frameworks de Java oferecem uma série de funcionalidades e recursos que permitem aos desenvolvedores se concentrarem nas tarefas principais do projeto, reduzindo o tempo e o esforço gastos com tarefas secundárias. Além disso, esses frameworks também ajudam a manter um padrão de desenvolvimento consistente, facilitando a manutenção e a escalabilidade do projeto.&lt;/p&gt;&#xA;&lt;p&gt;Alguns dos frameworks mais utilizados são:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://gibatech.dev/p/spring-boot-o-que-%c3%a9-este-framework-para-desenvolvimento-java/&#34; &gt;Spring Boot&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://quarkus.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Quarkus&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://micronaut.io/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Micronaut&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;outros-frameworks-e-bibliotecas&#34;&gt;Outros frameworks e bibliotecas&#xA;&lt;/h3&gt;&lt;p&gt;Além da função primária dos frameworks, podemos ter alguns sub-frameworks e bibliotecas especializadas para realizar algumas integrações ou facilidades em nossos projetos. Por exemplo podemos citar:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://gibatech.dev/p/lombok-menos-c%c3%b3digo-repetitivo-e-mais-foco-nas-regras-de-neg%c3%b3cio/&#34; &gt;Lombok&lt;/a&gt; - Evita códigos repetitivos como acessores, construtores e métodos.&lt;/li&gt;&#xA;&lt;li&gt;MapStruct - Evita cópias repetitivas entre classes com atributos semelhantes.&lt;/li&gt;&#xA;&lt;li&gt;Hibernate - Persistência em bancos relacionais.&lt;/li&gt;&#xA;&lt;li&gt;JUnit 5 - Facilidades para execução de testes.&lt;/li&gt;&#xA;&lt;li&gt;Mockito - Isola dependências para execução de testes unitários.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://gibatech.dev/p/assertj-asser%c3%a7%c3%b5es-de-testes-de-forma-flu%c3%adda/&#34; &gt;AssertJ&lt;/a&gt; - Torna as asserções em testes de forma fluída.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;conclusão&#34;&gt;Conclusão&#xA;&lt;/h3&gt;&lt;p&gt;Espero que este material tenha te ajudado a entender um pouco mais sobre as ferramentas e siglas utilizadas no Backend. Deixe seu comentário com sugestões ou contando sua experiência estudando Java :)&lt;/p&gt;&#xA;&lt;h3 id=&#34;outros-materiais&#34;&gt;Outros materiais&#xA;&lt;/h3&gt;&lt;h4 id=&#34;heading&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://gibatech.dev/&#34; &gt;&amp;raquo; Buscar no Guia&lt;/a&gt;&#xA;&lt;/h4&gt;&lt;h4 id=&#34;heading-1&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://gibatech.dev/tags&#34; &gt;&amp;raquo; Navegar por Tópicos&lt;/a&gt;&#xA;&lt;/h4&gt;</description>
        </item><item>
            <title>React: Conheça esse famoso Framework para Desenvolvimento Web</title>
            <link>https://gibatech.dev/p/react-conhe%C3%A7a-esse-famoso-framework-para-desenvolvimento-web/</link>
            <pubDate>Fri, 29 Apr 2022 12:00:00 -0300</pubDate>
            <guid>https://gibatech.dev/p/react-conhe%C3%A7a-esse-famoso-framework-para-desenvolvimento-web/</guid>
            <description>&lt;p&gt;É uma biblioteca de renderização de componentes para a web que funciona integrado ao código de forma a permitir a criação e renderização de páginas e partes da página de forma dinâmica e componentizada.&lt;/p&gt;&#xA;&lt;h2 id=&#34;biblioteca-ou-framework&#34;&gt;Biblioteca ou Framework&#xA;&lt;/h2&gt;&lt;p&gt;Embora se autodenomine como uma biblioteca, podemos de certa forma considerá-lo um framework, pois ele molda a forma como que estruturamos boa parte da nossa aplicação como os componentes e páginas.&lt;/p&gt;&#xA;&lt;h2 id=&#34;alternativas&#34;&gt;Alternativas&#xA;&lt;/h2&gt;&lt;p&gt;Algumas das alternativas ao React são o &lt;a class=&#34;link&#34; href=&#34;https://angular.io/start&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Angular&lt;/a&gt;, &lt;a class=&#34;link&#34; href=&#34;https://vuejs.org/guide/introduction.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Vue.Js&lt;/a&gt; e &lt;a class=&#34;link&#34; href=&#34;https://guides.emberjs.com/release/getting-started/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Ember.Js&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Ainda, há um concorrente que promete ser semelhante e muito mais leve: o &lt;a class=&#34;link&#34; href=&#34;https://preactjs.com/guide/v10/getting-started&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Preact&lt;/a&gt;. Ficou curioso? Vale experimentar.&lt;/p&gt;&#xA;&lt;h2 id=&#34;onde-começar&#34;&gt;Onde começar&#xA;&lt;/h2&gt;&lt;p&gt;Atualmente a forma mais recomendada para iniciar um projeto React é usando &lt;strong&gt;Vite&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm create vite@latest meu-app -- --template react&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; meu-app&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm run dev&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;Outra alternativa é o &lt;strong&gt;Next.js&lt;/strong&gt; (framework full-stack baseado em React):&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx create-next-app@latest meu-app&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;Você pode também seguir o &lt;a class=&#34;link&#34; href=&#34;https://react.dev/learn&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;React: Getting Started&lt;/a&gt;, que possui versão em Português. Ou ver um dos vídeos a seguir:&lt;/p&gt;&#xA;&lt;h2 id=&#34;playlist&#34;&gt;Playlist&#xA;&lt;/h2&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.youtube.com/watch?v=FXqX7oof0I4&amp;amp;list=PLnDvRpP8BneyVA0SZ2okm-QBojomniQVO&amp;amp;index=1&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://www.youtube.com/watch?v=FXqX7oof0I4&amp;list=PLnDvRpP8BneyVA0SZ2okm-QBojomniQVO&amp;index=1&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;vídeo&#34;&gt;Vídeo&#xA;&lt;/h2&gt;&lt;div class=&#34;video-wrapper&#34;&gt;&#xA;    &lt;iframe loading=&#34;lazy&#34; &#xA;            src=&#34;https://www.youtube.com/embed/FXqX7oof0I4&#34; &#xA;            allowfullscreen &#xA;            title=&#34;YouTube Video&#34;&#xA;    &gt;&#xA;    &lt;/iframe&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h3 id=&#34;conclusão&#34;&gt;Conclusão&#xA;&lt;/h3&gt;&lt;p&gt;Espero que este material tenha te ajudado a entender um pouco mais sobre o React e o motivo de ser tão popular. Deixe seu comentário com sugestões ou contando sua experiência estudando Frontend :)&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>WebAssembly: A promessa de futuro do desenvolvimento Web</title>
            <link>https://gibatech.dev/p/webassembly-a-promessa-de-futuro-do-desenvolvimento-web/</link>
            <pubDate>Fri, 08 Apr 2022 20:00:00 -0300</pubDate>
            <guid>https://gibatech.dev/p/webassembly-a-promessa-de-futuro-do-desenvolvimento-web/</guid>
            <description>&lt;h2 id=&#34;o-que-é&#34;&gt;O que é?&#xA;&lt;/h2&gt;&lt;p&gt;WebAssembly (Wasm) é um formato binário e uma linguagem de baixo nível projetada para permitir a execução de código de alta performance na web e em outros ambientes. Ele oferece uma alternativa ao JavaScript, permitindo que os desenvolvedores escrevam código em linguagens como C++, Rust, etc., que é então compilado para WebAssembly. Ele é suportado por todos os principais navegadores e oferece vantagens como maior desempenho e acesso direto a recursos de hardware.&lt;/p&gt;&#xA;&lt;h2 id=&#34;características&#34;&gt;Características:&#xA;&lt;/h2&gt;&lt;h3 id=&#34;eficiente-e-rápido&#34;&gt;Eficiente e rápido:&#xA;&lt;/h3&gt;&lt;p&gt;O WebAssembly é codificado de forma eficiente em um formato binário, visando a execução nativa rápida, aproveitando as capacidades de hardware comuns.&lt;/p&gt;&#xA;&lt;h3 id=&#34;seguro&#34;&gt;Seguro:&#xA;&lt;/h3&gt;&lt;p&gt;O ambiente de execução do WebAssembly é protegido e isolado, garantindo segurança de memória e respeitando as políticas de segurança do navegador.&lt;/p&gt;&#xA;&lt;h3 id=&#34;aberto-e-passível-de-depuração&#34;&gt;Aberto e passível de depuração:&#xA;&lt;/h3&gt;&lt;p&gt;O WebAssembly pode ser apresentado em formato textual para fins de depuração, teste, otimização e escrita manual de programas, facilitando a compreensão e a manutenção.&lt;/p&gt;&#xA;&lt;h3 id=&#34;parte-da-plataforma-web-aberta&#34;&gt;Parte da plataforma web aberta:&#xA;&lt;/h3&gt;&lt;p&gt;O WebAssembly foi projetado para ser integrado à web como uma extensão, permitindo chamadas entre JavaScript e WebAssembly. Além disso prevê o acesso às mesmas APIs de navegador, mantendo a compatibilidade com versões anteriores.&lt;/p&gt;&#xA;&lt;h2 id=&#34;especificação&#34;&gt;Especificação:&#xA;&lt;/h2&gt;&lt;p&gt;A especificação do Webassembly é composta pelos seguintes itens:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Especificação principal&lt;/strong&gt;: define a semântica dos módulos WebAssembly independentemente de uma incorporação concreta. O núcleo do WebAssembly é especificado em um único documento. &lt;a class=&#34;link&#34; href=&#34;https://webassembly.github.io/spec/core/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://webassembly.github.io/spec/core/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Especificação das Interfaces:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;API JavaScript&lt;/strong&gt;: define classes e objetos JavaScript para acessar o WebAssembly de dentro do JavaScript, incluindo métodos para validação, compilação, instanciação, e classes para representar e manipular importações e exportações como objetos JavaScript. &lt;a class=&#34;link&#34; href=&#34;https://webassembly.github.io/spec/js-api/index.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://webassembly.github.io/spec/js-api/index.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;API Web&lt;/strong&gt;: define extensões para a API JavaScript disponibilizadas especificamente em navegadores da web, em particular, uma interface para compilação e instanciação de streaming a partir de tipos de Resposta associados à origem. &lt;a class=&#34;link&#34; href=&#34;https://webassembly.github.io/spec/js-api/index.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://webassembly.github.io/spec/js-api/index.html&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;API WASI&lt;/strong&gt;: define uma interface de sistema modular para executar o WebAssembly fora da web, fornecendo acesso a coisas como arquivos, conexões de rede, relógios e números aleatórios. &lt;a class=&#34;link&#34; href=&#34;https://github.com/WebAssembly/WASI/blob/main/Proposals.md&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://github.com/WebAssembly/WASI/blob/main/Proposals.md&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Convenções de ferramentas:&lt;/strong&gt; repositório descrevendo convenções não padrão úteis para coordenar a interoperabilidade entre ferramentas que trabalham com o WebAssembly. Isso inclui convenções para esquemas de ligação, informações de depuração, ABIs de linguagem e mais. &lt;a class=&#34;link&#34; href=&#34;https://github.com/WebAssembly/tool-conventions&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://github.com/WebAssembly/tool-conventions&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Documentos de design:&lt;/strong&gt; documentos que descrevem o design, objetivos e visão geral de alto nível do WebAssembly. Alguns desses documentos estão desatualizados atualmente. &lt;a class=&#34;link&#34; href=&#34;https://github.com/WebAssembly/design&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://github.com/WebAssembly/design&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;suporte-dos-navegadores&#34;&gt;Suporte dos Navegadores:&#xA;&lt;/h2&gt;&lt;p&gt;Há um bom suporte, mas ainda existem itens pendentes em diversas implementações. Confira a lista atualizada aqui:&#xA;&lt;a class=&#34;link&#34; href=&#34;https://webassembly.org/features/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://webassembly.org/features/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;quais-as-vantagens-em-relação-ao-javascript&#34;&gt;Quais as vantagens em relação ao Javascript?&#xA;&lt;/h2&gt;&lt;p&gt;Embora ainda não esteja amplamente em uso, ele possui algumas várias vantagens que podem ser consideradas:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Desempenho&lt;/strong&gt;: O WebAssembly é projetado para oferecer desempenho próximo ao nativo, o que significa que os aplicativos podem ser executados mais rapidamente na web, especialmente aqueles que requerem computação intensiva.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Portabilidade&lt;/strong&gt;: O código em WebAssembly pode ser executado em uma variedade de ambientes, não apenas em navegadores web, mas também em servidores e dispositivos embarcados, aumentando a portabilidade das aplicações.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Segurança&lt;/strong&gt;: O modelo de execução do WebAssembly é projetado para ser seguro, oferecendo um ambiente de execução isolado que protege contra ataques maliciosos.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Compatibilidade&lt;/strong&gt;: O WebAssembly foi projetado para ser compatível com a web existente, permitindo que os aplicativos interajam facilmente com o JavaScript e a infraestrutura da web, além de suportar chamadas para e de APIs do navegador.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Ampla adoção&lt;/strong&gt;: O WebAssembly é suportado por todos os principais navegadores, o que significa que os desenvolvedores podem contar com sua disponibilidade em uma ampla gama de plataformas.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Linguagem de programação&lt;/strong&gt;: O WebAssembly permite que os desenvolvedores usem uma variedade de linguagens de programação, incluindo C, C++, Rust e outras, em vez de se limitarem ao JavaScript, proporcionando flexibilidade na escolha da linguagem mais adequada para cada aplicativo.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Essas vantagens fazem do WebAssembly uma opção interessante para o desenvolvimento de aplicativos web que exigem alto desempenho, portabilidade e segurança.&lt;/p&gt;&#xA;&lt;h2 id=&#34;e-desvantagens-temos&#34;&gt;E desvantagens, temos?&#xA;&lt;/h2&gt;&lt;p&gt;Claro, sempre há dois lados e é importante avaliar cada uma delas quando projetar um sistema. Aqui listamos algumas das desvantagens do WebAssembly hoje:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Complexidade de desenvolvimento&lt;/strong&gt;: O processo pode ser mais complexo devido à necessidade de lidar com ferramentas de compilação e otimização para diferentes linguagens de programação.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Debugging e Ferramentas de Desenvolvimento&lt;/strong&gt;: Depurar e usar ferramentas de desenvolvimento pode ser mais desafiador e menos maduras do que aquelas disponíveis para JavaScript.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tamanho dos arquivos&lt;/strong&gt;: Arquivos WebAssembly tendem a ser maiores que equivalentes em JavaScript, resultando em tempos de carregamento mais longos.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Curva de Aprendizado&lt;/strong&gt;: Pode haver uma curva de aprendizado para desenvolvedores que estão acostumados apenas com JavaScript.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Compatibilidade com Navegadores Antigos&lt;/strong&gt;: Pode haver problemas de compatibilidade com versões mais antigas dos navegadores, especialmente ao utilizar recursos mais recentes do WebAssembly.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Em resumo, o WebAssembly apresenta promessas significativas, oferecendo desempenho próximo ao nativo, portabilidade e segurança para aplicativos web. No entanto, sua complexidade de desenvolvimento, desafios de compatibilidade com navegadores mais antigos e potenciais questões de tamanho de arquivo podem representar obstáculos para os desenvolvedores.&lt;/p&gt;&#xA;&lt;p&gt;Desde 2022, o Wasm tem ganhado tração consistente: é usado em edge computing (Cloudflare Workers, Fastly), aplicações de código aberto como o SQLite e até em substituição ao Docker em alguns cenários com WASI. A adoção cresce, mas o JavaScript (e TypeScript) ainda dominam o desenvolvimento web tradicional. Wasm se consolidou como uma alternativa poderosa para cenários específicos de alta performance, não como substituto geral do ecossistema JavaScript.&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Criando sistemas legados com o framework da moda</title>
            <link>https://gibatech.dev/p/criando-sistemas-legados-com-o-framework-da-moda/</link>
            <pubDate>Sun, 22 Nov 2020 00:00:00 +0000</pubDate>
            <guid>https://gibatech.dev/p/criando-sistemas-legados-com-o-framework-da-moda/</guid>
            <description>&lt;p&gt;Não é um assunto necessariamente recente, porém restam controvérsias e, sem dúvidas, ainda cabe uma opinião.&lt;/p&gt;&#xA;&lt;p&gt;Legados não são ruins. Ruins são as gambiarras, a ausência de testes e de boas práticas de desenvolvimento. Colocar a mesma equipe que desastrosamente sustenta um legado para criar uma nova API fresquinha, com o último framework da moda é potencializar as chances de criação de código ruim, frequentemente chamado de legado.&lt;/p&gt;&#xA;&lt;p&gt;Também incorro no erro de chamar de construção de novos legados quando vejo códigos escritos de qualquer forma. Mas é força do hábito. Muitas vezes pensei que a solução para melhorar um software era reescrevê-lo, não por convicção própria, pois muitas vezes o CTO da empresa ou o arquiteto induziram a equipe a pensar desta forma. Fato é que essa abordagem nunca resolveu o problema inicial. Meses após o início das migrações sempre parece haver um &amp;ldquo;novo legado&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;E o que acontece ao tentar escrever um novo software com os mesmos vícios de programação? Temos dois softwares ruins para manter, com a mesma equipe que já não aguenta manter o legado. Óbvio que é tentador explorar novos frameworks e linguagens. E o ganho de velocidade realmente surpreende nas primeiras Sprints pois, obviamente, ainda não está uma bagunça completa: ela vem com o tempo. A situação ainda é agravada com os microsserviços e com a criação de novas APIs de forma desenfreada e sem qualidade.&lt;/p&gt;&#xA;&lt;p&gt;O problema é colocado sobre o sistema, mas na verdade deveria ser sobre a sua forma de manutenção. Não há uma atenção especial à qualidade e melhoria contínua, haja vista que o foco é criar os entregáveis e fazer as peças funcionarem a todo custo. Há uma pressão clara de entrega e isso faz parte do negócio, mas os desenvolvedores devem contrapor isso com seus pontos técnicos ao longo das Sprints.&lt;/p&gt;&#xA;&lt;p&gt;A equipe de desenvolvimento deve continuamente levantar débitos, ajustar desvios e executar pequenas refatorações. Estas não deveriam exigir um Sprint dedicado apenas a débitos técnicos de tempos em tempos, mas sim pequenas tarefas dentro de cada Estória, melhorando continuamente o código e a arquitetura. Olhar com a visão de escoteiro, melhorando pouco a pouco cada classe alterada irá dar uma sustentabilidade muito maior ao sistema, deixando mais fácil adicionar novas features.&lt;/p&gt;&#xA;&lt;p&gt;E se o framework ficar defasado? Inseguro? Precisar ser escalado? Bem, se o software foi bem cuidado pode ser planejada uma estratégia de migração ou fracionamento. As classes de negócio poderão ser reaproveitadas, se mantida a linguagem, mas as demais provavelmente terão de ser reescritas. Será doloroso, contudo a migração será mais curta e garante foco total em apenas uma aplicação, sem legados.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;em&gt;Publicado também na comunidade DEV! Vá lá e comente :)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;a class=&#34;link&#34; href=&#34;https://dev.to/gilbertolptn/criando-sistemas-legados-com-o-framework-da-moda-5gcj&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://dev.to/gilbertolptn/criando-sistemas-legados-com-o-framework-da-moda-5gcj&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Você está organizando e nomeando seu código corretamente?</title>
            <link>https://gibatech.dev/p/voc%C3%AA-est%C3%A1-organizando-e-nomeando-seu-c%C3%B3digo-corretamente/</link>
            <pubDate>Tue, 21 Apr 2020 00:00:00 +0000</pubDate>
            <guid>https://gibatech.dev/p/voc%C3%AA-est%C3%A1-organizando-e-nomeando-seu-c%C3%B3digo-corretamente/</guid>
            <description>&lt;p&gt;Fala-se sobre &lt;em&gt;Código Limpo&lt;/em&gt; há algum tempo, sobre funcionalidades que melhoram a legibilidade do código e bibliotecas que agilizam e deixam o código menor e, às vezes, melhor. Mas há questões bem mais fundamentais que não podem ser esquecidas ou despriorizadas em relação àqueles assuntos mais populares, entre eles, a nomenclatura de tudo o que está sendo escrito.&lt;/p&gt;&#xA;&lt;p&gt;Quando precisamos realizar alterações em um sistema já desenvolvido, mas desconhecido, temos a necessidade de avaliar, como um todo, quais são suas funcionalidades. Certas vezes nem mesmo é desconhecido, mas trabalhado há alguns meses e com detalhes específicos de arquitetura para relembrar. Esse sistema provavelmente está em produção e quebrar algo em funcionamento não é uma possibilidade.&lt;/p&gt;&#xA;&lt;p&gt;Num primeiro momento pouco importam as bibliotecas utilizadas, a versão da linguagem ou mesmo detalhes do ambiente de execução. A primeira coisa que devemos observar no sistema para saber  qual é o seu domínio de negócio são suas classes e pacotes. Depois, olhamos para seus atributos e métodos, a fim de entender os recursos que cada parte do domínio tem. Em terceiro, analisamos os testes, que irão dizer como os recursos devem se comportar. Somente após isso, pode-se passar aos detalhes da tecnologia, versões, ambientes e bibliotecas.&lt;/p&gt;&#xA;&lt;p&gt;Guarde esta ordem:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Classes e seus pacotes&lt;/li&gt;&#xA;&lt;li&gt;Atributos e Métodos&lt;/li&gt;&#xA;&lt;li&gt;Testes&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Numa aplicação em que não puder ser obtida uma visão geral seguindo os passos mencionados, certamente não é orientada a objetos, mesmo que use uma linguagem dita como &lt;em&gt;OO&lt;/em&gt;. Não conhece Orientação a Objetos mas está lendo este artigo? Que bom, é um ótimo começo!&lt;/p&gt;&#xA;&lt;h3 id=&#34;por-que-os-pacotes-estão-no-primeiro-item&#34;&gt;Por que os pacotes estão no primeiro item?&#xA;&lt;/h3&gt;&lt;p&gt;Os pacotes estão juntos às classes para sustentá-las. Pouco importa ter um pacote se não existir uma classe dentro deste. Porém, caso seja ignorada a sua importância, deixando as classes mal distribuídas, tornará muito difícil encontrar a sua localização. Sem falar que se o sistema crescer, irá virar uma bagunça.&lt;/p&gt;&#xA;&lt;p&gt;Há quem considere a divisão dos pacotes a parte mais simples, afirmando que são sempre os mesmos: &lt;em&gt;entidade&lt;/em&gt;, &lt;em&gt;serviço&lt;/em&gt;, &lt;em&gt;dao&lt;/em&gt;, &lt;em&gt;util&lt;/em&gt;, &lt;em&gt;rest&lt;/em&gt;&amp;hellip; Outros discordarão com veemência dizendo que preferem &lt;em&gt;repositorio&lt;/em&gt; à &lt;em&gt;dao&lt;/em&gt; e &lt;em&gt;controlador&lt;/em&gt; à &lt;em&gt;rest&lt;/em&gt;. Algum deles está correto? De certa forma, sim. Esta quebra por camadas  é muito utilizada, e comum para quem está começando a trabalhar com &lt;a class=&#34;link&#34; href=&#34;https://tableless.com.br/mvc-afinal-e-o-que&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;MVC&lt;/a&gt;. É uma abordagem sem grandes dúvidas: em pouco tempo está definida para toda a vida do projeto e o restante do tempo fica com a codificação.&lt;/p&gt;&#xA;&lt;p&gt;Agora, trago a verdade sobre os pacotes. Essa divisão simples por camadas é como colocar uma caixa escrito &amp;ldquo;gavetas&amp;rdquo; na sua garagem e juntar todas as gavetas da casa ali dentro: gavetas da cozinha, do guarda-roupas, do armário de produtos de limpeza. Faz sentido? Claro, deixamos todas as gavetas, que possuem a mesma finalidade juntas, não é verdade? Mas na prática isso tem pouco sentido, principalmente em sistemas maiores, onde temos dezenas de classes na mesma camada. Por que faríamos diferente com o nosso software? Faz muito mais sentido deixar coisas onde realmente são utilizadas do que juntá-las no mesmo local.&lt;/p&gt;&#xA;&lt;p&gt;Mas como seria essa organização? Seguindo o mesmo exemplo, pense nos cômodos da casa como pacotes e nos compartimentos dos cômodos como subpacotes. Dentro deles estarão as ferramentas ou utensílios, ou seja, as classes. Então:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Cozinha&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Armário&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Gaveta&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Talheres&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Balcão&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Fogão&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Sala&lt;/li&gt;&#xA;&lt;li&gt;Quarto&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Guarda-roupas&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Gaveta&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Meias&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Não achou que poderia organizar sua casa em pacotes, subpacotes e classes? Pois é. A orientação a objetos é a melhor forma pra isso, trazer abstrações do mundo real para dentro de um sistema, de forma que se alguém pedir para adicionar uma funcionalidade de &amp;ldquo;bancada&amp;rdquo; no armário da cozinha, saberemos exatamente onde criar o pacote e suas classes. Não é uma forma fácil e vai gerar muitas dúvidas, mas fica mais próximo da realidade, o que é bom para a Orientação a Objetos.&lt;/p&gt;&#xA;&lt;h3 id=&#34;certo-e-as-classes&#34;&gt;Certo&amp;hellip; E as classes?&#xA;&lt;/h3&gt;&lt;p&gt;Pois bem, já definimos os pacotes e agora podemos pensar de fato nas classes. Utilizando a abordagem de divisão por lógica que vimos a pouco, sabemos que devemos deixar as classes relacionadas próximas. Dentre estas, as mais importantes do nosso sistema são àquelas do &lt;strong&gt;domínio do negócio&lt;/strong&gt;, as quais contém características, estado e ações. Classes como &lt;em&gt;Aluno&lt;/em&gt;, &lt;em&gt;Turma&lt;/em&gt;, &lt;em&gt;Cliente&lt;/em&gt;, &lt;em&gt;Animal&lt;/em&gt;, &lt;em&gt;Pagamento&lt;/em&gt; são exemplos disso.&lt;/p&gt;&#xA;&lt;p&gt;Essas classes do &lt;strong&gt;domínio do negócio&lt;/strong&gt;, conhecidas como &lt;strong&gt;modelo&lt;/strong&gt;,   também podem se tornar &lt;strong&gt;entidades&lt;/strong&gt;, se forem relacionadas a um banco de dados. Eventualmente estas entidades precisam ser listadas, criadas, apagadas ou atualizadas, sendo que neste caso delegamos a uma classe de persistência, normalmente chamada de &lt;em&gt;repositório&lt;/em&gt; ou &lt;a class=&#34;link&#34; href=&#34;https://www.devmedia.com.br/dao-pattern-persistencia-de-dados-utilizando-o-padrao-dao/30999&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;&lt;em&gt;dao&lt;/em&gt;&lt;/a&gt;. Além da própria entidade e seu &lt;em&gt;repositório&lt;/em&gt;, ainda é comum o uso de uma classe onde as regras de negócio entre diferentes entidades são relacionadas, chamadas de &lt;em&gt;serviço&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Assim, temos três classes intrinsecamente relacionadas: a Entidade, seu Repositório e seu Serviço. Com muita dificuldade conseguiremos separá-las, razão pela qual devem permanecer no mesmo pacote.&lt;/p&gt;&#xA;&lt;p&gt;Ainda, as classes de Serviço podem vir a ficar sobrecarregadas devido à quantidade de regras e operações que algumas entidades tem. Logo, para melhorar a manutenção deste código, devem ser decompostas em classes específicas, reduzindo a complexidade e organizando as responsabilidades. Por exemplo, em um sistema de Petshop, poderíamos ter um pacote &lt;em&gt;animal&lt;/em&gt;, com as classes &lt;em&gt;Animal&lt;/em&gt;, &lt;em&gt;AnimalRepositorio&lt;/em&gt;, &lt;em&gt;AnimalService&lt;/em&gt;, &lt;em&gt;AnimalAlimentacaoServico&lt;/em&gt;e &lt;em&gt;AnimalSaudeServico&lt;/em&gt;. Isso, considerando que a &amp;ldquo;alimentação&amp;rdquo; e &amp;ldquo;saúde&amp;rdquo; dos animais possuem muitas regras que justifiquem a divisão. O uso da nomenclatura em inglês também é comum, contudo não é relevante para este artigo, desde que você adote um padrão: &lt;em&gt;service&lt;/em&gt; e &lt;em&gt;repository&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;só-estas-classes-compõe-uma-aplicação&#34;&gt;Só estas classes compõe uma aplicação?&#xA;&lt;/h3&gt;&lt;p&gt;De fato não conseguimos fazer todo o necessário somente com estas classes, pois nossos modelos quase sempre precisam conversar com o mundo externo. Para isso, serão necessários Controllers, Clientes de APIs, Filas, etc. Essas classes fazem parte de uma aplicação, mas não são parte do &amp;ldquo;negócio&amp;rdquo;, então considere separar esses recursos tecnológicos em algum pacote específico como &lt;em&gt;api&lt;/em&gt;, &lt;em&gt;infra&lt;/em&gt;, &lt;em&gt;cliente&lt;/em&gt;, etc&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Além disso, precisamos de utilitários que nos ajudam a manter a abstração dentro de nossos modelos, e também são aceitos. Eles normalmente são conhecidos como &lt;em&gt;Builders&lt;/em&gt;, &lt;em&gt;Factories&lt;/em&gt;, &lt;em&gt;Converters&lt;/em&gt;, &lt;em&gt;Mappers&lt;/em&gt;, etc. Mas pense que o objetivo destes é simplificar a lógica das classes de negócio, apenas isso.&lt;/p&gt;&#xA;&lt;h3 id=&#34;ok-organizamos-nosso-negócio-em-pacotes-e-classes-mas-onde-de-fato-ficam-nossas-regras-e-informações&#34;&gt;Ok, organizamos nosso negócio em pacotes e classes, mas onde de fato ficam nossas regras e informações?&#xA;&lt;/h3&gt;&lt;p&gt;Nesse momento entram os atributos de nossas classes para armazenar as informações, características e estado. E os métodos para realizar as ações, mudanças de estado e validações. Da mesma forma que os pacotes e classes devem ser precisamente pensados para dar sentido à nossa organização.&lt;/p&gt;&#xA;&lt;p&gt;Os atributos devem  parecer com características ou estado. Devem fazer sentido para o negócio e não conter prefixos ou sufixos tecnológicos que não ajudam na abstração. Ou seja, prefira &amp;ldquo;tamanho&amp;rdquo; à &amp;ldquo;nroTamanho&amp;rdquo;, por exemplo.&lt;/p&gt;&#xA;&lt;p&gt;Quanto aos métodos, também devem parecer ações do negócio e mudança de estado e, ainda, evitar prefixos e sufixos que não auxiliam na compreensão do negócio. Caso sejam necessárias conversões, cópia de objetos ou quaisquer outras ações que não fazem parte do comportamento natural do negócio, considere criar as classes que citamos anteriormente, como &lt;em&gt;Converters&lt;/em&gt;, &lt;em&gt;Mappers&lt;/em&gt;, &lt;em&gt;Builders&lt;/em&gt;, &lt;em&gt;Factories&lt;/em&gt;&amp;hellip;&lt;/p&gt;&#xA;&lt;h3 id=&#34;testes&#34;&gt;Testes?!&#xA;&lt;/h3&gt;&lt;p&gt;Bem, como último dentre os itens citados, mas não menos relevante, temos os testes. Sua posição deve-se unicamente pela ordem natural de entender a visão geral da arquitetura, o contexto de cada uma das funcionalidades e aí sim adentrar nos detalhes da implementação.&lt;/p&gt;&#xA;&lt;p&gt;Chegada esta etapa podemos interpretar de fato o que o sistema poderia e deveria fazer, e os testes são bons para nos contar isso: além dos cenários principais os testes nos mostram os secundários e os de exceção, com a reação prevista do software quando nem tudo sai conforme gostaríamos. Esse tipo de informação é difícil de extrair de alguns códigos de produção ou implícitos em outros, mas os testes tendem a deixá-los explícitos, o que facilita o trabalho de manutenção.&lt;/p&gt;&#xA;&lt;p&gt;Encerra-se por aqui a discussão? Com certeza não! Existem diversas abordagens de organização e arquitetura. Aqui trago uma visão subjetiva do que considero importante após alguns anos de programação, objetivando que seja dada maior ênfase à abstração do negócio, que é o motivador para a criação dos sistemas, em vez da tecnologia, bibliotecas e termos que afastam o propósito real do código.&lt;/p&gt;&#xA;&lt;p&gt;Também não foi o objetivo falar especificamente sobre uma ou outra arquitetura, mas há muito material disponível. Se você ficou motivado, considere pesquisar sobre &lt;a class=&#34;link&#34; href=&#34;https://www.google.com/search?q=arquitetura&amp;#43;DDD&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;DDD&lt;/a&gt; e &lt;a class=&#34;link&#34; href=&#34;https://www.google.com/search?q=Arquitetura&amp;#43;Hexagonal&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;Arquitetura Hexagonal&lt;/a&gt;.&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>Linux: Comandos úteis de rede</title>
            <link>https://gibatech.dev/p/linux-comandos-%C3%BAteis-de-rede/</link>
            <pubDate>Sun, 12 Apr 2020 00:00:00 +0000</pubDate>
            <guid>https://gibatech.dev/p/linux-comandos-%C3%BAteis-de-rede/</guid>
            <description>&lt;p&gt;Este é um guia de comando úteis para utilização em ambiente Linux. São basicamente minhas notas de aula utilizadas durante os treinamentos que ministrava, mas podem ser úteis em vários contextos.&lt;/p&gt;&#xA;&lt;h1 id=&#34;rede&#34;&gt;Rede&#xA;&lt;/h1&gt;&lt;h3 id=&#34;arquivos-e-pastas-importantes&#34;&gt;Arquivos e pastas importantes:&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;/etc/syconfig/network-scripts/&lt;/li&gt;&#xA;&lt;li&gt;/etc/hosts&lt;/li&gt;&#xA;&lt;li&gt;/etc/host.conf&lt;/li&gt;&#xA;&lt;li&gt;/etc/resolv.conf&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;comandos&#34;&gt;Comandos&#xA;&lt;/h3&gt;&lt;ul&gt;&#xA;&lt;li&gt;dhClient: Autoconfiguração de rede. Se você estiver em uma máquina sem internet e precisar de uma configuração automática e rápida, tente este comando.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;/etc/rc.d/init.d/network stop&lt;/code&gt; ou &lt;code&gt;start&lt;/code&gt;: Para ou inicia um serviço de sistema. Este é específico para sistemas Linux que usam o InitD. Isto vem mudando a bastante tempo principalmente para o SystemD, e pode ser que tenha de rodar &lt;code&gt;systemctl start networking.service&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;route -n&lt;/code&gt;: Lista a tabela de roteamento de rede configurada. Da mesma forma, pode funcionar com &lt;code&gt;netstat -r&lt;/code&gt; OU &lt;code&gt;cat /proc/net/route&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;dig site.com.br&lt;/code&gt;: Consulta o servidor DNS configurado no arquivo &lt;code&gt;resolv.conf&lt;/code&gt; exibindo suas configurações.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item><item>
            <title>Automação de Build</title>
            <link>https://gibatech.dev/p/automa%C3%A7%C3%A3o-de-build/</link>
            <pubDate>Sun, 29 Mar 2020 00:00:00 +0000</pubDate>
            <guid>https://gibatech.dev/p/automa%C3%A7%C3%A3o-de-build/</guid>
            <description>&lt;h2 id=&#34;introdução&#34;&gt;Introdução&#xA;&lt;/h2&gt;&lt;p&gt;Neste tópico vamos falar sobre as ferramentas que normalmente são utilizadas em aplicações Java para tarefas rotineiras de build, como compilação, testes e cobertura, empacotamento, publicação&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;As mais conhecidas ferramentas para esta finalidade são o Gradle e o Maven.&lt;/p&gt;&#xA;&lt;h2 id=&#34;glossário&#34;&gt;Glossário&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Artefato:&lt;/strong&gt; no contexto deste artigo, para o Java, um Artefato corresponde a uma biblioteca que é compilada a partir de outro projeto Java, resultando um arquivo de extensão JAR.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Classpath:&lt;/strong&gt; no contexto deste artigo, para o Java, o classpath é o conjunto de recursos necessários para a execução da aplicação. Compoe esse classpath a próprias classes Java, resources, dependências (bibliotecas), etc.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;por-que-utilizar-uma-ferramenta&#34;&gt;Por que utilizar uma ferramenta?&#xA;&lt;/h2&gt;&lt;p&gt;Para quem está iniciando no Java, esta é uma pergunta clássica. Não basta aprender o Java, ainda tenho que aprender Maven ou Gradle? A resposta é: SIM. Não é algo que você precise se tornar especialista, mas é importante que conheça seu uso básico para não seguir caminhos complexos nos pontos que estas ferramentas resolvem com facilidade:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Gestão de dependências:&lt;/strong&gt; O motivo principal para usar uma dessas ferramentas. Nada de baixar arquivos JAR e colocar em uma pasta LIB, ok? Basta declarar o &lt;em&gt;Artefato&lt;/em&gt; no Maven/Gradle e deixar que ele baixe e adicione o mesmo ao &lt;em&gt;Classpath&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Garantia de versionamento&lt;/strong&gt; Todos os artefatos gerados ou dependências que nosso projeto terá serão necessariamente versionados. E uma determinada versão não deve ser regerada, gerando uma garantia que nosso código sempre utilizará a versão testada das dependências.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;gradle&#34;&gt;Gradle&#xA;&lt;/h2&gt;&lt;p&gt;O Gradle é a ferramenta de build mais moderna do ecossistema Java, usando uma DSL baseada em Groovy ou Kotlin. Arquivo de configuração: &lt;code&gt;build.gradle&lt;/code&gt; (ou &lt;code&gt;build.gradle.kts&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-groovy&#34; data-lang=&#34;groovy&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;plugins&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;id&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;java&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;repositories&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;mavenCentral&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;dependencies&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;implementation&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;org.springframework.boot:spring-boot-starter-web:3.2.0&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;testImplementation&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;org.junit.jupiter:junit-jupiter:5.10.0&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;Comandos principais:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;./gradlew build&lt;/code&gt; — compila, roda testes e empacota&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;./gradlew test&lt;/code&gt; — executa os testes&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;./gradlew bootRun&lt;/code&gt; — executa a aplicação Spring Boot&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;maven&#34;&gt;Maven&#xA;&lt;/h2&gt;&lt;p&gt;O Maven é a ferramenta mais tradicional, usando XML para configuração. Arquivo de configuração: &lt;code&gt;pom.xml&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;project&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;modelVersion&amp;gt;&lt;/span&gt;4.0.0&lt;span class=&#34;nt&#34;&gt;&amp;lt;/modelVersion&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;com.exemplo&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;meu-app&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.0.0&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependencies&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span class=&#34;nt&#34;&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-starter-web&lt;span class=&#34;nt&#34;&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nt&#34;&gt;&amp;lt;version&amp;gt;&lt;/span&gt;3.2.0&lt;span class=&#34;nt&#34;&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;lt;/dependencies&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;&amp;lt;/project&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;Comandos principais:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;mvn clean install&lt;/code&gt; — compila, roda testes e empacota&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mvn test&lt;/code&gt; — executa os testes&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;mvn spring-boot:run&lt;/code&gt; — executa a aplicação Spring Boot&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;conclusão&#34;&gt;Conclusão&#xA;&lt;/h2&gt;&lt;p&gt;Tanto Gradle quanto Maven resolvem bem o problema de gestão de dependências e automação de build. O Gradle é mais moderno e flexível; o Maven é mais previsível e amplamente documentado. A escolha depende do seu projeto e equipe.&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
