O Vagrant se
tornou rapidamente a ferramenta onipresente para o desenvolvimento local
nos sistemas operacionais Mac, Windows e Linux.
O Vagrant ajuda você a criar máquinas virtuais on-the-fly através de um conjunto de arquivos de configuração reutilizáveis. Os
desenvolvedores podem compartilhar suas configurações e scripts via
GitHub e em outros lugares, para que outros desenvolvedores possam criar
um ambiente e ferramentas idênticos.
É uma
ótima ferramenta se você quiser criar servidores para programas de
teste, aprender a usar ferramentas do Linux ou trabalhar em um ambiente
de teste antes de aplicar alterações em um sistema de produção. Você quer aprender a instalar a stack PHP/Apache/MySQL a partir do zero no Ubuntu? Ou jogar com a configuração de um servidor de cache como o Varnish na frente do Apache? Tente sua mão no Nginx? Aprenda PHP 7? O Vagrant torna as coisas um pouco mais simples do que usar o VirtualBox sozinho.
Vamos dar uma olhada em como configurar o Vagrant em um ambiente Windows.
Instalando os Megabits e as Peças
Para começar, vá em frente e instale estas ferramentas principais:
- VirtualBox (o software que cria máquinas virtuais)
- Vagrant (nosso herói, o software que implanta máquinas virtuais e executa scripts de provisionamento)
- PuTTY e PuTTYGen (cliente SSH e um gerador para chaves de segurança)
O VirtualBox e o Vagrant são instalados como qualquer outro programa do Windows. O Vagrant se instalará em seu caminho global para que você possa executá-lo de qualquer lugar.
Crie seus projetos
Agora que você configurou
tudo, você pode iniciar seu primeiro projeto do Vagrant criando uma
pasta de projeto que abrigará as várias configurações para cada uma de
suas VMs. Você usará a linha de comando para executar comandos do Vagrant nessas pastas.
Crie uma pasta de projeto, use: E:\Vagrant\sitepoint.
Dica: Como
usuário do Windows, você pode abrir rapidamente um prompt de comando no
Explorer mantendo pressionada a tecla Shift e clicando com o botão
direito do mouse na pasta ou no espaço em branco da pasta e escolhendo
“Abrir janela de comando aqui”.
Usando o Vagrant
Os comandos primários para começar são vagrant init e vagrant up.Abra uma linha de comando e mude os diretórios para a pasta do seu projeto de teste. Execute
o vagrant init e um novo arquivo vagrant será criado no diretório atual
chamado “Vagrantfile” (sem extensão), que contém uma configuração
inicial básica.
Abra
Vagrantfile em um editor de texto como o Notepad ++ ou Sublime-text e dê uma
olhada, estude os comentários antes de cada valor de configuração. Você
pode definir pastas compartilhadas entre convidado e host, ativar o
encaminhamento de porta, definir o nome do host e muito mais. Observe
que todos, mas talvez uma linha seja comentada: o Vagrant tem uma
configuração padrão que será usada mesmo sem nenhuma configuração
alterada aqui.
Este
Vagrantfile ainda não aponta para nenhum tipo de máquina virtual,
então, exclua o Vagrantfile que você acabou de criar e vamos encontrar
uma "caixa de base" para usar.Navegue pela Vagrant Cloud para ver as caixas básicas que você gostaria de usar. Para este exemplo, usaremos o "ubuntu / trusty64", que é a caixa de base "oficial" do Ubuntu Server 14.04 LTS (Trusty Tahr). Para que o Vagrant use essa caixa de base automaticamente, digite:
Desta vez, se você abrir o Vagrantfile, você perceberá que ele lista a caixa de base lá para “config.vm.box”. Outras configurações ainda são comentadas.
Agora que você tem um Vagrantfile com uma caixa base configurada, você pode girar a VM com este comando incrível:
Para explicar o que está
acontecendo aqui, o Vagrant primeiro importa a caixa base, se você ainda
não a tiver (eu já a tinha, caso contrário, ela seria baixada
primeiro). Em seguida, ele verifica se sua caixa está atualizada.
Nota: Essas caixas base estão em sua pasta %userprofile % /.Vagrant.d/boxes. Você pode listar todas as caixas instaladas digitando a vagrant box list. Você pode excluir as caixas com o comando: vagrant box remove box/name.
Você pode ver que ela
configura a porta de encaminhamento de SSH como "2222": você precisará
disso para usar um cliente SSH como o PuTTY.
Observe que o nome de usuário é "vagrant", o que sempre será. Você também notará que ele gera um novo conjunto de chaves, algo que a Vagrant não fez nas versões anteriores. A chave pública é automaticamente copiada para a VM e substitui a chave padrão nela. Ele também coloca a chave privada em uma nova pasta chamada “.vagrant” na pasta do seu projeto. Se você detalhar essa pasta, encontrará "private_key", que será útil para usar no PuTTY mais tarde.
No próximo aviso, ele verifica as adições dos convidados e monta a pasta compartilhada entre o host e o convidado. Isso pode ser alterado como quiser ou pastas compartilhadas adicionais podem ser adicionadas. A primeira pasta “/ vagrant” está na VM; ele irá compartilhar com a pasta do meu projeto local. Os arquivos serão mantidos em sincronia entre as pastas enquanto você trabalha.
Vamos dar uma olhada em algumas práticas padrão que devemos aplicar ao criar aplicativos Android.
As melhores práticas são simplesmente padrões profissionais que são aceitáveis em um campo. Aqui, veremos essas práticas relacionadas ao desenvolvimento do Android.
Introducao.
A plataforma Android administra o mercado de celulares no momento. Durante o Google IO em maio de 2017, o Google anunciou que havia 2 bilhões de dispositivos Android ativos por mês. Isso
é cerca de 74% da participação de mercado do sistema operacional móvel
de acordo com o StatCounter em fevereiro de 2018. Esta é uma das
principais razões para o grande surgimento de desenvolvedores do Android
nos últimos tempos. Como resultado do grande patrocínio da plataforma móvel, a maneira como construímos soluções móveis também é muito importante.
Se
você está construindo para bilhões de usuários, nós temos que crescer
acima apenas construindo apenas para as funcionalidades temos que considerar outros fatores, como escalabilidade, melhor experiência do usuário, etc.Recentemente, tem havido muitas promessas no desenvolvimento do Android desde a introdução formal do Kotlin. Em maio de 2017, ainda durante o Google IO, o Google anunciou seu apoio ao idioma. Kotlin é uma linguagem de programação estaticamente tipada que é executada na máquina virtual Java. É estaticamente digitado porque o tipo de dados das variáveis é conhecido em tempo de compilação. A linguagem vem com muitos novos recursos:
- Segurança nula.
- Inferência inteligente.
- Interoperabilidade com Java.
- Pode ser compilado para bytecode ou JavaScript da JVM
Kotlin nos ajuda a escrever código duas vezes mais rápido do que com Java. O Android lançou um conjunto de funções de extensão para tornar o código no Android ainda mais conciso. A linguagem está em desenvolvimento desde 2010 e a versão atual no momento de escrever este artigo é v1.2.30.
Neste artigo, veremos algumas práticas recomendadas no desenvolvimento do Android para nos ajudar a criar aplicativos melhores. Nós também faremos uso de Kotlin para os trechos. Vamos pular neles imediatamente!
Padrões de design
Os
padrões de projeto são soluções gerais e reutilizáveis para problemas
comuns em um determinado contexto no design de software. É mais como um modelo para uma solução. Além
de ser apenas uma possível solução para um problema, ajuda a
comunicação entre os desenvolvedores, pois fica mais fácil trabalhar em
equipes quando todos estão familiarizados com os padrões acordados a
seguir. Padrões de design não saíam da bolsa, eles existiam desde então. De
acordo com Javamann no StackOverflow: "Nós usamos padrões de design nos
anos 80, nós simplesmente não sabíamos que eles eram padrões de
design".
Alguns
padrões praticados durante o desenvolvimento de aplicativos para
Android incluem injeção de dependência, o padrão singleton, o padrão de
separação de interesses entre outros. Vamos olhar brevemente para dois deles.Injeção de dependênciaA injeção de dependência (DI) é um conceito em que um objeto não precisa configurar suas próprias dependências (objetos). Em vez disso, as dependências são passadas por outro objeto. DI sugere que objetos sejam inicializados em outro lugar e dados ao objeto solicitante. Existem várias formas de injeções:
- Injeção de construtor - onde as dependências são passadas através do construtor.
- Injeção de campo - onde as dependências são enviadas para os campos de classe diretamente, etc.
O último é muito difícil de implementar por si mesmo e, portanto, o uso de uma biblioteca DI Dagger2 é recomendado. Abaixo está um trecho rápido para mostrar uma instância de injeção de dependência:
..
Aqui, esta classe MainActivitySample possui uma dependência MainActivityRepo e não é responsável por inicializá-la. Em vez disso, o objeto está sendo inicializado em outro lugar e servido à classe por meio do construtor. Este é um exemplo de injeção de construtor. O DI, a longo prazo, nos ajuda a criar aplicativos levemente acoplados e testáveis. Isso
porque, se um objeto mudar, digamos, alterações de MainActivityRepo, é
mais fácil reconfigurar o objeto de uma única fonte, em vez de ir para
todas as classes que o usam para fazer isso.
Separação de Preocupações (SoC)
Este é um padrão que incentiva a dissociação do seu código em unidades distintas com responsabilidades bem definidas. Em
uma plataforma como o Android, onde há componentes como atividades,
fragmentos, serviços, provedores de conteúdo e receptores de transmissão
sendo controlados pelo sistema operacional Android, negligenciar isso
tem repercussões nos aplicativos que criamos. É aqui que
entram os padrões de arquitetura. Os padrões arquiteturais podem ajudar a
separar nossa apresentação de dados do processamento de dados. Existem vários padrões de arquitetura que existem, como Model View ViewModel (MVVM), Model View Presenter (MVP), etc.
Vamos dar uma breve olhada na arquitetura do MVP. Essa arquitetura é composta de três partes distintas:
- The View: esta é a parte que exibe o conteúdo para o usuário, como uma barra de progresso, diálogos, etc.
- The Model: é responsável por fornecer dados ao aplicativo, seja do DB ou de um serviço da web. Esta deve ser sua única fonte de verdade (dados).
- The Presenter: essa parte lida com a lógica de negócios, como chamar o modelo para obter dados e, em seguida, atualiza a exibição.
Um típico fluxo de MVP funciona assim:
Seu aplicativo começa mostrando um diálogo de progresso. É responsabilidade do View fazer isso. Ao mostrar a caixa de diálogo, ela precisa exibir dados na interface do usuário, informa o presenter. O presenter chama o model e depois que os dados são obtidos, ele é
retornado ao presenter que, por sua vez, retorna os dados para a View. Ao usar uma arquitetura, certifique-se de manter essa estrutura em todo o aplicativo. Quando você separa com sucesso seu código dessa forma, fica fácil manter, enviar novos recursos e testar. Os
documentos do Android fornecem um tutorial detalhado sobre um guia para
a arquitetura apropriada usando os componentes da arquitetura. Aqui está outro guia que oferece uma boa visão geral dos padrões de design no Android.
Experiência de usuário
A experiência do usuário nesse contexto refere-se à satisfação da interação de um usuário com seu aplicativo. Todos concordamos que, recentemente, houve um aumento na demanda por melhores experiências em dispositivos móveis. Aqui estão algumas coisas a serem observadas para melhorar a experiência de nossos aplicativos:
UI excelente
Uma sensação encantadora e experiência de um aplicativo começa com um bom design. Certifique-se de obter um que corresponda aos princípios de design de materiais do Google. Alguns desses princípios incluem:
- Fornecendo um botão de navegação para cima.
- Consistência em combinações de cores.
- Uso de ícones apropriados para retratar a funcionalidade, etc.
Continua na parte 02