Category: Desenvolvimento

Dicas para aumentar a produtividade com Sublime Text 3

Dicas para aumentar a produtividade com Sublime Text 3

Quando estou programando, sempre gosto de procurar por maneiras mais eficientes de executar tarefas repetitivas. Recentemente descobri alguns plugins e key bindings (atalho) no Sublime Text 3 e gostaria de compartilhar.
Plugin “Copy File Path With Line Number”
Uma tarefa que eu não gostava de fazer era escrever o caminho do arquivo de teste para poder rodar o teste no terminal. Por exemplo, se estou trabalhando no arquivo spec/services/plan/installer_spec.rb na linha 100, preciso digitar no console:
$ rspec spec/services/plan/installer_spec.rb:100
Com este plugin, criei o key binding abaixo que copia o path com a linha para o meu buffer.
{ “keys”: [“ctrl+alt+.”], “command”: “copy_reference” }
Desse modo, basta eu posicionar o cursor na linha que desejo copiar e apertar “ctrl + alt + .”, ir para o terminal e colar o path!
Plugin “Select Quoted”
Outra coisa que eu sentia falta no Sublime era de um key binding para poder copiar a string que está dentro de uma aspas (dupla ou simples).
Comecei a sentir falta disso quando descobri os comandos vi’ di’ do vim!
No Sublime eu costumava usar o “control + <-” até posicionar o cursor no começo da string e depois o “ctrl + shift + ->“ N vezes até chegar no final da string.
Com o este plugin, basta pressionar (ctrl + ‘) que será selecionado o texto dentro de aspas simples ou duplas. Muito fácil!
Trabalhando com layout de 2 colunas + plugin RailsGoToSpec
Muitas vezes programei usando o layout de 1 coluna e, uma tarefa que me incomodava, era alternar entre o código-fonte e o teste.
Para isso, usava o plugin RailsGoToSpec, que acha e abre o arquivo de teste dado o path do arquivo de código-fonte com apenas 1 comando (ctrl+shift+y) e, volta para o arquivo de código-fonte quando você está no arquivo de teste.
Recentemente comecei a trabalhar com o layout de 2 colunas e usar os atalhos para mover o cursor de uma coluna para outra.
Meu fluxo de trabalho ficou assim:

Abro o arquivo de código fonte (usando o “ctrl + p”)
Altero para o modo de 2 colunas (usando “alt + shift + 2”)
Abro o arquivo de teste com o atalho do RailsGoToSpec (usando “ctrl+shift+y”)
Movo o arquivo de teste para a coluna da direita (usando “ctrl + shift + 2”)

Depois de ter os 2 arquivos abertos, altero o cursor entre o painel da direita e esquerda com “ctrl + 1” e “ctrl + 2”.
Com isso consigo ter os 2 arquivos lado a lado, o que facilita muito!
Obs1: É uma boa ter o código limitado em 80 colunas para facilitar a visualização sem ter que fazer muito scroll pra direita;
Obs2 : O plugin RailsGoToSpec funciona bem em aplicações Rails e, dependendo do caso, em projetos de Gem.
Fechando:
Minha dica é sempre tentar otimizar as tarefas que são feitas no dia a dia e evitar as tarefas chatas e repetitivas. Usar atalhos pode ser um pouco difícil no começo, mas compensa a longo prazo (e para aquele que quiser ser mais ninja ainda e sofrer um pouco mais, desejo boa sorte para aprender vim/emacs!). ;)
O post Dicas para aumentar a produtividade com Sublime Text 3 apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Dicas para aumentar a produtividade com Sublime Text 3
Fonte: Locaweb

Saiba mais sobre o Bundler 2.0

Saiba mais sobre o Bundler 2.0

Se você já usou Rails, já usou o Bundler, certo? Inclusive eu escrevi um artigo sobre como otimizar o Bundler.
Na RubyConf 2017, assisti à palestra do Samuel Giddins. Ele é um dos caras que trabalha no desenvolvimento do Bundler e ele trouxe algumas novidades que estão sendo desenvolvidas no Bundler 2.0, irei falar sobre as que mais gostei abaixo:
1- Sem compatibilidade com versões antigas do Ruby e RubyGems
Essa nova versão do Bundler precisa de no mínimo Ruby >= 2.3 e RubyGems >= 2.5.
É importante entender porque eles fizeram isso, segundo o Samuel, eles tinham muito trabalho para manter a compatibilidade porque cada versão do Ruby e RubyGems trabalhava de uma maneira diferente e quanto mais eles tentavam manter a compatibilidade, mais o projeto virava um monstro de tão complexo.
Para facilitar a continuidade do projeto e a aparição de novas features eles decidiram remover a compatibilidade.
2- Nova interface de configuração
A interface de configuração não era muito intuitiva e foi alterada para facilitar o entendimento dos comandos.
* Interface antiga
$ bundle config # Lista todas as configurações
$ bundle config “path” # Mostra a pasta de configuraçẽos atual
$ bundle config “path” “vendor” # Muda a pasta de configurações para “vendor”
$ bundle config –delete “path” # Deleta as configurações atuais da pasta
* Interface nova
$ bundle config list # Lista todas as configurações
$ bundle config get “path” # Mostra a pasta de configuraçẽos atual
$ bundle config set “path” “vendor” # Muda a pasta de configurações para “vendor”
$ bundle config unset “path” # Deleta as configurações atuais da pasta
A mudança foi sutil, mas agora você deixa claro o que você quer executar – e isso, em minha opinião, faz toda a diferença.
3- Segurança no Multi-source
Agora você pode usar multi-source no Gemfile com segurança de que a gem que você quer realmente será instalada corretamente.
Exemplo:
source ‘https://rubygems.org’
source ‘https://another-gems-repository.com’
gem ‘rails’
4- Cache
A nova versão traz um sistema de cache agressivo para otimizar o Bundler, fazendo cache de repositórios de gems e builds locais.
O novo Bundler vai agilizar e melhorar a vida de todos que usam, uma pena que ainda não sabemos a data de lançamento ainda, mas vale a pena esperar. Se tiver interesse, você pode ver os slides da palestra da RubyConf aqui.
Gostou do novo Bundler? Quer saber mais sobre algo específico dele? Deixe um comentário. :)
O post Saiba mais sobre o Bundler 2.0 apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Saiba mais sobre o Bundler 2.0
Fonte: Locaweb

Monitore erros de graça

Monitore erros de graça

No começo do ano eu falei sobre o Sentry, uma ferramenta de monitoração de erros capaz de “prever” dificuldades que possam se tornar gargalos em sua aplicação (leia o artigo aqui) e alguns problemas, como a queda de banco de dados e outros.
No site do Sentry você encontra uma opção gratuita, mas para grandes aplicações ela acaba sendo bem limitada, já que tem limite de eventos por mês, restrição de usuários e histórico dos 7 últimos dias apenas.
Porém o Sentry é open source e fornece um docker oficial para que você possa subir ele em um servidor e utilizar todos os recursos sem as limitações anteriormente citadas.

Abaixo você confere o passo a passo e descobre como configurar o docker do Sentry:

// Tutorial

1- Inicie um container do Redis
 `docker run -d –name sentry-redis redis`

2- Inicie um container do Postgres
 `docker run -d –name sentry-postgres -e POSTGRES_PASSWORD=secret -e POSTGRES_USER=sentry postgres`

3- Gere uma chave de acesso para todos os containers do Sentry. Você terá que salvar essa chave, pois irá utilizar ela sempre que precisar subir o Sentry. Nos passos seguintes sempre que ver <secret-key> você deve substituir pela chave gerada.
 `docker run –rm sentry config generate-secret-key`

4- Se for a primeira vez que está subindo o Sentry, você precisa dar um upgrade nos containers. Nesse passo você poderá criar o usuário do Sentry.
 `docker run -it –rm -e SENTRY_SECRET_KEY='<secret-key>’ –link sentry-postgres:postgres –link sentry-redis:redis sentry upgrade`

5- Inicie o Sentry. No lugar de <my-sentry> você pode substituir por qualquer nome que queira identificar o seu container.
 `docker run -d -p 8080:9000 –name <my-sentry> -e SENTRY_SECRET_KEY='<secret-key>’ –link sentry-redis:redis –link sentry-postgres:postgres sentry`

6- Inicie o cron e os workers,
 `docker run -d –name sentry-cron -e SENTRY_SECRET_KEY='<secret-key>’ –link sentry-postgres:postgres –link sentry-redis:redis sentry run cron`

7- Inicie o(s) worker(s). Você pode criar quantos workers forem necessários para sua aplicação, sempre com um nome único, substitua o <sentry-worker-name> pelo nome único
 `docker run -d –name <sentry-worker-name> -e SENTRY_SECRET_KEY='<secret-key>’ –link sentry-postgres:postgres –link sentry-redis:redis sentry run worker`  

8- Se você não criou o usuário do Sentry no passo 4, você deve executar o passo abaixo.
 `docker run -it –rm -e SENTRY_SECRET_KEY='<secret-key>’ –link sentry-redis:redis –link sentry-postgres:postgres sentry createuser`

Feito isso, o Sentry está criado e pronto para ser utilizado na sua aplicação, basta se logar na plataforma criar as chaves necessárias e começar a usar.

O que achou da dica, gostou? Ficou com alguma dúvida? Deixe um comentário neste artigo que o ajudaremos! ;)
O post Monitore erros de graça apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Monitore erros de graça
Fonte: Locaweb

5 motivos para ler Isaac Asimov

5 motivos para ler Isaac Asimov

Não sei você, mas eu adoro um bom livro para fugir um pouco do dia a dia, relaxar, adquirir conhecimento… E uma forma de viajar para outros mundos e pensar mais sobre tecnologia e a forma como nos relacionamos com ela é lendo Isaac Asimov.
O autor russo nasceu em 1920, foi para os Estados Unidos com a família quando tinha três anos de idade e cresceu em Nova York. Foi professor de bioquímica na Universidade de Boston e é responsável por escrever e editar mais de 500 obras sobre tecnologia e o futuro da humanidade.
Asimov era um visionário e tinha pensamentos que iam muito além de sua época, tanto que acertou muitas previsões tecnológicas e também ficou conhecido como o “pai da robótica”. E é por isso (e muito mais) que você, fã do mundo tech, deveria ler suas obras.
Para convencê-lo, listamos 5 motivos para você largar o que está fazendo e comprar, pedir emprestado, ou pegar um livro de Isaac Asimov que esteja em sua prateleira e devorá-lo nesse momento:
// 1 – Se você gosta de ficção científica…
Não pode deixar de ler Asimov. Isso porque o autor está entre os três principais escritores do gênero – e você já viu que o cara escreveu e revisou muitas obras, foram mais de 500! Destaque para a série Fundação, que mostra como seria se galáxias e planetas fossem dominadas pelo homem. Ela foi eleita a melhor série de ficção científica e fantasia de todos os tempos pela World Science Fiction Society, em 1966.
Outra obra que podemos destacar é Eu, Robô – mas falaremos dela em breve. Um fator interessante é que os livros de Isaac podem parecer complexos, mas a linguagem é simples e os livros são empolgantes, quando a gente vê lá se foram capítulos em um piscar de olhos!
// 2 – Asimov criou as Leis da Robótica
Como falamos, Isaac Asimov é considerado o “pai da robôs” e foi ele quem criou as Leis da Robótica, que define em regras básicas, como robôs e seres humanos devem conviver pacificamente. O legal é que essas leis são levadas à sério por muitos estudiosos da área:
1ª lei: Um robô não pode ferir um ser humano ou, por ócio, permitir que um ser humano sofra algum mal.
2ª lei: Um robô deve obedecer às ordens que lhe sejam dadas por seres humanos, exceto nos casos em que tais ordens contrariem a Primeira Lei.
3ª lei: Um robô deve proteger sua própria existência, desde que tal proteção não entre em conflito com a Primeira e Segunda Leis.
O autor, depois de um tempo, também criou uma quarta lei, a Lei Zero que diz:
Um robô não pode fazer mal à humanidade e nem, por inação, permitir que ela sofra algum mal.
// 3 – Esqueça o filme Eu, Robô. Leia o livro!
Agora sim, vamos falar de Eu, Robô. Talvez você lembre desse nome por causa do filme, estrelado por Will Smith e lançado em 2004. Tem gente que gosta, outros nem tanto… Gostando ou não, o longa foi inspirado nas obras de Isaac Asimov – mas pasme: não necessariamente no livro.
Foi no livro Eu, Robô, publicado em 1950, que o autor publicou as leis da robótica e brincou com elas nos nove contos que compõem a edição. As histórias trazem uma visão diferente dos robôs – sejam eles domésticos, especializados, da Terra ou do espaço e, particularmente, são incríveis!
Já o filme, inicialmente, não teria nada a ver com a obra de Asimov.
Depois as leis da robótica foram incorporadas e também vemos a personagem Dra. Susan Calvin – mas, novamente, ele tem pouca relação com a obra homônima do autor. Na verdade, ele tem muito mais a ver com outra história de Isaac: As Cavernas de Aço.  
// 4 – As Premonições…
Por estar sempre muito à frente do tempo, Isaac acabou prevendo muitas coisas na área tecnológica. A BBC listou algumas de suas previsões que viraram realidade, entre elas:
 
“As comunicações serão audiovisuais e uma pessoa poderá não só escutar, mas também ver a pessoa que a telefona.”.

“Será possível “telefonar para qualquer ponto da Terra, inclusive as estações meteorológicas na Antártida.”.
 
“Os robôs não serão comuns nem muito bons em 2014, mas vão existir.”.
 
Incrível, não é mesmo? Para saber mais, leia o artigo na íntegra.
 
// 5 – Um asteroide chamado Asimov
Como não querer ler livros de um escritor que tem nada mais, nada menos do que o nome de um asteroide em sua homenagem? Em 1981 um asteroide foi batizado como 5020 Asimov. É, não tem como competir…
E agora que você já sabe um pouco mais de Isaac Asimov, não deixe de ler seus livros e pesquisar sobre sua vida. Como fã de ficção científica, sua mente se expandirá e você aprenderá (e muito) sobre robótica, tecnologia e até sobre relações humanas. Acredite, vale muito a pena! ;)
Já conhecia o autor e quer indicar uma de suas obras? Deixe suas sugestões nos comentários!
 
O post 5 motivos para ler Isaac Asimov apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

5 motivos para ler Isaac Asimov
Fonte: Locaweb

Frameworks PHP: conheça o Laravel

Frameworks PHP: conheça o Laravel

Um tempo atrás eu escrevi sobre Frameworks, se era interessante usar ou não usar (veja o artigo aqui). A partir do ponto que você optou por usar Framework, sabe qual deve escolher e por quê?
Trarei para você uma série de artigos falando sobre os Frameworks que eu conheço e que já trabalhei. Dessa forma você terá mais conhecimento para decidir qual é a opção mais interessante. Começarei falando sobre o Laravel, um dos mais práticos e de baixa curva de aprendizagem, em minha opinião.
O Laravel é um Framework MVC que está no top trends dos mais buscados no Google, isso desde agosto de 2014, que coincide com o ano de lançamento da versão 5.0. Antes disso ele era bastante usado, mas não estava no topo das pesquisas como atualmente.

Eu comecei a usar o Laravel 2015 e isso me ajudou a entender melhor a orientação a objeto e o padrão MVC porque ele trabalha de forma muito organizada. Em 2016 comecei a usar Ruby on Rails e o Laravel agregou bastante – não posso afirmar isso, mas parece que o Laravel foi baseado no Rails, devido a forma como ele separa as rotas, controllers e models.
Características do framework

Linguagem

PHP

Banco de dados

MySQL

Postgress
Redis
MongoDB
Cassandra
SQL Server

Modelos de DB

Relacional
Orientado a objeto

Features

Scaffold
Internacionalização (i18n)

Princípios de desenvolvimento

TDD (Test-driven development)
Don’t repeat yourself

 
Os bancos de dados listados nas características são altamente compatíveis com o Laravel. Sendo assim, basta trocar as configurações e apontar qual banco de dados deseja e o sistema já funciona se a estrutura estiver pronta.
Se não estiver, basta rodar as migrations que a estrutura do banco é criada. Tudo funcionará perfeitamente desde que o banco esteja modelado de forma relacional ou orientado o objeto, que são os dois modelos que o Framework trabalha.
Uma feature bastante usada, principalmente por quem está iniciando, é o Scaffold.
Ele cria todo o CRUD de uma entidade do sistema, como o de concessionárias, por exemplo.
Você roda um Scaffold para os automóveis e, então, toda a parte de leitura, visualização escrita e deleção dos automóveis sai pronta e você já pode vê-lo funcionando.
Outro ponto importante é a Internacionalização (i18n), principalmente se você pretende fazer um sistema que possa ser acessado em vários idiomas. Mesmo que não use a Internacionalização para esse intuito, ela pode ser utilizada para que um mesmo texto apareça em vários pontos do seu sistema. Se ele precisar de alteração, você o modificará em um lugar apenas e essa alteração será replicada por todo o sistema, já que a leitura do texto fica concentrada em um arquivo.
Para iniciar um projeto com o Laravel, caso você tenha o composer instalado, basta rodar o comando:
composer global require “laravel/installer”
Tendo configurando o PHP nas suas variáveis de ambiente, basta rodar o comando abaixo e sua aplicação estará no ar.
php artisan serve
Gostou do Laravel? Quer conhecer um pouco mais? Dê uma olhada na doc e no github dos caras. Se ficou alguma dúvida, tiver alguma sugestão ou se quiserr ler sobre algum Framework específico, deixe nos comentários.
O post Frameworks PHP: conheça o Laravel apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Frameworks PHP: conheça o Laravel
Fonte: Locaweb

Até onde vai o poder do JavaScript?

Até onde vai o poder do JavaScript?

Gostaria de fazer uma breve reflexão com vocês a respeito do nosso querido (ou nem tanto) JavaScript.
Fazendo uma breve introdução à linguagem, ela foi criada no ano 1995 por Brendan Eich. Quando eu comecei a trabalhar com web, a função do JavaScript era muito clara: validar formulários, sendo essas validações de campos obrigatórios ou não; máscaras em campos; valores válidos para um campo – como e-mail e CPF – e por aí vai.
Havia vários formatos de monitores no mercado nessa época, mas os sites ainda não eram responsivos. Então decidi me arriscar e fazer um site que abrisse nos três tipos de monitores mais vendidos naquele tempo (800×600, 1024×760 e 1280×1024) e consegui graças ao JavaScript, mas seu uso era bem limitado e o resultado sempre ficava nesse “mais do mesmo”.
Naquela mesma época, a linguagem ganhou o poder do Ajax, e as páginas começaram a fazer requisições em background para o servidor, aumentando assim, o poder de interação do usuário com a página. Também surgiram os frameworks JavaScript – sendo o JQuery um dos pioneiros e mais populares.
Em 2009 um visionário chamado Ryan Dahl pensou: e se a linguagem usada no lado do cliente também pudesse ser usada no lado do navegador? Foi assim que surgiu o node.js, um interpretador JavaScript para rodar do lado do servidor.
Desde então, a linguagem tem crescido mais e mais, atingindo vários níveis. Nem os mais otimistas que olhavam para aquela linguagem “pobre e feinha”, nascida para ser usada no lado cliente, bem no início da web, aceitariam que ela chegaria. E hoje podemos fazer várias coisas incríveis com JavaScript.
// O que fazer com JavaScript:
– Banco de dados: MongoDB
– Aplicações mobile nativas: React Native e Nativescript
– Servidor: Node.js
– IoT e robótica: Tessel
– Criar apps multiplataforma: Electron
// Quem está usando:
Algumas das grandes empresas estão usando o JavaScript em seus servidores e aplicações: NASA, Netflix, Walmart, BMW, Goldman Sachs, Amazon, IBM, e outras.
O JavaScript é uma linguagem que cresce muito – não só em utilização, como em poder – e, por isso, está sendo muito adotada para usos diversos. Logo, essa é uma ótima oportunidade para dar um UP na carreira!
Essa é justamente a ideia deste artigo: abrir sua mente para as possibilidades que o Javascript está trazendo para o mercado.
E você, o que acha do JavaScript? Como usa? Gostaria de ver algo específico sobre a linguagem? Deixe um comentário com suas sugestões!
 
O post Até onde vai o poder do JavaScript? apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Até onde vai o poder do JavaScript?
Fonte: Locaweb

Agende desde já a RubyConf Brasil 2017

Agende desde já a RubyConf Brasil 2017

Muita gente anda perguntando: “Vai ter RubyConf Brasil esse ano?”. A resposta é simples: vai sim. A dúvida é pertinente, pois pouca coisa havia sido dita sobre o evento até agora. Falta nossa! Para começar, quem acompanhou o encerramento do evento no ano passado, sabe que esse será o primeiro ano em que Fabio Akita não estará mais à frente da organização.
Antes que comecem a falar, não houve briga, discussões, nem desentendimentos. Apenas uma mudança de expectativas. Afinal, depois de 10 anos, é normal que algumas coisas mudem. Desta vez Akita está mais interessado em focar os seus esforços em seu novo projeto (a conferência The Conf), que tem uma proposta bem diferente da RubyConf, onde todas as palestras serão em inglês, sem restrição de linguagens de programação.
Mas fique tranquilo, pois fora isso, pouca coisa irá mudar. O evento permanece no mesmo formato dos últimos anos, agregando Ruby e outras tecnologias que orbitam este ecossistema, tais como JavaScript (Node e Frontend), Elixir, Crystal e até Go, Rust e Clojure.
Inclusive, teremos mais uma vez os 2 andares, com dois preços diferenciados de ingresso: um mais barato, com acesso apenas ao “openfloor” onde será apresentado o conteúdo mais introdutório de Ruby e novas tecnologias, e outro ingresso com acesso aos dois andares, especialmente ao segundo, onde será apresentado o conteúdo mais avançado.
Dois keynotes já estão confirmados e outros ainda estão por vir. Rafael França, brasileiro e top commiter do Rails 5; e Coraline Ehmke, escolhida como Ruby Hero em 2016, uma premiação da comunidade Ruby aos desenvolvedores que mais contribuiram durante o ano.
Marque desde já na sua agenda, dias 17 e 18 de Novembro, no Centro de Eventos da Fecomércio, rua Dr. Plínio Barreto, 285 – Bela Vista. O call for papers já está aberto e você pode submeter a sua palestra em http://cfp.rubyconf.com.br.
Aproveite também para adquirir, desde já, o seu ingresso no primeiro lote promocional, com 60% de desconto e que já está disponivel!
O post Agende desde já a RubyConf Brasil 2017 apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Agende desde já a RubyConf Brasil 2017
Fonte: Locaweb

Programando com brincadeira de criança

Programando com brincadeira de criança

A infância, normalmente, é uma das épocas que mais gostamos de nossas vidas. Nos preocupávamos muito mais em brincar – e muitas dessas brincadeiras ajudaram a desenvolver algumas de nossas habilidades físicas e mentais, habilidades essas que possuímos até hoje.
Uma dessas brincadeiras era a tal do “Mestre Mandou”, conhece? Ela funciona da seguinte forma: uma das crianças é o mestre e as demais são os seguidores. Então o mestre começa dizendo:
– O mestre mandou!
E os seguidores respondem:
– Fazer o quê?
E então o mestre dá uma ordem e os seguidores precisam cumprí-la.
Com base nessa brincadeira (para saber mais sobre ela, clique aqui) vamos conversar um pouco sobre o “Tell don’t ask“.  Se você nunca ouviu falar, o “Tell don’t ask”  segue a mesma lógica do Mestre Mandou.
Você possui um objeto e esse objeto faz várias coisas. E, algumas dessas coisas têm condições para que o objeto faça. Complicou? Vamos exemplificar.
Imagine o seguinte caso: uma loja online, em que para adicionar um item no carrinho de compras, ele deve estar em estoque, pois não é interessante para o lojista que ele deixe de vender produtos que não possa entregar de imediato.
Show me the code!
class Cart

has_many :products

def add_product(id)
product = Product.find(id)
raise ‘Product is not in stock’ unless product.stock?
product.add_product
end
end

class Product
STOCK_LIMIT = 10

def stock
quantity > STOCK_LIMIT
end

def add_product
# Add Product
end
end

Com base nesse exemplo nós aplicaremos o “Tell don’t ask“.
Perceba que a classe Cart tem um método add_product e, dentro desse método, fazemos uma validação e chamamos o método add_product do Product.
O “Tell don’t ask” fala justamente sobre isso. Caso você tenha que executar uma ação, não deve ficar perguntando a outro objeto se deve prosseguir ou não. Você deve agrupar esses comportamentos em um único lugar e, sempre que precisar executar a ação, chamar apenas o método.
Esse método se encarregará de fazer todas as verificações sem que o método que chamou fique se preocupando sobre como as coisas vão acontecer, como na brincadeira, em que
o “Tell don’t ask” apenas diz “Faça. Não importa como.”.
Aplicando o “Tell don’t ask” ficará nesse estilo:
class Cart
has_many :products

def add_product(id)
product = Product.find(id)
product .add_product!
end
end

class Product
STOCK_LIMIT = 10

def stock
quantity > STOCK_LIMIT
end

def add_product
# Add Product
end

def add_product!
raise ‘Product is not in stock’ unless stock?
add_product
end
end

Você pode perceber agora que o carrinho não pergunta se o produto está em estoque para adicioná-lo. Ele apenas diz para o produto se adicionar e a verificação, se tem estoque ou não, é feita pelo próprio produto.
É recomendável aplicar o “Tell don’t ask” porque quando você deixa a regra de negócio junto com o método que a executa, está evitando fazer alterações em vários lugares em dado momento em que você precise alterar a regra de negócio.
Por exemplo, agora além do produto estar no estoque, ele precisa estar ativo para compras, pois você pode deixar ele visível na loja, mas não pode disponibilizá-lo para compras e essa mesma regra deve refletir tanto no carrinho, como na lista de desejos.
No primeiro exemplo seria algo assim:
class Cart
has_many :products

def add_product(id)
product = Product.find(id)
raise ‘Product is not in stock’ unless product.stock?
raise ‘Product is not enabled’ unless product.enabled?
product.add_product
end
end

class Wishlist
has_many :products

def add_product(id)
product = Product.find(id)
raise ‘Product is not in stock’ unless product.stock?
raise ‘Product is not enabled’ unless product.enabled?
product.add_product
end
end

class Product
STOCK_LIMIT = 10

def stock
quantity > STOCK_LIMIT
end

def add_product
# Add Product
end
end

Aplicando o “Tell don’t ask” nosso exemplo ficará assim:
class Cart
has_many :products

def add_product(id)
product = Product.find(id)
product.add_product
end
end

class Wishlist
has_many :products

def add_product(id)
product = Product.find(id)
product.add_product
end
end

class Product
STOCK_LIMIT = 10

def stock
quantity > STOCK_LIMIT
end

def add_product
# Add Product
end

def add_product!
raise ‘Product is not in stock’ unless product.stock?
raise ‘Product is not enabled’ unless product.enabled?
add_product
end
end
Perceba que qualquer regra nova você aplica só dentro do método add_product! na classe Product e não mais em dois lugares, como seria no exemplo em que não é aplicado o “Tell don’t ask” que seria necessário trocar tanto na classe Cart como na Wishlist.
Gostou da dica? ficou com alguma dúvida? Deixe nos comentários.
O post Programando com brincadeira de criança apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Programando com brincadeira de criança
Fonte: Locaweb

Usando Mermaid para criar diagramas no Gitbook

Usando Mermaid para criar diagramas no Gitbook

Na Locaweb começamos a usar o Gitbook para algumas documentações há certo tempo. Não participei da decisão do uso dessa ferramenta, mas posso listar alguns pontos positivos dela:

Poder escrever os textos em markdown (que são convertidos automaticamente para html na publicação)
A busca por palavras é muito rápida! (neste link criei uma documentação de exemplo, basta procurar por “answer” para ver a velocidade)
Existem vários plugins disponíveis. Por exemplo, estamos usando esses: [ “mermaid”, “toggle-chapters”, “toc”, “callouts” ]

Nesse post vou focar no uso do plugin Mermaid e não pretendo detalhar como usar o Gitbook, que pode ser visto aqui. Outra opção é usar a versão “na nuvem”. Para isso basta criar uma conta no gitbook.com.
Na área de desenvolvimento de software frequentemente precisamos desenhar diagramas para documentar algo. Isso pode ajudar muito o entendimento dos sistemas, com uso de diagramas de sequência ou de estado, por exemplo.
Já usei diversas ferramentas para desenhar diagramas, mas vejo o mesmo problema para todas elas. Quando precisamos editar alguma coisa é necessário abrir o arquivo original no editor para depois exportar a imagem para PNG ou Jpeg e, às vezes, já não temos mais o arquivo original ou até o programa para edição. Assim fica impossível editar!
Há pouco tempo conheci o Mermaid, uma “linguagem” para especificar diagramas. Com ele, conseguimos fazer diagramas de sequência, de fluxo, de gantt, etc.
Na Locaweb fizemos alguns diagramas de sequência para facilitar o entendimento das integrações entre sistemas. No site do Mermaid, a especificação para esse tipo de diagrama se encontra neste link.
É possível editar em modo “live” no próprio site do Mermaid – por aqui.
Outro jeito de se testar é usando o hackmd.io. Basta criar um documento markdown e colocar o código do diagrama dentro do bloco Mermaid, como o exemplo abaixo:
“`mermaid
graph LR;
Feature–>B[Possui pai?];
B– não –>C[Product];
B– sim –>D[“O pai é processado?”];
“`

Esse código gera o seguinte diagrama:

Voltando ao Gitbook, para usar o Mermaid, basta adicionar o plugin Mermaid na lista de plugins no arquivo book.json, como a seguir:
{
“plugins” : [ “mermaid” ]
}

Mais detalhes sobre esse plugin podem ser vistos na em sua página.
Diferentemente do hackmd, o código do diagrama deve ficar dentro do bloco {% mermaid %} como abaixo:
{% mermaid %}
graph LR;
Feature–>B[Possui pai?];
B– não –>C[Product];
B– sim –>D[“O pai é processado?”];
{% endmermaid %}

Espero que com essas dicas, você possa começar a criar mais diagramas para documentar suas aplicações. Qualquer dúvida, comenta aí!
O post Usando Mermaid para criar diagramas no Gitbook apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Usando Mermaid para criar diagramas no Gitbook
Fonte: Locaweb

Docker + PHP em 5 minutos

Docker + PHP em 5 minutos

Já sabemos que o Docker é uma mão na roda para desenvolvimento, ainda mais hoje em dia. Com ele é possível montar facilmente ambientes estáveis e com configurações idênticas. Se você ainda não utiliza o Docker, esse tutorial foi feito para você.
Obs.: Os comandos abaixo foram feitos usando o Ubuntu 16.04, cada S.O. tem uma forma diferente de instalar o Docker, por isso vou deixar os links da documentação, caso você esteja usando um sistema diferente.
// 1 – Instalando o Docker (https://docs.docker.com/engine/installation/#platform-support-matrix)
Abaixo está o passo a passo da instalação do Docker:

Instalando pacotes (apt)

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

Adicionar chave oficial do Docker

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –

Setando repositório

sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”

Atualizando repositórios

sudo apt-get update

Instalando Docker

sudo apt-get install docker-ce

Verificando instalação

docker -v
// 2 – Instalando o Docker Compose
(https://docs.docker.com/compose/install/)
O Docker Compose é responsável por criar e administrar um conjunto de containers. Abaixo os passos para a instalação do Docker Compose.

Baixando o docker-compose

sudo curl -o /usr/local/bin/docker-compose -L “https://github.com/docker/compose/releases/download/1.11.2/docker-compose-$(uname -s)-$(uname -m)”

Setando as permissões

sudo chmod +x /usr/local/bin/docker-compose

Verificado instalação

docker-compose -v
// 3 – Criando Dockerfile
Depois de fazer os passos anteriores, o Docker já está instalado e pronto para usar.
Agora, neste tutorial, vou falar sobre como usar uma imagem PHP, mas saiba que existem imagens para tudo o que você possa imaginar, basta acessar o Docker Hub e procurar.
Em nosso tutorial vamos usar a imagem tutum/lamp.
Para usá-la basta criar um arquivo na raiz do seu projeto com o nome de Dockerfile, o Dockerfile de seu projeto deve ficar como o exemplo abaixo:
FROM tutum/lamp
MAINTAINER PAAS EMAIL <seuemail@provedor.com>

Seu Dockerfile pode mudar, caso queira fazer algo diferente em sua imagem. Nesse exemplo estamos deixando o mais simples possível.
// 4 – Criando docker-compose.yml
Para utilizar o Docker Compose que instalamos, temos que criar mais um arquivo na raiz do projeto o docker-compose.yml e ele deve ficar como o exemplo abaixo:
dev:

dockerfile: Dockerfile
volumes:
– .:/var/www/html
– /etc/timezone:/etc/timezone
– /etc/localtime:/etc/localtime

build: .
expose:
– “80”

ports:
– “80:80″

Caso tenha necessidade, assim como o Dockerfile você pode variar o docker-compose.yml, adicionando um container de Redis ao projeto, por exemplo.
// 5 – Subindo aplicação

Rodar a aplicação

docker-compose up
Feito isso, agora você já pode acessar seu localhost normalmente e acessar o app feito em PHP rodando no Docker. Caso você tenha o Apache ou o Nginx instalado e rodando, ou qualquer outro programa que utilize a porta 80 de sua máquina, você terá que dar um stop nele antes de subir o Docker. Caso contrário, dará um erro no Docker e não irá subir enquanto a porta 80 estiver ocupada.
Gostou da dica? Deixe um comentário.
O post Docker + PHP em 5 minutos apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Docker + PHP em 5 minutos
Fonte: Locaweb