terça-feira, 2 de outubro de 2018

Magento 2 a correr no Amazon Lightsail


Na conferência Amazon Web Services, a AWS revelou sua mais nova oferta de produtos - Lightsail. O Lightsail é uma plataforma de Virtual Private Server (VPS) gerenciada e de baixo custo, destinada a rivalizar com as ofertas de concorrentes tradicionais de hospedagem VPS, como a Digital Ocean. Construído no mecanismo de aplicativos Bitnami (que é construído em contêineres com o Docker), você pode clicar com um clique em iniciar uma instância com aplicativos pré-instalados. Isso significa instalações de um clique de baixo custo para Magento 2, WordPress, Drupal, Gitlab e muitos outros tipos de aplicativos.


Funcionando


O AWS Lightsail torna simples o início de uma nova instância do Magento 2. Depois de fazer o login no console da AWS, você pode selecionar Lightsail no menu de serviços. Isso inicia um início rápido onde, na primeira página, você pode iniciar uma instância do App + OS.




Após o lançamento do aplicativo, você escolhe um plano de preços. As taxas são incrivelmente competitivas - você obtém a mesma quantidade de RAM e um disco rígido maior do que com as tradicionais instâncias do AWS EC2 - a menor delas no momento é um t2.nano com clock de 512MB RAM / 1vCPU e 8GB SSD por padrão. Essa instância custará US $ 4,75 sob demanda, mas você terá todo o trabalho de gerenciar e instalar seus próprios aplicativos. A Lightsail também está oferecendo os primeiros 30 dias gratuitos no plano de US $ 5 / mês



Depois de um pouco de carregamento, você obtém o endereço IP público do recém-instalado Magento 2. Carregá-lo em um navegador me levou para a home page da minha recém-instalada instância do Magento 2. É um Magento 2.1.2CE básico (por isso, está atualizado com patches de segurança).




Imediatamente, não inclui dados de amostra pré-instalados. Ele tem o ícone de início rápido do Bitnami no canto inferior direito; que leva você a uma página para obter a senha de login. É aqui que o “fácil” termina; pelo menos para o Magento 2.




As instruções do Bitnami para obter a senha do Magento 2 parecem ter sido escritas para o Magento 1. Elas também focam no fato de que você provavelmente está executando isso como uma instância do Docker no Amazon Elastic Container Service ou como um sistema operacional convidado em uma instância do EC2. Isso é motivo de frustração por uma infinidade de razões.

Primeiro, a senha é gerada automaticamente para o usuário admin do Magento 2. Para obter essa senha, você precisa ler o registro de início do sistema. Se isso estivesse no EC2, isso não seria problema - como um clique com o botão direito do mouse no console da AWS na instância tem uma opção para ler o log do sistema. Infelizmente Lightsail no momento da redação deste artigo não tem essa capacidade. Segundo, o novo e-mail do usuário administrador é padronizado como "usuario@exemplo.com", portanto, clicar na funcionalidade de senha esquecida não funcionaria. 


Isso é difícil porque o Lightsail não configura o SES (Simple Email Service) da Amazon por padrão ou abre as restrições que a Amazon impõe ao enviar e-mails de seu serviço da AWS - para que ele enfraqueça automaticamente todos os e-mails provenientes da instância.

Neste ponto, você precisa mergulhar no console administrativo do Lightsail para encontrar a chave SSH. Para fazer isso, você precisa fazer login na instância e adicionar um novo usuário do Magento na ferramenta de linha de comando:


               $  > php -f bin/magento admin:user:create



É aqui que a experiência do desenvolvedor do Magento 2 requer um conhecimento profundo. Você será recebido com um aviso de que você não forneceu todos os parâmetros certos para o método de criação de usuário da ferramenta de linha de comando. Agora temos que olhar para o Docs do desenvolvedor do Magento 2 ... e eventualmente eu encontrei todos os comandos certos - disponiveis aqui

       $ > php -f bin/magento admin:user:create –admin-firstname=Phillip –admin-lastname=Jackson –               admin-email=pjackson@somethingdigital.com –admin-user=pjackson –admin-                                     password=abcd1234

Desde que eu já estava logado no console SSH, eu removi o banner Bitnami na página inicial. Demorou algum tempo para encontrar o comando para fazer isso, mas aqui está:

       $ > sudo /opt/bitnami/apps/magento/bnconfig –disable_banner 1


Em seguida, cliquei na senha esquecida e tentei enviar um e-mail de redefinição de senha, mas o e-mail ainda não estava funcionando corretamente. O que significa que eu precisava instalar o sendmail, o postfix, o SES e mais, tudo para obter funcionalidade básica. Expandirei mais sobre esse ponto no futuro post do blog.


Conclusão


Depois que eu entrei no Magento 2, as coisas ficaram muito mais simples. Consegui ligar as minhas chaves de desenvolvedor do Magento Connect e baixar os pacotes do Magento Marketplace sem problemas. Não encontrei mais bloqueios de estrada; e não tive problemas com permissões. Para um VPS de US $ 5 / mês, o painel de administração foi rápido; claro que eu era a única pessoa a usá-lo. Não espere poder atualizar, já que você precisa de um mínimo de 768 MB de RAM disponível para o Magento 2 executar o atualizador de software. Mais sobre isso em um post futuro.


Além de instalar o Magento 2 no Lightsail, também instalei uma instância do WordPress. A experiência foi muito mais simples, embora eu tenha tido problemas semelhantes tanto com o email quanto com a senha para se conectar ao painel de administração. 

No entanto - o WordPress vem com documentos que realmente se alinham com a experiência do administrador e são fáceis de seguir. Os documentos do Magento 2 Lightsail / Bitnami não. O WordPress vem configurado com um plugin SMTP, onde você pode conectar as credenciais do SES (e os documentos orientam você sobre como fazer isso) - o Magento 2 não. Eu não fiz nenhum benchmarking (que é para outro blog) e acredito que ele provavelmente apresentaria um desempenho ruim - mas com capacidade de atualização de um clique até 8GB / 2CPU (a US $ 80 / mês) o Lightsail pode escalar com uma loja.

Para um produto voltado para o mercado de bricolagem do mercado, o Lightsail é atraente - mas a experiência do Magento 2 tem algumas armadilhas. Isso ainda precisa ser ajustado para ser útil para o antigo mercado Magento 1 CE. Dito isto, existe um enorme potencial para aqueles que querem testar o Magento 2 sem passar pelo incômodo de instalá-lo.


quarta-feira, 29 de agosto de 2018

Pare de usar palavras grandes e jargões da indústria (e o que fazer em vez disso)

Vamos dizer que você quer ensinar uma pessoa alguma coisa. Por que a pessoa não entende o que você está dizendo?


Uma das principais razões é porque gostamos de usar palavras grandes e girias da indústria. Esses girias podem significar algo para nós, mas não significam nada para as pessoas que estamos tentando ensinar.

A próxima vez que você tentar ensinar programação, atente para as palavras que você usa.

Três tipos de palavras grandes

As girias podem ser divididas em três categorias:

  1. Aquelas que podem ser explicados em poucas palavras
  2. Aquelas que não podem ser explicados com palavras simples
  3. Aquelas que podem significar coisas diferentes em contextos diferentes.

Quando você ensina, você deve sempre observar esses três tipos de palavras.

Girias que podem ser explicados em poucas palavras.

Se a giria puder ser explicado em poucas palavras, você deseja usar essas palavras em vez de giria.

A interoperabilidade é um exemplo de uma palavra desse tipo.

Parece assustador e complicado, mas pode ser explicado em poucas palavras simples.

Se você procurou o significado de interoperabilidade, você encontrará definições como estas:

Da Wikipedia: "A interoperabilidade é uma característica de um produto ou sistema, cujas interfaces são completamente compreendidas, para trabalhar com outros produtos ou sistemas, no presente ou no futuro, em implementação ou acesso, sem quaisquer restrições".

De Dictionary.com: "Interoperabilidade é a capacidade de compartilhar dados entre diferentes sistemas de computadores, especialmente em máquinas diferentes." Se colocarmos isso em termos simples, "interoperabilidade" significa a "capacidade de compartilhar dados".

Veja como isso torna a barreira da língua muito menor?

Se você pode substituir essa giria por palavras simples, por que você se atém à palavra difícil?

Girias que significam coisas diferentes em contextos diferentes

Algumas girias têm significados diferentes quando usados ​​em contextos diferentes.

Um exemplo de uma giria tal é o termo encapsulamento.

Encapsular algo significa incluir essa coisa com outra coisa. Se você enrolar uma batata com um pano, você pode dizer que o pano encapsula a batata.

Desenvolvedores amam a palavra encapsulamento. Eles usam isso o tempo todo.

A primeira maneira é envolver variáveis ​​e outro código dentro de uma função. Nesse caso, a função encapsula o código dentro:


function someFunction () { const variableName = 'I am a variable!' }

A segunda maneira é conter a individualidade de um objeto. Por exemplo, se você tem um objeto humano e cria dois humanos a partir do objeto humano, esses dois seres humanos não devem ser o mesmo.

Nesse caso, cada objeto encapsula seus próprios dados.

function Human (name) { this.name = name } const zell = new Human('Zell') const vincy = new Human('Vincy') zell.name === vincy.name // false

A terceira maneira é para esconder informação. Em JavaScript, podemos criar variáveis privadas. Essas variáveis privadas são incluídas pelo objeto.

Nesse caso, o objeto encapsula a variável privada. Você não pode acessar a variável privada. Nesse caso, o encapsulamento é usado para significar algo ligeiramente diferente do segundo caso.

function Human () { const privateVariable = 'private' this.publicVariable = 'public' }

Então, o que você entende por encapsulamento?

Você não pode ter certeza.

Não deve haver ambiguidade quando você se comunica. Se houver ambiguidade, a comunicação se rompe e os alunos não aprendem.

É melhor abandonar o jargão se o jargão significa coisas diferentes em contextos diferentes.

Girias que não podem ser explicadas com palavras simples

Algumas girias tecnicas não podem ser explicados com palavras simples. Essas girias são freqüentemente usadas ​​para falar sobre conceitos abstratos, e é por isso que palavras simples podem não ser suficientes.

Um exemplo de tal palavra é "mutação".

A mutação vem da palavra mutate. Mutar significa mudar de forma ou natureza. Em JavaScript, a mutação acontece embaixo do capô sem que você perceba.

Neste caso, a mudança não é suficiente para explicar a mutação. Falta profundidade e detalhes. Além disso, a mudança ainda é muito abstrata.

Você sente que um conceito é abstrato porque você não pode imaginá-lo. Você não pode ver, ouvir, sentir, tocar ou prová-lo. Para fazer um concreto abstrato, precisamos apelar para os cinco sentidos do ser humano.

Para explicar um conceito abstrato, você pode usar analogias. Quando você usa analogias, pode descrever um objeto ou um cenário de maneira que as pessoas possam ver, ouvir ou sentir o que você quer dizer.

Por exemplo, eu usei X-men como minha analogia quando expliquei mutação.

Pedi aos alunos que imaginassem um amigo crescendo o pêlo e ficando azul diante de seus olhos. Qualquer um pode imaginar o que significa crescer pêlo e ficar azul, mesmo que eles não saibam quem é a Fera.

Se você quiser expandir a analogia para atender mais pessoas, você pode apelar para mais sentidos. Por exemplo, para fazer as pessoas cegas imaginarem uma mutação, você também pode dizer a elas que imaginem que a amiga grunhiu como uma fera.

A chave aqui é uma mudança que não é detectada. Ninguém sabe se uma pessoa é um mutante até que mostre seus poderes. Na mesma frente, ninguém sabe que um objeto JavaScript mudou até que, bem, mudou.

Eu enfatizei este ponto para desenhar um link de volta para a mutação em JavaScript.

A mutação se torna concreta quando o elo é estabelecido. Quando digo mutação, os alunos que lêem o artigo podem imaginar o amigo ficando azul, crescendo a pele e rosnando como uma fera.

Depois de transformar um jargão abstrato em um conceito concreto, você pode usar o jargão normalmente. Os alunos entenderão o que você quer dizer.

Eu escrevi um artigo sobre como criar boas analogias se você estiver interessado em aprender essa habilidade.

Empacotando
Preste atenção às palavras que você usa quando ensina programação. Se você usar palavras difíceis que não significam nada para seu aluno, elas não conseguirão entender o que você quer dizer.

Substitua palavras difíceis por palavras mais simples e fáceis de entender, se puder.

Evite usar girias que podem significar coisas diferentes em contextos diferentes. Estas girias tornam as coisas ambíguas e confusas.

Finalmente, use analogias para transformar conceitos abstratos em conceitos concretos.

Obrigado pela leitura. Este artigo foi originalmente publicado no meu blog. Inscreva-se no meu boletim informativo se quiser mais artigos para ajudá-lo a se tornar um desenvolvedor de frontend melhor.

sexta-feira, 22 de junho de 2018

Uma Introducao ao Vagrant no Windows - Parte 1

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.






 

segunda-feira, 11 de junho de 2018

Melhores práticas no desenvolvimento do Android - Part 1

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".
Image result for Android patterns 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