Category: Desenvolvimento

Melhorando o entendimento de testes com RSPEC

Melhorando o entendimento de testes com RSPEC

Trabalho com Ruby há alguns anos e sempre utilizei RSPEC para fazer os testes dos projetos. Desde sempre, tentei aplicar as boas práticas de programação, como o DRY, nos códigos de teste. Isso ajudaria numa possível refatoração ou alteração dos testes.
Para isso, aprendi a usar coisas como o let, subject do RSPEC, que ajudam a reduzir a duplicidade (DRY) do código.
Com essas ferramentas realmente conseguimos deixar os testes bem mais enxutos e “bonitos”, mas não tínhamos a noção do pior.
Passado um tempo, quando se tenta rever esses testes, pode ser difícil entender o que está acontecendo, pois o código acaba não sendo linear.
Um exemplo abaixo:

Para entender o que a linha 12 está testando, é necessário seguir o seguinte fluxo:

O is_expected da linha 12 pega o resultado do subject, que está na linha 7
O subject da linha 7 pega o range_start da linha 10 (pois está dentro do contexto)
O subject da linha 7 pega o range_end da linha 3

E assim por diante…
Os testes deveriam ser de simples compreensão pois eles nos ajudam a entender o porquê de algumas implementações em alguns casos, e acabam servindo como documentação. Sendo difíceis de entender, não atingem esse objetivo.
Um jeito mais fácil de fazer esse teste seria assim:

Desse jeito fica muito mais claro entender o que está sendo feito no teste. Claro que perdemos o DRY se tivermos outro IT, pois várias coisas irão se repetir, mas acho que vale muito mais a clareza e a boa comunicação através de cada uma das especificações.
Vale comentar sobre o estilo de teste usado, conhecido como xUnit, que aprendi com o pessoal da Plataformatec, e tem mais detalhes neste link.
Como aprendizado, fica refletirmos quando vale a pena ou não utilizar esse tipo de abordagem. Em alguns casos, podemos ter repetições que podem ser resolvidas com um before ou até definindo um helper method que facilita a compreensão do código.
Confira mais detalhes nos artigos Improve your test readability using the xUnit structure, Let’s Not e What does “DAMP not DRY” mean when talking about unit tests?
O post Melhorando o entendimento de testes com RSPEC apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Melhorando o entendimento de testes com RSPEC
Fonte: Locaweb

Instalando o H2O Web Server

Instalando o H2O Web Server

O H2O é um novo servidor web de código aberto que provê um menor tempo de resposta com menos consumo de CPU quando comparado com servidores tradicionais como o Apache e Nginx.
Apesar de ser compatível com HTTP/1.1, ele foi desenvolvido desde o início para tirar o máximo proveito possível do HTTP/2 e inclui recurso com priorização de recursos e server push. Por isso mesmo ele tem uma das implementações mais completas do protocolo até agora e promete uma excelente experiência aos visitantes do seu website.
Uma das grandes vantagens de se utilizar o um IaaS como o Cloud Server Pro ou o VPS Locaweb é a liberdade que se tem fazer experimentações.
Os benchamarks feitos pelos desenvolvedores do H2O impressionam bastante. Abaixo você pode conferir os resultados de alguns deles
Para saber mais sobre os benchmarcks, consulte a página do desenvolvedor: https://h2o.examp1e.net/benchmarks.html.
Além disso, alguns dos principais recursos do H2O incluem:

Suporte HTTP/1.0 e HTTP/1.1
HTTP/2

suporte completo a priorização de dependências com configurações no server-side
server push sensível a cache

TCP Fash Open
TLS

resumo de sessão (standalone e memcached)
tickets de sessão com geração automática de chaves
OCSP stapling automático
cifras fast AEAD e forward secrecy
proteção de chave privada usando separação de privilégios

envio de arquivos estáticos
FastCGI
proxy reverso
automação com scripts utilizando mruby (baseado no Rack)
restart amigável e auto-atualizável

Compilando o código fonte.
Por ser bastante recente, o H2O ainda não está disponível no repositório padrão das principais distribuições. A seguir, veremos como instalá-lo em distribuições Debian/Ubuntu a partir do código fonte, mas nada impede que você compile o projeto em outras distribuições de forma semelhante, caso esteja procurando aventurar-se.
Neste caso, faremos a instalação a partir do código fonte. Para isso precisaremos instalar os seguintes pacotes (em versões mais recentes to APT, não é necessário mais digitar o -get):

sudo apt install git build-essential ruby-dev cmake pkg-config zlib1g-dev checkinstall libuv-dev

Em seguida faremos o clone do projeto a partir do repositório Github onde o código encontra-se hospedado:

git clone https://github.com/h2o/h2o.git

Por padrão, o H2O embarca o LibreSSL, que é um toolkit de critografia considerado, por muitos profissionais, mais seguro que o OpenSSL. Vamos utilizar essa configuração padrão e compilá-lo utilizando o cmake.

cmake -DWITH_BUNDLED_SSL=on .
make
sudo checkinstall

Siga as instruções do checkinstall até que o processo esteja completo. Se tudo der certo, será gerado um arquivo .deb semelhante a h2o_20161216-1_amd64.deb na mesma pasta. O número depois do h2o vai depender da data em que você efetuar o processo.
Uma vez feito isso, basta instalar o deb digitando sudo dpkg -i h2o_20161216-1_amd64.deb.
Instalação no Fedora/CentOS
A instalação em sistemas RPM é um pouco mais simples, caso você opte pela utilização de um repositório não-oficial no Bintray. Para isso, coloque o conteúdo abaixo no arquivo /etc/yum.repos.d/tatsushid-h2o-rpm.repo. A configuração abaixo está ajustada para CentOS. Caso esteja utilizando o Fedora, ajuste as linhas do arquivo:
#bintray-tatsushid-h2o-rpm – packages by tatsushid from Bintray
[bintray-tatsushid-h2o-rpm]
name=bintray-tatsushid-h2o-rpm
#Se estiver em um sistema CentOS
baseurl=https://dl.bintray.com/tatsushid/h2o-rpm/centos/$releasever/$basearch/
#Se estiver em um sistema Fedora
#baseurl=https://dl.bintray.com/tatsushid/h2o-rpm/fedora/$releasever/$basearch/
gpgcheck=0
repo_gpgcheck=0
enabled=1#bintray-tatsushid-h2o-rpm – packages by tatsushid from Bintray
[bintray-tatsushid-h2o-rpm]
name=bintray-tatsushid-h2o-rpm
#Se estiver em um sistema CentOS
baseurl=https://dl.bintray.com/tatsushid/h2o-rpm/centos/$releasever/$basearch/
#Se estiver em um sistema Fedora
#baseurl=https://dl.bintray.com/tatsushid/h2o-rpm/fedora/$releasever/$basearch/
gpgcheck=0
repo_gpgcheck=0
enabled=1

Feito isso, basta instalar a aplicação utilizando o yum:
sudo yum install h20

Ou o dnf no Fedora:
sudo dnf install h20

Configurando o servidor
Os arquivos de configuração do H2O são bastante simples e de fácil leitura: nada de XML! O código fonte do H2O trás alguns exemplos de configuração que você pode utilizar para criar o seu. Basta olhar em examples/h2o, especialmente o arquivo h2o.conf.
Crie um backup do arquivo e altere as configurações de acordo com as suas necessidades, sem se esquecer de alterar as portas da 8080 para a 80 e da 8081 para a 443. Caso contrário, você precisará abrir essas portas no painel do Cloud Server Pro.
Para testar se tudo está funcionando, execute o h2o utilizando o parâmetro -c para especificar o arquivo de configuração: h2o -c examples/h2o/h2o.conf
Se tudo ocorrer bem, você poderá acessar o IP do seu servidor e visualizar a imagem abaixo:

Caso esteja satisfeito, mova o arquivo para o diretório padrão /etc/ para que você não precise especificá-lo ao iniciar a aplicação.
O pacote RPM do H2O já trás scripts para o systemd, de forma que é possível iniciar o serviço via:
systemctl enable h2o.service
systemctl start h2o.service

Já na instalação por código fonte, você precisará criar seu próprio script ou iniciar o H2O via cronjobs.
Caso queira saber mais sobre o projeto, ou se aprofundar na documentação, visite o website do projeto em https://h2o.examp1e.net.
Para saber mais sobre o Cloud Server Pro ou o VPS Locaweb, visite a página http://www.locaweb.com.br/cloud/#solucoes-em-cloud
O post Instalando o H2O Web Server apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Instalando o H2O Web Server
Fonte: Locaweb

VPS: Seu cloud virtual

VPS: Seu cloud virtual

VPS significa “Virtual Private Server”  e, na tradução livre, “Servidor Virtual Privado”.
Um servidor virtual é uma máquina virtual que está sendo executada em uma máquina física, mas que é totalmente independente de outras máquinas virtuais ou serviços que são executados por lá também. Você mesmo pode ter criado um servidor virtual e nem percebeu ter feito isso, por exemplo, quando você criou uma máquina virtual no Virtual Box ou o VMware para instalar um Linux ou Windows.
A grande questão de um VPS em relação a um servidor físico é que em uma única máquina física podem ser criados vários servidores virtuais. É o que acontece na imagem abaixo:

A quantidade de servidores que cabem em uma máquina física vai depender da relação entre configurações dos servidores virtuais e configuração da máquina física (memória, processamento e disco basicamente). E é exatamente por isso que um servidor virtual é mais barato que um servidor físico, por poder ter várias máquinas virtuais utilizando uma física somente.
Outra vantagem do VPS é que como se trata de uma virtualização, estamos falando de software e não de hardware como em um servidor físico. Pense, quando você precisa de mais memória em um servidor físico ou se um pente queima por exemplo, você terá que comprar um novo pente e fazer a instalação manualmente. Em um servidor virtual, você poderá aumentar ou diminuir a quantidade de recursos de maneira super flexível, sem precisar tocar em nenhuma peça, contanto que a máquina hospedeira (hosting físico) tenha recursos disponíveis. Não é ótimo?
E a performance?
Um fator importante a se notar sobre as máquinas virtuais é que mesmo que você reserve uma determinada quantidade de memória para ela, isso não significa que ela sempre irá utilizar aquele montante a todo momento (a não ser que realmente precise) o que faz com que o seu hosting possa ter mais recursos disponíveis em alguns momentos e menos em outros.
É por isso que se um hosting tem recursos exatamente para hospedar 20 VPS e nem todos eles estão utilizando todos os recursos alocados, a performance destes VPS pode ser considerada a mesma de um servidor físico, porque não há uma sobrecarga muito grande sobre o hosting.
Agora, imagine que todos os VPS em um determinado momento precisem utilizar todos os recursos que foram alocados. Isso pode ocasionar uma perda de performance por conta da sobrecarga que todo esse workload vai gerar no hosting, que estará executando no máximo. É claro que isso só será um problema quando a máquina hospedeira não for bem configurada ou as predições de uso foram mal feitas.
Em alguns casos específicos, quando é preciso que se tenha um servidor de alta disponibilidade ou até mesmo com recursos mais robustos e totalmente configuráveis, é interessante que se contrate um servidor dedicado. Um servidor dedicado é totalmente customizável a nível de aplicação e o usuário provavelmente terá controle total sobre a máquina. Além disso, ele conseguirá adquirir recursos bem mais robustos, ao passo que quando se trata de VPS, as empresas geralmente vendem configurações com algum certo limite exatamente por se tratar de recursos virtualizados.
VPS, Server PRO ou Hospedagem compartilhada
Uma dúvida que as pessoas mais leigas no assunto sempre tem é na hora de escolher qual solução é a mais adequada para colocar seu negócio online. Atualmente tem-se múltiplas soluções ofertadas no mercado e dentre elas a mais comum é a hospedagem compartilhada.
A hospedagem compartilhada é ideal para quem tem um site pequeno, do ponto de vista de negócio, onde não terá centenas de milhares de acessos diários. A hospedagem geralmente tem recursos limitados e o nome compartilhada vem exatamente pelo fato de que existem outros diversos sites concorrendo pelos recursos do hosting em que eles estão hospedados.
Um Server PRO (dedicado) e o VPS se diferem da hospedagem no quesito de que não há concorrência por recursos com outras aplicações, como já mencionei acima, uma vez que elas não ocupam o mesmo espaço.
Mas afinal, qual escolher então? Na hora de decidir é preciso responder duas perguntas principais: qual será o montante de acessos que sua aplicação irá receber (1 por dia ou 1 milhão por hora, por exemplo) e quais as configurações de máquina que sua aplicação precisa ter para conseguir executar com um bom desempenho. Antes de saber esse tipo de resposta, provavelmente você errará na escolha para mais ou para menos e isso pode impactar negativamente seu negócio perante aos seus usuários. É só você lembrar alguma vez que tentou entrar em algum site e ele não abriu qual foi o seu sentimento.
É por isso que é fundamental entender o contexto da sua aplicação e se precisar contate profissionais que entendam do assunto para lhe ajudar a escolher a melhor solução para o seu negócio. Atualmente as próprias empresas vendem consultivamente suas soluções, a Locaweb é uma delas por exemplo.
VPS Locaweb
Não é porque eu trabalho aqui na Locaweb (e não é mesmo!), mas a oferta de VPS daqui é muito interessante. A empresa lançou seus servidores virtuais com storages SSD intel o que significa um ganho grande de performance (pelo menos 10x mais) quando comparados a HDs convencionais.
Além disso, algo que impressiona é o preço de entrada, onde um servidor virtual com 512 MB de memória, 1 vCPU (Intel), 20 GB de Disco, 1 TB de transferência e 1 IP público permanente (o que é mais que suficiente para hospedar um site do seu zé da padaria) por apenas R$ 17,90. É um preço que está até abaixo de muitas hospedagens compartilhadas que existem por aí e que provavelmente não vão ter os mesmos recursos disponíveis para a sua aplicação e não serão customizáveis, por exemplo. É realmente algo bem expressivo.
Outra coisa muito bacana dos VPS aqui da Locaweb, é que eles são totalmente customizáveis a nível de software por parte do usuário. Isso significa que você terá total autonomia na criação, configuração e no gerenciamento do servidor para adequá-lo às necessidades de sua aplicação. Se quiser conhecer mais sobre o VPS Locaweb é só acessar aqui! Eu mesmo já peguei um para brincar.
Até a próxima! ;)
O post VPS: Seu cloud virtual apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

VPS: Seu cloud virtual
Fonte: Locaweb