Codificando, renderizando e fazendo download de uma imagem em base64 com javascript

Fala pessoal, esta semana tive de desenvolver uma funcionalidade bem bacana no projeto que estou atuando, como achei interessante gostaria de compartilhar este conhecimento.
Então vou ensinar vocês:
– Converter uma imagem para base64
– Renderizar a imagem na sua página
– Fazer o download

Mas o que é base64?

Base64 é um método para codificação de dados para transferência na Internet (codificação MIME para transferência de conteúdo). É utilizado frequentemente para transmitir dados binários por meios de transmissão que lidam apenas com texto. Por exemplo os envios de anexos por e-mail utilizam este método.

Convertendo arquivo de imagem em base64

Primeiramente vamos escrever o código html para fazer o upload do arquivo:

<div>
   <label>Selecione uma imagem</label>
</div>
<div>
   <input type="file" accept="image/*" (change)="processar($event)">
</div>

O método processar é responsável por interpretar o arquivo de imagem que fizemos upload, então é onde iremos aproveitar para converter nosso arquivo e recuperar as informações para podermos renderizar/fazer download do mesmo:

arquivoSelecionado: string; // guardará o src da imagem para renderizar
arquivoFormatado: string; // guardará o valor codificado em base64
arquivoNome: string;
arquivoExtensao: string;

processar(event) {
    // Recuperando a imagem, por padrão vem em uma lista
    const file = event.target.files[0];

    // Recuperando o nome do arquivo e extensão
    const arquivo: string = event.target.value;

    // Removendo o path C:\fakepath\ do nome da imagem
    this.arquivoNome = arquivo.split('.')[0].slice(0, 12);
    this.arquivoExtensao = arquivo.split('.')[1];

    // Objeto responsável por interpretar um arquivo
    const reader = new FileReader();

    // Este evento é chamado cada vez que a operação de leitura é completada com sucesso
    reader.onload = this._handleReaderLoaded.bind(this);

    // Inicia a leitura do conteúdo do Blob(objeto do tipo arquivo) especificado, uma vez finalizado, o atributo result conterá os dados raw binários do arquivo como string
    reader.readAsBinaryString(file);
  }

  _handleReaderLoaded(readerEvt) {
   // o método btoa codifica em base64
   const base64 = btoa(readerEvt.target.result);
   this.arquivoFormatado = base64;

   // src para renderizar a imagem
   this.arquivoSelecionado = "data:image/jpeg;base64," + base64;
  }

Exemplo de arquivo convertido em base64:

Renderizando a imagem

Agora que já temos nosso arquivo codificado em base64, conseguimos renderizar a imagem na nossa página, utilizando a variável arquivoSelecionado.

<div class="d-flex justify-content-center">
   <img [src]="arquivoSelecionado" alt="Selected Image"/>
</div>

Fazendo download do arquivo

Primeiro vamos criar o HTML do botão:

<button type="button" class="btn m-btn--air btn-outline-primary btn-sm mr-2" (click)="download()">
   <span>Download</span>
</button>

Agora vamos para o código responsável pelo download:

download() {
    // o metodo atob decodifica base64
    const binaryString = atob(this.arquivoFormatado);
    const bytes = new Uint8Array(binaryString.length);
    // convertendo em array buffer do tipo Uint8Array
    const arrayBuffer = bytes.map((byte, i) => binaryString.charCodeAt(i));

    this.criarArquivoParaDownload(arrayBuffer);
  }

  criarArquivoParaDownload(body) {
    // A partir do array buffer criamos o arquivo para download
    const blob = new Blob([body]);
    const fileName = `${this.arquivoNome}.${this.arquivoExtensao}`;

    // Validação para navegadores
    if (navigator.msSaveBlob) {
      // IE 10+
      navigator.msSaveBlob(blob, fileName);
    } else {
      const link = document.createElement('a');
      // Navegadores que suporta atributo de download do HTML5
      if (link.download !== undefined) {
        // criando um atributo hidden, para simular o click e disparar o download
        const url = URL.createObjectURL(blob);
        link.setAttribute('href', url);
        link.setAttribute('download', fileName);
        link.style.visibility = 'hidden';
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
      }
    }

Clicando agora no botão de Download, o arquivo será baixado pelo seu navegador!
Com isso terminamos o nosso post de hoje!
Espero que este material sirva de apoio para vocês algum dia 🙂

O sonho de trabalhar Home-Office

Fala meus queridos, quem ai já teve o sonho de trabalhar em casa? Eu já tive e hoje trabalho nesta modalidade. É bom? É ruim? Vale a pena? Cuidados que devo ter? Como devo me policiar?

Ambiente de Trabalho

O ambiente em si não tem segredo desde que tenha um computador e uma internet funcional, mas os segredos estão nos mínimos detalhes. Não é porque trabalha em casa que precisa trabalhar de cueca deitado no sofá (não que não possa), mas se ambientar como se estivesse na matriz da empresa e proporcionar a experiência de uma estação de trabalho com seu PC, garrafinha de água, fones de ouvido, caderno e caneta.
Ambiente quieto e com privacidade ajudam bastante pensar, organizar ideias e participar de reuniões.

Uma das coisas que afetam muitos que atuam nesta modalidade é o fato de que apesar de estar em casa, precisa ter a noção que está trabalhando e não fazendo um trabalho da faculdade. O mesmo vale para familiares que acham que está passando muito tempo no quarto sozinho (sem maldade). Por este motivo alguns profissionais acabam optando por trabalhar em um Co-Working (espaço compartilhado de trabalho) por um custo bem reduzido na qual tem sua estação de trabalho.

Organização Pessoal

É sempre bom ter o seu dia planejado, suas tarefas e metas diárias. Ter tudo em ordem antes de começar a trabalhar e ao terminar já deixar tudo pronto para o dia seguinte. Lembre-se você é o dono e único responsável pelo seu escritório, não haverá a “Tia da Limpeza” antes de você chegar ao trabalho. Costumo fazer um checklist do que pretendo fazer naquela semana em tópicos macros e ao decorrer de cada dia vou detalhando cada um deixando de forma que eu consiga fazer entregas menores durante a semana.

Inicio o dia normalmente vendo os e-mails e mensagens do dia anterior (pós 18 hrs) e respondo todas na qual tenho domínio e as que não já direciono para quem precisa. Seguindo está linha já defino entregas para antes do almoço e antes de fechar o dia (12 hrs – 18 hrs) e no final do dia separo 30 minutos para organizar as tarefas do dia seguinte e enviar um status report ao meu “Chefe”.

Horários e suas Flexibilidades

Como tudo na vida há o lado bom e o lado ruim desta flexibilidade de horário. Primeiro ponto e mais primordial é que você precisa cumprir sua carga horária seja 8 hrs / dia ou 40 hrs / semana. Partindo deste princípio, os dias que acordar mais tarde, tiver algum compromisso, extender um pouco mais o almoço ou qualquer outra coisa do gênero, poderá facilmente compensar até mesmo no próprio dia.
Cuidado básico é não fazer a exceção se tornar a regra, acordar tarde todo dia, fazer 3 horas de almoço e por ai vai.

Pensando no lado positivo, pode muito bem adiantar o trabalho em horários alternativos, não tem o gasto de tempo com transporte, possui o conforto que você mesmo se propôs a ter, pode praticar atividade física tranquilamente e não se atrasar para o trabalho ou até mesmo ir academia em horários mais vazios, durante horário de almoço ou café pode fazer uma pausa de X minutos ver TV ou jogar um video game, pode ouvir música no volume que desejar (talvez) e por ai vai… Lembrando que está em casa, porém trabalhando.

Modalidades (FullTime x PartTime x Weekly)

Full-time: Este é quando trabalha 100% do tempo de casa remotamente, tendo que visitar a matriz raríssimas vezes e a maioria das reuniões são via Web Call (skype, zoom, slack, hangouts, webex, …) . Muito comum para clientes internacionais.

Part-time: Quando a carga horária é dividida já em contrato onde X horas da sua semana de trabalho será executada de casa (Ex.: Seg – Sex). Regiões com muito tráfego aos finais de semana como litoral ou interior oferecem tais benefícios para evitar atraso e acumulo de tempo de locomoção ao trabalho.

Weekly: Algumas poucas empresas ainda na tentativa de experimentar esta modalidade de trabalho dão como benefício para o funcionário um dia de home-office, normalmente acordado já em contrato e líder do projeto e equipe (lembrando de home-office não é o mesmo que day-off).

Cuidados

Neste ponto eu poderia escrever todo um post apenas sobre os cuidados em trabalhar home, mas vou me limitar aos pontos que mais me prejudicaram no início ao trabalhar home. Um deles foi não ter hora para começar e nem terminar, pela necessidade do projeto e por falta de gente eu acordava as 7 da manhã, raras vezes almoçava (tempo passava que eu nem via) e terminava meia noite completamente esgotado. Depois de alguns meses fazendo isso na qual estava prejudicando fortemente minha vida pessoal, profissional e a saúde tive que regular os horários como se estivesse no escritório, com horário para levantar, almoçar e parar (até as pausas café).

Tenha organização máxima do que faz, fez ou virá a fazer, pois a visão externa de quem nos vê trabalhando home, acha que ficamos vendo TV o dia inteiro. Não posso generalizar, mas falarei por minha pessoa e esta fantasia não existe. De qualquer forma a cobrança será dobrada, pois precisa comprovar que está trabalhando e que o mesmo está rendendo como deveria.

Considerações

Não é a mina de ouro que talvez buscavam, porém venho humildemente compartilhar um pouco da minha experiência de como é trabalhar home-office. Pode ser ótimo para uns, péssimos para outros, mas como tudo na vida não há a solução perfeita para todos, precisa se adaptar, mudar sua rotina, se organizar e planejar para conseguir levar tudo da melhor forma possível e que afinal lhe traga algum benefício (seja saúde, profissional, carreira, …)

Abraço galera!

A riqueza de um status review

O que é um status review? Ou revisão de status? Ou task report? O nome pode variar conforme o locutor, mas a definição é o propósito é o mesmo.

Status Review é um resumo daquilo que você ou sua equipe estão fazendo, pretendem fazer ou já fizeram. Mas com tantas ferramentas, métricas e metodologias por que eu tenho que saber ou fazer isto? Não precisa! Ninguém vai colocar uma arma na sua cabeça enquanto toma o seu cafezinho e te obrigar a falar como está a situação do seu projeto/tarefa. Porém caso o seu diretor/cliente te encontre no elevador e te pergunte meio que pretensiosamente como está o andamento do seu projeto, como seria sua resposta?

Está bom, estamos indo bem!

Acho que vamos conseguir entregar!

A minha parte está feita!

Para um gestor ou alguém de negócios a qualidade da informação tem um peso muito grande, independentemente de qual metodologia de projeto utiliza. Como por exemplo:

Segundo as nossas reuniões de equipe, posso dizer que temos um volume considerável de funcionalidades entregues e já homologadas pelo cliente, na qual tivemos um feedback bem positivo. Inclusive do que foi entregue tivemos poucos problemas e já estamos trabalhando em paralelo nas melhorias de algumas coisas. Quanto ao prazo não sei dizer, já que quem coordena a entrega é o meu Gestor, mas garanto que estamos indo bem.

Consegue perceber o mesmo “Estamos indo bem” com diferentes pesos? No exemplo acima você fala que está tudo bem dando um embasamento o porque acha que está tudo bem, não se compromete com prazos, direciona o questionamento para o seu Gestor, mas mostra o quão envolvido com o projeto está. Neste exemplo obviamente estamos trabalhando com o mundo perfeito onde tudo está OKAY, mas a ideia é esta.

Caso encontre dificuldades, questione o seu líder sobre status das tarefas, andamento do projeto e se ele perguntar o por que, diga que quer saber o como está o andamento e quer se sentir envolvido. Nada melhor do que trabalhar com objetivos, saber o que fez, o que está fazendo, quando terminar tarefa atual qual será o próximo e obviamente o porque está fazendo aquilo. Dentre toda minha experiência profissional não me vi fazendo algo simplesmente porque alguém pediu, aquilo precisava me fazer sentido, eu tinha a necessidade de saber o propósito por trás para poder me dedicar, propor melhorias e ter uma melhor noção de tempo baseado na dificuldade e complexidade do negócio.

Fica a dica, não espere que alguém faça isso por você. Se organize, crie suas prioridades e sempre se mantenha informado. Um bom líder não é aquele que tem um cronograma que diz o que cada um deveria estar fazendo ou não. Um bom líder faz o time dele saber o propósito pelo qual lutam, deixam todos a par do que está acontecendo, treina e capacita todos para serem os próximos líderes.

Espero ter ajudado! Dúvidas, críticas e sugestões são muito bem vindas!!

Entendendo um pouco do conceito de REST e protocolo HTTP

Sabe-se que atualmente (2019) boa parte das aplicações, empresas e serviços se comunicam através de APIs, que não nada mais são que serviços expostos na internet para consumo de terceiros. Permitindo facilmente que o mesmo serviço possa ser consumido por um aplicativo móvel, um site de internet ou um aplicativo em seu desktop, desde que tenha acesso à internet.

Futuramente iremos debater sobre outros meios de comunicação e integração como SOAP e GraphQL, mas vamos do princípio mais básico.

O que é REST?

REST é um acrônimo para REpresentational State Transfer, ou seja, Transferência de Representação de Estado. Que nada mais é do que troca de informações utilizando o protocolo HTTP.

Um pouco de HTTP

As requisições feitas por uma RESTful API são através do protocolo HTTP onde temos:
– Endpoint: endereço do serviço
– Verbo HTTP: ação a ser tomada a partir do endpoint
– Payload: corpo da requisição podendo ser JSON ou XML

Dentre os verbos / métodos possíveis: Referência

  • GETO método GET solicita a representação de um recurso específico. Requisições utilizando o método GET devem retornar apenas dados.
  • HEAD O método HEAD solicita uma resposta de forma idêntica ao método GET, porém sem conter o corpo da resposta.
  • POST O método POST é utilizado para submeter uma entidade a um recurso específico, frequentemente causando uma mudança no estado do recurso ou efeitos colaterais no servidor.
  • PUT O método PUT substitui todas as atuais representações do recurso de destino pela carga de dados da requisição.
  • DELETEO método DELETE remove um recurso específico.
  • CONNECT O método CONNECT estabelece um túnel para o servidor identificado pelo recurso de destino.
  • OPTIONSO método OPTIONS é usado para descrever as opções de comunicação com o recurso de destino.
  • TRACE O método TRACE executa um teste de chamada loop-back junto com o caminho para o recurso de destino.
  • PATCHO método PATCH é utilizado para aplicar modificações parciais em um recurso.

HTTP Status, toda requisição HTTP retorna seu código de status nos avisando se a requisição foi processada com sucesso, se teve retorno, se deu algum tipo de erro e etc. Estes códigos apesar de programáveis (seu backend pode definir que tipo de HTTP Code retornar), são ótimos indícios de como sua API se comporta.

Exemplo:
> 1xx Informativo
> 2xx Sucesso
> 3xx Redirecionamento
> 4xx Erro lado do cliente
> 5xx Erro lado do servidor

Referência completa: Link

JSON x XML

É possível utilizar tanto XML quando JSON para requisições ou respostas em serviços REST. Porém comumente o uso de JSON por ser muito mais leve e de fácil entendimento, leitura e menos verboso que XML. Mas não há uma regra e sim varia conforme a necessidade de sua aplicação ou cliente.

//JSON de Cliente
{
  name: 'John',
  age: 33,
  gender: 'M'
  children: [
    {
      name: 'Mike',
      age: 5,
      gender: 'M'
    }
  ]
};
//XML de Cliente (Forma Representativa)
<client>
  <name>John</name>
  <age>33</age>
  <gender>M</gender>
  <children>
    <child>
      <name>Mike</name>
      <age>5</age>
      <gender>M</gender>
    </child>
  </children>
</client>

REST x RESTful

De uma forma bem resumida, podemos dizer que REST é o conceito arquitetural e RESTful é forma de aplicar este conceito de forma prática.

RESTful API

Uma vez definido nosso endpoint lá no backend, utilizaremos (tese) este mesmo endpoint para operações diferentes dentro da nossa aplicação e a melhor forma de exemplificar é utilizando serviço de CRUD.

http://{my-app.com}/api/{domain}

Seguindo o exemplo acima digamos que seu domínio seja de Cliente e partir dai queremos executar determinada operação através dos verbos disponíveis, olha que prático:

GET: http://{my-app.com}/api/client //listar todos
GET: http://{my-app.com}/api/client/{id} // recuperar por id
DELETE: http://{my-app.com}/api/client/{id} // remove client por id
PUT: http://{my-app.com}/api/client //atualizar, porém é necessário body com os dados cliente
POST: http://{my-app.com}/api/client //salvar, porém é necessário body com os dados cliente

Exemplo de payload em JSON:

const client: Client = {
  name: 'John',
  age: 33,
  role: 'user',
  gender: 'M'
};

Resumo

Espero ter ajudado em dar um overview sobre conceitos básicos e práticos de REST, HTTP com REST, RESTful, JSON. Em um futuro próximo faremos alguns tutorias para consolidar o conceito com a prática real. Mas antes de fazer tutoriais é necessário saber o porque está usando aquela abordagem, se realmente se aplica ao cenário que está enfrentando e por ai. Até a próxima!

O que é Node.js?

Fala pessoal, hoje iremos falar um pouco sobre Node.js, já ouviram falar?
Acredito que sim! Pois a tecnologia vem dominando cada dia mais o mercado. Então vamos lá!

O que é Node.js?
Resumidamente falando, é uma plataforma utilizada para construir aplicações web escaláveis de alta performance com JavaScript.
A tecnologia foi construída com base no interpretador V8 JavaScript Engine feita nada mais, nada menos do que pela Google. A sua arquitetura é orientada a eventos ou seja, uma rotina fica monitorando até que o evento programado seja acionado assim retornando uma resposta.

Mas qual a vantagem de utilizar o Node.js?
O Node.js trabalha de forma assíncrona e sem bloqueios, o que significa que não é necessário esperar uma requisição terminar para iniciar outra. Isso é uma arma muito poderosa, pois consegue lidar com um grande volume de requisições e garante rapidez nas respostas .
A sua leveza também é um destaque, pois não é necessário grandes recursos de utilização do computador .

Node.js X NPM
NPM ( Node Package Manager ) é um repositório online para publicação de código aberto para o Node.js, e também através dele é possível instalar os pacotes contidos neste repositório.
Então por possuir um grande repositório que fornece pacotes de códigos reusáveis gratuitamente via NPM é uma outra grande vantagem do Node.js, ou seja, caso precise fazer integrações com outros sistemas e/ou banco de dados é possível que já exista a solução implementada.

Tudo isso é muito bom, mas e as desvantagens?
Por trabalhar de forma assíncrona, é preciso tomar cuidado com o famoso callback hell, que significa ter várias camadas de retorno, uma dependendo da outra, assim deixando muito complexo o entendimento para outros programadores e para manutenções de código.
Não é recomendado a utilização do Node.js, para sistemas que tem lógicas muito complexas e necessitam de uma utilização maior da CPU.

Espero que algumas dúvidas em relação a tecnologia tenha sido esclarecida!
Em breve faremos alguns tutoriais desde a instalação até a utilização da tecnologia 😉

Para mais informações: https://nodejs.org/en/



O segredo para um Planejamento assertivo

Fala meus queridos, já adianto que se veio aqui atrás do segredo do sucesso, bom isso não vai rolar. Porém posso te adiantar que as dicas a seguir irão te ajudar muito já o segredo de um bom planejamento e organização é se conhecer. Dito isso vamos ao que importa!

Primeiro Passo: Conheça suas limitações, saiba o que pode fazer, quando pode fazer, quanto pode entregar e qual a sua capacidade produtiva.

Pode parecer difícil a primeira vista, mas vamos a um exemplo prático: Digamos que sua capacidade produtiva são de 8 hrs por dia, consegue entregar 1 tarefa (desde que tenha foco total) dentro do seu timing, levando em consideração que produz 1 tarefa em 8 hrs sua entrega será no dia seguinte, correto? Até aqui está fácil, pois só temos uma única tarefa sem peso de dificuldade.
Agora vamos complicar um pouco, seu projeto tem 10 tarefas com pesos distintos, você tem apenas a data final de entrega, algumas tarefas podem ser compartilhadas ou delegas a outra pessoa e no meio deste projeto foram assinaladas para você tarefas de outro projeto que andam em paralelo com o atual. E agora? Senta e chora? Pede arrego?

Segundo Passo: Aprenda dizer não e com razão!

Seguindo a linha do Primeiro Passo, devemos avaliar os risco baseado na nossa análise inicial. Digamos que atingiu o seu limite produtivo e trabalhar horas extras não é uma opção até porque nem sempre recebemos por isso. Entenda que esforço extra é o mesmo que mal planejamento, ninguém planeja uma entrega antecipada fazendo as pessoas trabalharem mais, felizes e motivadas. Se isso acontecer pode ter certeza que seu chefe virá te pedir um favorzinho.
Enfim, sabendo da sua limitação e considerando que já se planejou para saber quando estará livre para pegar outra tarefa ou quando conseguirá entregar suas tarefas, repasse isso para o seu superior. Quem deverá tomar a ação de contratar mais pessoas, prorrogar prazos ou qualquer outra ação é ele. O seu papel é expor os riscos de fazer algo correndo e tocar em paralelo diversas tarefas.
Não tenha medo de dizer “Não, não posso, não é possível” desde que tenha argumentos válidos que embasem suas palavras, e expor riscos é a melhor delas, pois ninguém quer assumir risco previamente sinalizado.

Terceiro Passo: Organização é tudo.

Este passo deveria ser Zero, aquele antes de tudo, mas só lembrei agora. Organização é ponto chave para um bom planejamento. Ideal que se mantenha organizado desde antes de iniciar algo até o seu término. Pois qualquer coisa que sai do seu planejamento (mundo perfeito), saberá imediatamente que deve tomar alguma ação: seja se replanejar, pedir ajuda, negociar prazo e sim imprevistos acontecem! Contudo, uma pessoa organizada e bem planejada consegue lidar com eles facilmente.

Normalmente antes de iniciar qualquer projeto / tarefa, já nas reuniões sempre anoto tudo o que posso e acho que vai ser útil futuramente, com isso já tenho uma visão do que devo me preocupar, quem devo envolver, onde devo buscar material e depois da pesquisa já consigo levantar os risco futuros.

Em seguida, uma vez que eu já tenha feito a lição de casa, consigo dizer qual a capacidade produtiva do meu time e independente do cronograma já estipulado pelo meu chefe, consigo dizer se conseguimos entregar ou não. E caso venha me pedir algo que estava fora do planejado, não vou dizer que sim para agradá-lo, vou dizer que não é possível e explicar que para fazer o que ele pediu algo irá atrasar.

Mantenha o time ou as pessoas envolvidas sempre a par do que acontece, do seu planejamento, estimule (sem obrigar) esse tipo de organização, pois um dia da sua ausência o projeto não pode parar e quanto mais pessoas tiverem o conhecimento mínimo de como as coisas devem caminha melhor, ou sempre aproveitarão da sua ausência para pedir um favorzinho aqui e ali.

Quem sabe num post futuro colocamos algumas ferramentas que possam te ajudar com planejamento, desde um to-do lista até gerenciamento de tarefas / time e projeto.

Aprender sem esquecer: utilizando técnicas de fixação e memorização

Como assim? Qual a mágica por trás de não esquecer o que aprendeu mesmo sem praticar? Seja no trabalho, idioma, um curso ou até uma receita de bolo.
Pois é, pode parecer estranho no início, mas tudo fará sentido no final. Pouco tempo atrás estava nesta exata situação onde tinha dificuldades de fixar coisas que acabei de aprender / estudar, mas devido o não exercício ou prática dentro da minha rotina eu acabava esquecendo.
Então após um insight comecei pesquisar se havia técnicas para ter um aprendizado melhor e fixar o conteúdo. E não é que existia?!

É muito normal aprendermos muitas coisas visando nossa carreira profissional, porém nem sempre conseguimos aplicar no nosso dia a dia de trabalho e acabamos esquecendo o conhecimento adquirido.

Vou fazer um breve overview sobre um curso que fiz e colocarei o link no final do post para os interessados (não ganharei comissão por isso, só estou compartilhando por ser um conteúdo muito foda!).

Então vamos lá!
Neste curso eu aprendi a forma correta de fazer anotações, saindo do tradicional com a folha na vertical e indo para horizontal, não focando em anotar palavra por palavra, mas apenas palavras chaves que funcionam como gatilho para trazer o que foi aprendido novamente. Os períodos em que devemos fazer revisões para armazena-las na memória de curto e longo prazo. E técnicas de redução de informação e memorização, algumas delas sendo: a mnemotécnica, mapas mentais e entre outras.

Vou deixar aqui um exemplo que eu achei muito legal, tente decorar a seguinte lista de palavras:
– Praia
– Mar
– Peixes
– Avião
– Nuvem
– Vendedor
– Gaivotas
– Carrinho
– Milho

Para ficar mais fácil imagine a seguinte cena em sua mente, você está na praia, olha para o mar azul, cheio de peixes pulando, quando de repente um avião surge de dentro de uma nuvem e do nada você escuta um vendedor gritando para afastar as gaivotas de seu carrinho de milho.

Não foi mais fácil se lembrar desta maneira, recordando esta cena? Pois é, a mnemotécnica é responsável por isto!

Caso tenha o interesse de fazer este curso, segue o link:
https://www.udemy.com/hiper-memoria-hiper-aprendizagem/

Espero que esse post tenha servido de alguma ajuda 🙂