<?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: Leila Farias</title>
    <description>The latest articles on DEV Community by Leila Farias (@leilasoliveira).</description>
    <link>https://dev.to/leilasoliveira</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%2F342237%2F5b81d74d-0942-4b37-ab1c-00f9deda28d0.jpg</url>
      <title>DEV Community: Leila Farias</title>
      <link>https://dev.to/leilasoliveira</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/leilasoliveira"/>
    <language>en</language>
    <item>
      <title>Leitura de e-mails com JavaMail</title>
      <dc:creator>Leila Farias</dc:creator>
      <pubDate>Tue, 30 Nov 2021 19:02:51 +0000</pubDate>
      <link>https://dev.to/leilasoliveira/leitura-de-e-mails-com-javamail-e-testes-com-mockito-492n</link>
      <guid>https://dev.to/leilasoliveira/leitura-de-e-mails-com-javamail-e-testes-com-mockito-492n</guid>
      <description>&lt;p&gt;Surgiu aqui na empresa a necessidade de automatizar a leitura da caixa de entrada, de tempos em tempos, de um endereço XPTO e que apenas os novos e-mails fossem processados.&lt;/p&gt;

&lt;p&gt;O foco deste artigo é mostrar como eu fiz a leitura da caixa de entrada usando JavaMail. O projeto completo está disponível no meu &lt;a href="https://github.com/leilasoliveira/email-verifier" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; no meu GitHub e explicarei em artigos futuros as outras tecnologias envolvidas no projeto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Estrutura do projeto final
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnemrv2uy62ohgu8vmvtp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnemrv2uy62ohgu8vmvtp.png" alt="Estrutura de pacotes do projeto"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Antes de irmos direto ao assunto deste artigo, queria explicar como ficou o projeto final.&lt;/p&gt;

&lt;p&gt;O projeto final ficou com a estrutura de pacotes acima, mas não comecei o projeto assim não! Primeiro, criei uma classe de serviço para testar a funcionalidade e só depois de pronto e minimamente testado, fiz a organização de código (tentando colocar em prática os ensinamentos do Uncle Bob).&lt;/p&gt;

&lt;p&gt;Considerei como um Util a classe que faz a leitura dos e-mails. Criei um service para incluir a annotation de agendamento do Spring. No pacote &lt;code&gt;com.example.emailverifier.model.vo&lt;/code&gt; coloquei um Bean para retornar objetos do tipo EmailVO com o assunto, corpo do e-mail e endereço de quem enviou o e-mail. No pacote &lt;code&gt;com.example.emailverifier.configuration&lt;/code&gt;, criei uma classe que representa as properties que o Spring lê ao iniciar a aplicação. Essas properties configurei como variáveis de ambiente no Intellij e são o usuário e senha de acesso à caixa de entrada que deve ser lida.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dependências
&lt;/h3&gt;

&lt;p&gt;Abaixo, vão algumas dependências que incluí para a leitura de mensagens.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 gradle
// JavaMail
implementation group: 'javax.mail', name: 'mail', version: '1.4.1'

// Lombok
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'



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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Código fonte
&lt;/h3&gt;

&lt;p&gt;No meu caso específico, trabalhei com o protocolo IMAP que é responsável pelo recebimento dos e-mails. Usei ele por causa do requisito de ler somente e-mails novos, então teria que marcar quem foi processado como lido. POP3 não dispõe desta funcionalidade. Tem um artigo interessante que explica a diferença entre os protocolos IMAP, POP3 e SMTP &lt;a href="https://king.host/blog/2018/02/o-que-e-smtp-imap-e-pop-3-e-qual-a-diferenca/" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;
  
  
  Classe EmailVerifierUtil.java
&lt;/h4&gt;

&lt;p&gt;No pacote &lt;code&gt;com.example.emailverifier.utils&lt;/code&gt;, criei a classe &lt;code&gt;EmailVerifierUtils.java&lt;/code&gt; que implementa a leitura da caixa de entrada a partir do método público &lt;code&gt;getNewMessages()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Este método possui 3 linhas importantes:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 java
connectEmail();
inbox = getFolder(FOLDER_INBOX);
List&amp;lt;EmailVO&amp;gt; emailVOS = readMessagesFromFolder(inbox);


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

&lt;/div&gt;

&lt;p&gt;A primeira linha, chama o método &lt;code&gt;connectEmail&lt;/code&gt; que faz exatamente isso: obtém a instância padrão de uma sessão de e-mail a partir de algumas propriedades (que no meu caso, não tem); cria uma &lt;code&gt;Store&lt;/code&gt; a partir da sessão, de acordo com o protocolo IMAP e; finalmente faz a conexão com essa Store passando as credenciais, host e porta.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 java
private void connectEmail() throws MessagingException {
        Session emailSession = Session.getDefaultInstance(new Properties());

        imapStore = (IMAPStore) emailSession.getStore(IMAP_PROTOCOL);
        imapStore.connect(HOST, PORT, emailCredentials.getUsername(), emailCredentials.getPassword());
    }


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

&lt;/div&gt;

&lt;p&gt;O método &lt;code&gt;getFolder&lt;/code&gt; recebe o nome da pasta que queremos ler e usa a instância Store criada anteriormente para obter uma instância de &lt;code&gt;Folder&lt;/code&gt; e abrir no modo desejado: &lt;code&gt;READ_WRITE&lt;/code&gt; ou  &lt;code&gt;READ_ONLY&lt;/code&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 java
private Folder getFolder(String folderName) throws MessagingException {
        Folder inbox = imapStore.getFolder(folderName);

        if (inbox != null) inbox.open(Folder.READ_WRITE);

        return inbox;
    }


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

&lt;/div&gt;

&lt;p&gt;Com e-mail conetado e pasta prontinha para ser lida, vamos para o método &lt;code&gt;readMessagesFromFolder&lt;/code&gt; ler as mensagens. Passamos a instância de &lt;code&gt;Folder&lt;/code&gt;, checamos se ela existe e depois obtemos as mensagens não lidas por meio do método &lt;code&gt;getUnseenMessages&lt;/code&gt; que retorna um array de objetos Message. Após isso, percorremos este array e criamos objetos do tipo EmailVO para retornar ao service bonitinho: com o endereço remetente, assunto e conteúdo do e-mail. É neste ponto que adicionamos uma flag à mensagem para que ela seja considerada lida.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 java
private List&amp;lt;EmailVO&amp;gt; readMessagesFromFolder(Folder folder) throws MessagingException, IOException {
        if (folder == null) {
            logger.info("No folder found.");
            return null;
        }

        Message[] messages = getUnseenMessages(folder);

        if (messages.length == 0) logger.info("No messages found.");

        List&amp;lt;EmailVO&amp;gt; emails = new ArrayList&amp;lt;&amp;gt;();
        for (Message message : messages) {
            Address[] from = message.getFrom();

            emails.add(EmailVO.builder()
                    .from(((InternetAddress) from[0]).getAddress())
                    .subject(message.getSubject())
                    .content(message.getContent().toString())
                    .build());

            message.setFlag(Flags.Flag.SEEN, true);
        }

        return emails;
    }


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

&lt;/div&gt;

&lt;p&gt;No &lt;code&gt;finally&lt;/code&gt; do método &lt;code&gt;getNewMessages&lt;/code&gt;, encerramos as conexões com a pasta Inbox e com a caixa de entrada.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ATENÇÃO!&lt;/strong&gt; Para executar o projeto, precisamos configurar as variáveis de ambiente &lt;code&gt;email.username&lt;/code&gt; e &lt;code&gt;email.password&lt;/code&gt; com as credenciais do e-mail.&lt;/p&gt;

&lt;p&gt;Rodando o projeto via Intellij, temos sucesso! :D&lt;/p&gt;

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

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _{% raw %}` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.6.1)

2021-12-01 18:11:12.869  INFO 87412 --- [           main] c.e.e.EmailVerifierApplication           : Starting EmailVerifierApplication using Java 15.0.2 on leila-note with PID 87412 (/home/leila/projetos/pocs/email-verifier/build/classes/java/main started by leila in /home/leila/projetos/pocs/email-verifier)
2021-12-01 18:11:12.870  INFO 87412 --- [           main] c.e.e.EmailVerifierApplication           : No active profile set, falling back to default profiles: default
2021-12-01 18:11:13.296  INFO 87412 --- [           main] c.e.e.EmailVerifierApplication           : Started EmailVerifierApplication in 0.747 seconds (JVM running for 0.995)
2021-12-01 18:11:30.001  INFO 87412 --- [   scheduling-1] c.e.e.utils.EmailVerifierUtil            : Verifying new messages inbox...
2021-12-01 18:11:33.341  INFO 87412 --- [   scheduling-1] c.e.e.utils.EmailVerifierUtil            : No messages found.
2021-12-01 18:11:33.341  INFO 87412 --- [   scheduling-1] c.e.e.utils.EmailVerifierUtil            : Success on verifying new messages inbox!
2021-12-01 18:11:33.628  INFO 87412 --- [   scheduling-1] c.e.emailverifier.service.EmailService   : Found 0 new message(s)!
2021-12-01 18:12:00.000  INFO 87412 --- [   scheduling-1] c.e.e.utils.EmailVerifierUtil            : Verifying new messages inbox...
2021-12-01 18:12:01.930  INFO 87412 --- [   scheduling-1] c.e.e.utils.EmailVerifierUtil            : Success on verifying new messages inbox!
2021-12-01 18:12:02.213  INFO 87412 --- [   scheduling-1] c.e.emailverifier.service.EmailService   : Found 1 new message(s)!
```

Bem tranquilo, né? Só que não! XD
Percorri alguns sites, tutoriais, posts do Stackoverflow para chegar neste resultado que FUNCIONA.

Portanto, caso você também precise fazer algo parecido com isso, **SALVE** este artigo, fique à vontade para copiar, modificar e melhorar o código aqui apresentado.

Como falei no início do artigo, farei mais alguns explicando as tecnologias que utilizei no projeto, tais como o agendamento de tarefas com Spring Boot e Junit com Mockito para os testes. 

Curtiu?
O que poderia melhorar?
Tem algum termo/assunto que deseja ler por aqui? Me conta!

Até a próxima! :)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>java</category>
      <category>tutorial</category>
      <category>spring</category>
    </item>
    <item>
      <title>Criando menu de contexto para apps Android</title>
      <dc:creator>Leila Farias</dc:creator>
      <pubDate>Sat, 18 Sep 2021 14:30:31 +0000</pubDate>
      <link>https://dev.to/leilasoliveira/criando-menu-de-contexto-para-apps-android-mej</link>
      <guid>https://dev.to/leilasoliveira/criando-menu-de-contexto-para-apps-android-mej</guid>
      <description>&lt;p&gt;Tutorial pá-pum pra você criar menus de contexto no Android, usando Java:&lt;/p&gt;

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

&lt;h4&gt;
  
  
  Crie o resource file menu.xml na pasta menu
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&lt;br&gt;
 xml&lt;br&gt;
&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br&gt;
&amp;lt;menu xmlns:app="&lt;a href="http://schemas.android.com/apk/res-auto" rel="noopener noreferrer"&gt;http://schemas.android.com/apk/res-auto&lt;/a&gt;"&lt;br&gt;
   xmlns:android="&lt;a href="http://schemas.android.com/apk/res/android" rel="noopener noreferrer"&gt;http://schemas.android.com/apk/res/android&lt;/a&gt;"&amp;gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;amp;lt;item android:id="@+id/refresh_page"
    android:title="Refresh"
    app:showAsAction="always" /&amp;amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&amp;lt;/menu&amp;gt;&lt;/p&gt;

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

&lt;/div&gt;
&lt;h4&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Adicione o menu à activity&lt;br&gt;
&lt;/h4&gt;
&lt;br&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&lt;br&gt;
 java&lt;br&gt;
    @Override&lt;br&gt;
    public boolean onCreateOptionsMenu(Menu menu) {&lt;br&gt;
        MenuInflater inflater = getMenuInflater();&lt;br&gt;
        inflater.inflate(R.menu.menu, menu);&lt;br&gt;
        return true;&lt;br&gt;
    }

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

&lt;/div&gt;
&lt;h4&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Adicione ação aos botões do menu&lt;br&gt;
&lt;/h4&gt;
&lt;br&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&lt;br&gt;
 java&lt;br&gt;
    @Override&lt;br&gt;
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {&lt;br&gt;
        switch (item.getItemId()) {&lt;br&gt;
            case R.id.refresh_page:&lt;br&gt;
                refreshPage();&lt;br&gt;
                return true;&lt;br&gt;
            default:&lt;br&gt;
                return super.onOptionsItemSelected(item);&lt;br&gt;
        }&lt;br&gt;
    }

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

&lt;/div&gt;
&lt;h3&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Referências&lt;br&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/guide/topics/ui/menus?hl=pt-br" rel="noopener noreferrer"&gt;Documentação Android Developers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>android</category>
      <category>java</category>
    </item>
    <item>
      <title>Injeção de dependências com Spring e Lombok</title>
      <dc:creator>Leila Farias</dc:creator>
      <pubDate>Thu, 09 Sep 2021 18:39:41 +0000</pubDate>
      <link>https://dev.to/leilasoliveira/injecao-de-dependencias-com-spring-e-lombok-akd</link>
      <guid>https://dev.to/leilasoliveira/injecao-de-dependencias-com-spring-e-lombok-akd</guid>
      <description>&lt;p&gt;Já conhecemos algumas formas de injetar objetos numa classe, dentro de um projeto Spring, como anotar com @Autowired um atributo da classe ou um construtor.&lt;/p&gt;

&lt;p&gt;Porém, recentemente, aprendi mais 2 formas interessantes que eliminam parte do código fonte, que vou mostrar a seguir, ambas usando Lombok.&lt;/p&gt;

&lt;h3&gt;
  
  
  1ª forma: @AllArgsConstructor
&lt;/h3&gt;

&lt;p&gt;O Lombok possui a annotation &lt;code&gt;AllArgsConstructor&lt;/code&gt; que cria um construtor com todos os atributos da classe. Porém, usando o atributo da annotation &lt;code&gt;onConstructor&lt;/code&gt;, permite você especificar qual annotation deve ser incluída no construtor gerado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@RestController&lt;/span&gt;
&lt;span class="nd"&gt;@AllArgsConstructor&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;onConstructor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nd"&gt;@__&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nd"&gt;@Autowired&lt;/span&gt;&lt;span class="o"&gt;))&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserController&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;UserService&lt;/span&gt; &lt;span class="n"&gt;userService&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="nc"&gt;Profession&lt;/span&gt; &lt;span class="n"&gt;professionService&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="cm"&gt;/*
     * Ao invés de usar assim:
     *
     * @Autowired
     * private UserService userService;
     *
     * @Autowired
     * private Profession professionService;
     *
    */&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2ª forma: @RequiredArgsConstructor
&lt;/h3&gt;

&lt;p&gt;Basta anotar a classe com a annotation &lt;code&gt;@RequiredArgsConstructor&lt;/code&gt;, que cria um construtor com todos os atributos final da classe. Assim, o Spring injeta pra gente as dependências obrigatórias.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@RestController&lt;/span&gt;
&lt;span class="nd"&gt;@RequiredArgsConstructor&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UserController&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;

    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;UserService&lt;/span&gt; &lt;span class="n"&gt;userService&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;Profession&lt;/span&gt; &lt;span class="n"&gt;professionService&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="cm"&gt;/*
     * Ao invés de usar assim:
     *
     * @Autowired
     * private UserService userService;
     *
     * @Autowired
     * private Profession professionService;
     *
    */&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Lembrete!
&lt;/h3&gt;

&lt;p&gt;Criar construtores em classes abstratas te obriga a criar construtores nas classes filhas chamando o construtor da classe mãe.&lt;/p&gt;

&lt;h3&gt;
  
  
  Referências
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://projectlombok.org/api/lombok/AllArgsConstructor.html" rel="noopener noreferrer"&gt;Lombok (AllArgsConstructor)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://projectlombok.org/api/lombok/RequiredArgsConstructor.html" rel="noopener noreferrer"&gt;Lombok (RequiredArgsConstructor)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.baeldung.com/spring-injection-lombok" rel="noopener noreferrer"&gt;Baeldung&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>spring</category>
      <category>springboot</category>
      <category>java</category>
      <category>lombok</category>
    </item>
    <item>
      <title>Código Limpo by Uncle Bob</title>
      <dc:creator>Leila Farias</dc:creator>
      <pubDate>Fri, 30 Jul 2021 15:09:41 +0000</pubDate>
      <link>https://dev.to/leilasoliveira/codigo-limpo-by-uncle-bob-2e9m</link>
      <guid>https://dev.to/leilasoliveira/codigo-limpo-by-uncle-bob-2e9m</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;"Foi visitar um amigo? Antes de sair da casa dele, deixe a casa mais limpa do que ela estava quando chegou."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Essa é a lição que tiro sobre o primeiro capítulo introdutório do livro Código Limpo (Clean Code) do Robert C. Martin, ou &lt;em&gt;Uncle Bob&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Antes de finalizar aquela tarefa sob algum código que o amiguinho fez (ou você mesmo desenvolveu há algum tempo), veja o que pode ser melhorado. O nome de uma variável, de um método, quebrar um método gigante em métodos menores, etc, são pequenas coisas que podem ser feitas para manter o código limpo e atualizado.&lt;/p&gt;

&lt;p&gt;O mais legal é que eu costumava fazer isso e me sentir culpada por achar que estava fazendo algo que não devia (porque não estava no escopo). Ponto pra mim!&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>cleancode</category>
      <category>dica</category>
      <category>java</category>
    </item>
    <item>
      <title>Aprenda a negociar seu salário!</title>
      <dc:creator>Leila Farias</dc:creator>
      <pubDate>Fri, 10 Apr 2020 13:43:23 +0000</pubDate>
      <link>https://dev.to/leilasoliveira/aprenda-a-negociar-seu-salario-34i5</link>
      <guid>https://dev.to/leilasoliveira/aprenda-a-negociar-seu-salario-34i5</guid>
      <description>&lt;p&gt;Escrito especialmente para o &lt;a class="mentioned-user" href="https://dev.to/elasprogramam"&gt;@elasprogramam&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ô coisa chata é falar de dinheiro, não é verdade?&lt;/p&gt;

&lt;p&gt;É por pensamentos assim que temos dificuldade em organizar nossa vida financeira. Porque gostamos de gastar, mas (algumas de nós) odiamos pechinchar, negociar.&lt;/p&gt;

&lt;p&gt;Minha mãe é daquelas que deixa qualquer filho constrangido na loja ao pedir PELOAMORDEDEUS pra dar um desconto. Porque se a resposta é NÃO, ela sai da loja reclamando na cara do vendedor, não tá nem aí (desculpa minha mãe, vendedores). 😝&lt;/p&gt;

&lt;p&gt;Cresci sentindo vergonha de pedir desconto e isso me fez chegar a ter um saldo negativo na minha conta bancária de mais de &lt;strong&gt;2K&lt;/strong&gt;   no meu primeiro emprego na área de TI. Eu ganhava pouco mais de 1 salário mínimo e meio na época e o que eu queria era gastar e gastar e tinha fé que no mês que vem eu conseguiria pagar. Parece pouco, mas na época eu me sentia rica ganhando esse salário! 😆&lt;/p&gt;

&lt;p&gt;Vou pro final dessa história: com a ajuda dos meus pais (foi mais um pedido de socorro mesmo 😅), eu zerei esse saldo e nunca mais me enfiei nessa roubada (eu aprendi a lição, tem gente que não aprende).&lt;/p&gt;

&lt;p&gt;Porquê estou contando essa história?&lt;/p&gt;

&lt;p&gt;Porque, além de estudar muito pra ser uma boa desenvolvedora e se virar com as demandas que te passarem, você precisa saber lidar com seu dinheiro 💵. E lidar com seu dinheiro, significa que às vezes, você vai precisar negociar 💸. E você precisa entender seu estilo de vida pra isso.&lt;/p&gt;

&lt;p&gt;Neste artigo, vou falar um pouco sobre negociação de salário. Um verdadeiro tabu entre as mulheres e até ano passado era um tabu pra mim também.&lt;/p&gt;

&lt;p&gt;Eu sempre me preocupei com a relação &lt;em&gt;nível técnico X salário&lt;/em&gt;. Vivia pesquisando o salário médio entre um nível e outro e aí, nas entrevistas de emprego, sempre pedia um valor bem abaixo do que eu deveria ganhar.&lt;/p&gt;

&lt;p&gt;Por exemplo: um desenvolvedor Java Júnior, em média, ganhava 4K/mês. Quando comecei a fazer minhas primeiras entrevistas pra finalmente trabalhar com desenvolvimento, eu pedia metade desse valor, por achar que, por eu não ter experiência registrada em carteira, deveria ganhar menos. E lá fui eu, finalmente ser uma desenvolvedora Java Junior ganhando uma merreca, mas "era justo", eu pensava. 😕&lt;/p&gt;

&lt;p&gt;Aí, saí da empresa com, mais ou menos, 2 anos de experiência. Já me considerava Pleno? &lt;em&gt;Nãããããão&lt;/em&gt;. Ainda acreditava que não tinha experiência suficiente pra aumentar o nível técnico, porém queria aumentar o salário, porque convenhamos, 2K não dá pra nada, né? 😅&lt;/p&gt;

&lt;p&gt;E lá fui eu pedir os 4k/mês na outra entrevista. E olha, toparam pagar: Dev Java Júnior recebendo 4k. Na mesma hora em que soube da aprovação pra vaga, me informaram que a empresa trabalhava com CLT Flex (uma parte do que você pediu como pretensão salarial vai para o registro em carteira e outra parte é convertida em benefícios). Aceitei na hora, mas não me liguei nas desvantagens.&lt;/p&gt;

&lt;p&gt;Casei no mesmo ano. 💒 Durante a licença nojo (nome pra licença de casamento que, pela Convenção Coletiva do Sindpd é de 5 dias), não recebi os benefícios como VR e VT. A empresa não pagava benefícios em caso de licença (mas os benefícios não eram parte do salário negociado durante entrevista? 😫).&lt;/p&gt;

&lt;p&gt;Depois, fiquei grávida ❤️ e aí o salário já era miúdo demais pra esse projeto tão grande 👪.&lt;/p&gt;

&lt;p&gt;Fiquei um tempo afastada do trabalho e ano passado, fui convidada a voltar ao cliente anterior, porém, através de outra consultoria.&lt;/p&gt;

&lt;p&gt;Meu marido falou assim: "Vai pedir um salário que você merece dessa vez, né?" 😂&lt;/p&gt;

&lt;p&gt;Fui com a cara e a coragem (fingi que era minha mãe 😂), falei o que eu queria receber sem me justificar. Não importava mais meu nível técnico. Queria corrigir os erros que tinha cometido no passado por não acreditar em mim, no meu merecimento.&lt;/p&gt;

&lt;p&gt;E deu certo! 🙌🙌🙌&lt;/p&gt;

&lt;p&gt;Não, não pense que estou ganhando rios de dinheiro ("ah, a Leila ficou rica!", dizem). Fui fria e avaliei algumas coisas que precisava e que gostaria de fazer daqui alguns anos, investimentos em educação pra mim e pro meu filho, sonhos, desejos (afinal de contas, ganhamos salário pra quê mesmo? 💸💸💸).&lt;/p&gt;

&lt;p&gt;A dica que eu dou é: não se prenda ao que o mercado está pedindo. Use como base, mas converse com pessoas do meio pra ter uma ideia. Ninguém vai te contar o próprio salário, mas podem te dar umas dicas de quanto a empresa paga. 😉&lt;/p&gt;

&lt;p&gt;Outra coisa: se você acha que está trabalhando com coisas que talvez um nível técnico acima também faz, tá mais do que na hora de pedir um aumento (ou sondar o mercado pra novos desafios). 😉&lt;/p&gt;

</description>
      <category>developer</category>
      <category>beginners</category>
      <category>career</category>
      <category>junior</category>
    </item>
    <item>
      <title>Carta para uma desenvolvedora iniciante desesperada</title>
      <dc:creator>Leila Farias</dc:creator>
      <pubDate>Sat, 14 Mar 2020 13:27:03 +0000</pubDate>
      <link>https://dev.to/leilasoliveira/carta-para-uma-desenvolvedora-iniciante-desesperada-434n</link>
      <guid>https://dev.to/leilasoliveira/carta-para-uma-desenvolvedora-iniciante-desesperada-434n</guid>
      <description>&lt;p&gt;Oi amiga dev, tudo bem?&lt;/p&gt;

&lt;p&gt;Hoje, venho falar de um sentimento chato que acompanha qualquer pessoa que está flertando com a área de desenvolvimento: o que estudar, que caminho seguir? &lt;/p&gt;

&lt;p&gt;Quando entrei na faculdade de Sistemas de Informação em 2010, eu sabia que queria trabalhar com análise de sistemas, mas não sabia bem o que significava esse trabalho.&lt;/p&gt;

&lt;p&gt;O primeiro semestre foi horrível, teoria, teoria, teoria, não entendia nada, ou melhor, nada fazia sentido e ainda tinha um tal de Pascal que me tirava do sério.&lt;/p&gt;

&lt;p&gt;No segundo semestre, tive aulas de programação com linguagem C e a coisa foi piorando... Depois tive mais aulas de estruturas de dados, pesquisa e ordenação em C e comecei a reavaliar meu interesse na área de desenvolvimento (eu literalmente odiava programação). &lt;/p&gt;

&lt;p&gt;Comecei a trabalhar no suporte técnico e a saída era estudar assuntos da área de infra (antes de desistir de vez da área), comecei a ler livros e etc.&lt;/p&gt;

&lt;p&gt;Até que um convite para participar de um projeto de iniciação científica em Java apareceu e aí me desafiei e me apaixonei pela linguagem que hoje me permite comprar o pão de cada dia.&lt;/p&gt;

&lt;p&gt;As incertezas não pararam por aí. Até aquele momento, eu mal tinha tempo pra estudar e não sabia como estudar já que não teríamos a disciplina de Java no curso. Seguindo dicas de amigos e professores, fui estudando conforme dava, quase mudei de linguagem de programação, mas Java já me dava um prazer e um conforto que nenhuma outra dava. Mesmo assim, aprendi a programar em VB.net e fiz alguns projetos pro trabalho que ainda era de suporte, que ajudou muito na administração dos laboratórios de informática (fazia suporte técnico nos Labs da mesma facul que estudei). &lt;/p&gt;

&lt;p&gt;O feedback foi tão bom, me senti deixando um legado, que me motivou a tentar fazer algo em Java. E eu tinha uma ideia de sistema e resolvi desenvolver sozinha. &lt;/p&gt;

&lt;p&gt;Aprendi muito sobre JavaEE, Hibernate, MySql, HTML e CSS... Bati muito a cabeça com uma série de erros de sistema, arquitetura, testes, coisas que depois de um tempo fui entendendo os porquês e como não passar por eles novamente. Mas ainda não me sentia capaz de sair pegando projeto sozinha, até porque, queria viver a experiência de fazer parte de uma equipe de desenvolvimento verdade.&lt;/p&gt;

&lt;p&gt;Como foi difícil. Nenhuma empresa queria alguém sem experiência em carteira. Mesmo fazendo projetos pessoais. &lt;/p&gt;

&lt;p&gt;Me formei em 2013 e segui com os estudos em casa, até que uma empresa decidiu apostar em mim e finalmente entrei para o mundo dev.&lt;/p&gt;

&lt;p&gt;Não terminei o projeto que iniciei, nem tenho mais o código fonte (não faça isso amiga, github tá aí pra isso). Depois descobri o github e o bitbucket e tenho alguns códigos lá.&lt;/p&gt;

&lt;p&gt;Mas veja essa trajetória. Tive muitas incertezas no caminho. Nem te conto que depois me aventurei no desenvolvimento de apps pra Android também (fica pra outro artigo). Mas estou te contando pra você entender que CADA UM VAI ENCONTRAR SEU CAMINHO, basta você APROVEITAR AS OPORTUNIDADES.&lt;/p&gt;

&lt;p&gt;Por mais que eu tenha aprendido outras linguagens de programação, essa experiência foi fundamental para desenvolver o raciocínio lógico para programar.&lt;/p&gt;

&lt;p&gt;Pra você que tá iniciando no desenvolvimento, a dica é aproveitar as oportunidades e praticar, praticar, praticar. Mesmo que depois você não vá usar aquele código pra nada.&lt;/p&gt;

&lt;p&gt;Quando fui pro mercado, as empresas estavam começando a entender que o que vale não é a experiência em carteira, são os problemas que você sabe resolver. Hoje, as empresas querem ver seu github, querer saber se você tem confiança em resolver problemas e se, caso não souber determinada tecnologia, qual é a sua capacidade de aprendizado e de lidar com a pressão.&lt;/p&gt;

&lt;p&gt;Reúna o máximo de experiências que puder, faça cursos em linguagens de programação que o mercado mais pede ou que você tem curiosidade e depois avalie o que te deu mais PRAZER em trabalhar. Porque isso tem que ser divertido e te ajudar a pagar as contas.&lt;/p&gt;

</description>
      <category>java</category>
      <category>career</category>
      <category>junior</category>
      <category>developer</category>
    </item>
    <item>
      <title>Materiais de apoio para desenvolvimento Java</title>
      <dc:creator>Leila Farias</dc:creator>
      <pubDate>Fri, 06 Mar 2020 12:31:35 +0000</pubDate>
      <link>https://dev.to/leilasoliveira/materiais-de-apoio-para-desenvolvimento-java-4jd8</link>
      <guid>https://dev.to/leilasoliveira/materiais-de-apoio-para-desenvolvimento-java-4jd8</guid>
      <description>&lt;p&gt;Escrito por &lt;a href="https://github.com/leilasoliveira" rel="noopener noreferrer"&gt;Leila Farias&lt;/a&gt; especialmente para &lt;a class="mentioned-user" href="https://dev.to/elasprogramam"&gt;@elasprogramam&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Olá, meninas!&lt;/p&gt;

&lt;p&gt;Prometi um artigo com uma lista de materiais para estudar Java e cá estou eu para cumprir a missão. 😄&lt;/p&gt;

&lt;p&gt;Quando comecei a programar em Java, eu fucei a internet atrás de material de apoio, conteúdos gratuitos para iniciantes e me apeguei a alguns materiais que hoje, infelizmente, não estão mais disponíveis.  😩&lt;/p&gt;

&lt;p&gt;Porém, fiz uma listinha de alguns locais onde você pode dar seu start pra depois, seguir a minha dica do primeiro post (&lt;a href="[https://dev.to/leilasoliveira/como-comecar-a-estudar-java-omh](https://dev.to/leilasoliveira/como-comecar-a-estudar-java-omh)"&gt;clica aqui pra ver a dica&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Então, bora pra lista!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://docs.oracle.com/javase/tutorial/" rel="noopener noreferrer"&gt;Documentação oficial da Oracle&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Claro que esse material é o primeiro da lista. A Oracle é a responsável pela manutenção da linguagem Java e ela disponibiliza todo material possível sobre a linguagem. Muito bom para quem está iniciando e para quem está revendo conceitos para fazer a prova de certificação (falarei sobre isso nos próximos posts). &lt;em&gt;Conteúdo em inglês&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.alura.com.br/artigos/programacao" rel="noopener noreferrer"&gt;Alura&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Artigos free de Java e outros assuntos de tecnologia. Eles também disponibilizam cursos básicos de Java, mediante pagamento. &lt;em&gt;Conteúdo em português&lt;/em&gt; 🙌.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.schoolofnet.com/cursos/programacao/java/" rel="noopener noreferrer"&gt;School of Net&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Alguns dos seus vários cursos são gratuitos, mas precisa de cadastro para acessar. &lt;em&gt;Conteúdo em português&lt;/em&gt; 🙌.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.baeldung.com/java-tutorial" rel="noopener noreferrer"&gt;Baeldung &lt;/a&gt;&lt;/strong&gt;&lt;br&gt;
Esse site reúne uma série de tutoriais de Java e Spring! Vira e mexe, quando tenho alguma dúvida, caio nesse blog com tutoriais práticos e ajuda muito no dia-a-dia. Essa dica vale para todos os níveis técnicos. &lt;em&gt;Conteúdo em inglês&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;**&lt;em&gt;**Dica bônus: &lt;a href="https://www.hackerrank.com/" rel="noopener noreferrer"&gt;HackerRank&lt;/a&gt;&lt;/em&gt;*&lt;br&gt;
Descobri esse site por acaso e ele é muito legal porque você consegue praticar vááááários conceitos de programação Java (e de outras linguagens de programação) e ainda te coloca num ranking de usuários que conseguiram responder às questões de cada assunto. Para cada assunto há um texto contextualizando o problema a ser solucionado e embaixo há um editor de texto onde você coda e pode rodar alguns testes prontos antes de enviar sua resposta. Depois que você envia seu código de resposta, o site roda vários testes em cima do seu código e te dá um feedback sobre o resultado. Vale muito a pena conhecer para complementar os estudos. Há também uma aba de discussão sobre cada exercício onde a comunidade discute as questões, sanando dúvidas inclusive. Conteúdo em inglês.&lt;/p&gt;

&lt;p&gt;Já viu que o inglês é importante, né? Pratique principalmente o inglês técnico, que é esse aí de compreender artigos técnicos.&lt;/p&gt;

&lt;p&gt;Tem mais algum material pra indicar? Comenta aqui para eu e outras meninas conhecerem!  ❤️&lt;/p&gt;

</description>
      <category>java</category>
      <category>junior</category>
      <category>career</category>
      <category>developer</category>
    </item>
    <item>
      <title>Como começar a estudar Java?</title>
      <dc:creator>Leila Farias</dc:creator>
      <pubDate>Thu, 27 Feb 2020 14:04:54 +0000</pubDate>
      <link>https://dev.to/leilasoliveira/como-comecar-a-estudar-java-omh</link>
      <guid>https://dev.to/leilasoliveira/como-comecar-a-estudar-java-omh</guid>
      <description>&lt;p&gt;Escrito por &lt;a href="//github.com/leilasoliveira"&gt;Leila Farias&lt;/a&gt; especialmente para &lt;a class="mentioned-user" href="https://dev.to/elasprogramam"&gt;@elasprogramam&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Parabéns pra você que escolheu Java para ser a sua linguagem de programação! 😄 Você se tornará uma excelente javeira!&lt;/p&gt;

&lt;p&gt;Mas... OK. Você já deu o primeiro passo, para onde seguir? Como estudar? Que materiais usar?&lt;/p&gt;

&lt;p&gt;Vou falar aqui sobre minha experiência.&lt;/p&gt;

&lt;p&gt;Quando decidi estudar a linguagem Java, ainda na faculdade, busquei por vários materiais de estudo e cai no site da Caelum (escola de treinamentos em TI).&lt;br&gt;
Eles tinham uma página do site dedicada para disponibilizar apostilas gratuitamente sobre várias tecnologias. Por sorte, eles ainda têm essa página para download das apostilas e você poderá baixá-las, clicando &lt;a href="https://www.caelum.com.br/apostilas" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Usei a apostila &lt;strong&gt;Java e Orientação a Objetos&lt;/strong&gt; e &lt;strong&gt;Java para Desenvolvimento Web&lt;/strong&gt;. As apostilas falam um pouquinho de lógica de programação, mas se estiver difícil acompanhar, recomendo a leitura do artigo &lt;a href="//01-por-onde-comecar/logica-de-programacao.md"&gt;Lógica de programação: a base de tudo&lt;/a&gt;.&lt;br&gt;
Você pode usar esta minha experiência para sair do lugar e começar seus estudos, ou pode procurar por outros materiais semelhantes (em outro artigo, farei um compilado de sites com materiais de estudo para linguagem Java).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A dica que vale pra tudo é&lt;/em&gt;: faça &lt;strong&gt;TODOS&lt;/strong&gt; os exercícios, exemplos, pesquise suas dúvidas no &lt;a href="https://pt.stackoverflow.com/" rel="noopener noreferrer"&gt;Stackoverflow&lt;/a&gt; (certamente alguém já passou pelos mesmos problemas que você), nos grupos de programação (sempre pesquise primeiro antes de publicar sua pergunta), etc. Aproveite e estude um pouco de Git (é meio que obrigatório nos dias de hoje, viu!) e suba seus códigos no GitHub para todos verem seu talento!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Dica bônus&lt;/em&gt;&lt;/strong&gt;: crie &lt;em&gt;um projeto seu&lt;/em&gt; com a tecnologia que estiver usando. Por exemplo, faça um sistema para uma biblioteca usando Java para Web, imagine e anote todos os cenários possíveis (para emprestar livros, o sistema deve ter uma relação de livros catalogados, como seria o cadastro desses livros?). Aqui, não apenas Java você estudará, mas também banco de dados, front-end (html, css, javascript). É bem mais legal estudar desta forma, na minha opinião, você acaba aprendendo uma stack inteira (palavrinha da moda para conhecimento desde o front-end até o back-end).&lt;/p&gt;

&lt;p&gt;Aqui vai uma lista de algumas tecnologias que você vai ouvir falar e que com certeza vai estudar a maioria delas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JSF&lt;/li&gt;
&lt;li&gt;Hibernate&lt;/li&gt;
&lt;li&gt;Spring Framework&lt;/li&gt;
&lt;li&gt;VRaptor&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>java</category>
      <category>junior</category>
      <category>career</category>
      <category>developer</category>
    </item>
  </channel>
</rss>
