Category: Desenvolvimento

Instalando o PostgreSQL no Ubuntu 16.04

Instalando o PostgreSQL no Ubuntu 16.04

Instalar o PostgreSQL no Ubuntu 16.04 é uma tarefa bem simples, pois os repositórios padrão já disponibilizam os pacotes que precisamos.
Para isso basta digitar os seguintes comandos

$ sudo apt update
$ sudo apt install postgresql

Feito isso, já temos nosso software instalado em nosso computador. Para testar se está tudo certo, precisamos antes entender dois aspectos da instalação.
Primeiro aspecto: a instalação criará um usuário em nosso sistema operacional chamado Postgres, ao qual você pode conferir com o seguinte comando

$ cut -d: -f1 /etc/passwd
phsil
geoclue
mysql
smmta
smmsp
guest-atgpth
postgres

A saída deste comando vai depender de quantos usuários você já tem criados em seu Ubuntu, mas como podemos ver o usuário Postgres está por ali.
Segundo aspecto: foi criada uma role com nome postgres. O Postgres tem um sistema de autenticação e autorização baseado em roles (regras). Muitas pessoas confundem roles com usuários, mas na verdade nós não temos usuários, somente roles.
O motivo para essas duas coisas acontecerem é que inicialmente o Postgres é configurado para autenticar utilizando a técnica de ident. De uma maneira bem simplificada, isso significa que o nome da role do banco e o nome do usuário do Ubuntu devem ser iguais para que seja possível a autenticação. Isso acontece por conta do tipo de autenticação, a qual funciona associando a role a uma conta do Ubuntu relacionada.
Você pode constatar isso fazendo um simples teste no console interativo do Postgres, o psql. Tente autenticar com o seu usuário padrão digitando no terminal

$ psql
psql: FATAL: role “phsil” does not exist

Como o usuário do meu Ubuntu se chama phsil e eu não tenho nenhuma role criada no banco para esse usuário, recebo erro fatal do psql. Se você quiser autenticar com o sua conta padrão do Ubuntu, terá que criar uma role para ela. Para isso, podemos então, utilizar o usuário do postgres para entrar no psql

$ sudo -u postgres psql

O que estamos querendo dizer com este comando é “Ubuntu, execute o psql utilizando o usuário postgres”. Se tudo deu certo, agora estamos dentro do psql. O psql nos poupa bastante escrever queries em SQL por conta de já ter vários comandos pré-definidos pelo Postgres.
Uma vez dentro do psql, já sabemos que nossa instalação funcionou e estamos preparados para começar a utilizar nosso banco de dados. Vamos então criar uma role para o nosso usuário padrão do Ubuntu, que no meu caso é o phsil. Antes, vamos listar as roles já existentes

postgres= du

Como podemos ver, a única role que eu tenho é a do postgres. Vamos criar então a nova role

postgres= create role phsil;
CREATE ROLE
postgres= du

Com o comando acima eu criei uma role, mas como eu não passei nenhum parâmetro, essa role não tem nenhuma permissão, nem conseguimos logar ainda no psql com ela. Vamos então atualizar essa role para ser um superusuário e, então, poder logar no sistema e para poder criar um banco de dados

postgres= alter role phsil with superuser login createdb;
ALTER ROLE
postgres= du

A role createdb é necessária. Ainda não conseguiremos logar no psql sem antes criarmos um banco de dados com o mesmo nome de nossa role. O nosso sistema de autenticação assume que isso precisa acontecer para que ele autorize a autenticação. Vamos listar quais bancos já estão criados

postgres= l

Não temos ainda o banco pshil e então precisamos criá-lo

postgres= create database phsil;
CREATE DATABASE
postgres= l

Não vamos nos preocupar agora com a estrutura deste banco porque na maioria das vezes nem o utilizamos.
Feito isso, estamos preparados para fazer nosso teste final. Vamos enfim logar no psql com o nosso usuário padrão do Ubuntu

postgres= q
$ psql

psql (9.5.5)
Type “help” for help.

phsil=

E voilá. Tudo certo e nosso banco está prontinho. Você agora está preparado para criar aplicações fantásticas. Qualquer dúvida, fala comigo nos comentários! Abraço e até a próxima.
O post Instalando o PostgreSQL no Ubuntu 16.04 apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Instalando o PostgreSQL no Ubuntu 16.04
Fonte: Locaweb

Gerenciando múltiplas chaves SSH no Linux

Gerenciando múltiplas chaves SSH no Linux

Quem trabalha com desenvolvimento web provavelmente já deve ter ficado louco em algum momento com tantas chaves SSH para gerenciar. É chave para Github, chave para servidor de teste, chave para servidor de produção… O SSH config é uma mão na roda nessas horas.
Alias
Quando eu comecei a trabalhar com SSH, tinha apenas duas chaves para gerenciar eeu simplesmente chamava assim:

$ ssh -i ~/.ssh/chave_privada usuario@servidor

O problema com esse comando é que são muitas coisas pra digitar e é muito fácil de esquecê-las. Foi então que alguém me falou: “- Ei! Usa um Alias no Shell e para de sofrer…”. Como faz isso? Você precisa abrir seu .bashrc e adicionar o seguinte:

alias ssh_server1=’ssh -i ~/.ssh/chave_privada usuario@servidor’

Agora, sempre que eu quiser acessar o servidor em questão, abro o meu terminal e digito

$ ssh_server1

Config file
Eu costumo ser bem chato com organização. Hoje tenho cerca de cinco chaves para gerenciar e utilizar Alias para todas não parecia ser o mais legal. Na verdade, estava bem feio. Foi aí que descobri que o próprio open-ssh disponibiliza um arquivo de configuração para gerenciar as chaves.
Veja como é fácil converter o exemplo anterior para o arquivo de configurações:

O primeiro passo é acessar o diretório ~/.ssh e criar o arquivo config:


$ cd ~/.ssh
$ touch config

Agora você deve definir os parâmetros de sua conexão ssh:


Host server1
User usuario
HostName server1.com
IdentityFile ~/.ssh/chave_privada_do_server1

Agora, para acessar o server1 por ssh, rode o comando:

$ ssh server1

Simples assim!
Você também pode gerenciar as chaves utilizadas em repositórios GIT. Digamos que o seu repositório esteja hospedado sob o endereço repositorios.com. Então, ao invés de utilizar o ssh-agent para configurar a chave privada a ser utilizada, você pode criar uma nova entrada no arquivo de configuração ~/.ssh/config

Host repos
HostName repositorios.com
IdentityFile ~/.ssh/chave_privada_do_repositório
IdentitiesOnly yes

e utilizar o seguinte comando para clonar o repositório

$ git clone git@repos:seu_repositorio.git

O IdentitiesOnly yes serve para dar prioridade à chave privada definida em IdentityFile. Sem essa opção, a primeira tentativa de chave a ser utilizada seria a chave id_rsa
Essa dica é bem simples e vai ajudar bastante na organização de suas chaves. Outras dicas podem ser encontradas na documentação oficial do open-ssh, ou aqui no blog em um próximo post!
Até a próxima!
O post Gerenciando múltiplas chaves SSH no Linux apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Gerenciando múltiplas chaves SSH no Linux
Fonte: Locaweb

Instalando Node.js 6.x e npm no Ubuntu 16.04

Instalando Node.js 6.x e npm no Ubuntu 16.04

Node.js é uma plataforma Javascript que permite que os desenvolvedores criem aplicações de rede escaláveis e de maneira rápida. É utilizada no mundo todo e mantida por uma grande comunidade.
Outro importante elemento é o gerenciador de pacotes npm (node package manager). Com o npm é possível ter acesso a um repositório online onde existem milhares de projetos de código-aberto para o Node e, claro, gerenciar todas as dependências e versões que precisarmos. Dito isso, vou mostrar duas maneiras de instalar o node e também como instalar o npm no seu Ubuntu 16.04. Vamos lá?
Utilizando os repositórios do Ubuntu
A maneira mais simples de instalar o node no Ubuntu é obtendo-o dos repositórios padrões do sistema operacional. Geralmente não será a última versão, mas será uma versão estável. Primeiro, precisamos ter certeza que nossos repositórios e os pacotes do sistema estão atualizados

$ sudo apt update
$ sudo apt upgrade

E logo então podemos instalar o node (aqui precisei de sudo)

$ sudo apt install nodejs

E por último o npm (também precisei de sudo)

$ sudo apt install npm

Para verificar que tudo foi instalado corretamente, vamos conferir as versões que foram instaladas (pode ser que você já tenha instalado uma versão mais atual)

$ node -v
v6.9.4
$ npm -v
3.10.10

Utilizando um PPA
PPA (Personal Package Archives) são pacotes pessoais que não pertencem as atualizações ou softwares padrões do Ubuntu; criados e mantidos pela comunidade. Geralmente são utilizadas para manter as versões mais atualizadas dos softwares, que não estão nos repositórios padrões. Eu não vou entrar aqui no assunto se PPAs são seguros ou não, porque nesse caso o PPA que vou indicar para vocês é indicado pelo site oficial do node.
Primeiro precisamos instalar uma dependência do pacote python-software-properties caso você ainda não o tenha


$ sudo apt install python-software-properties

e agora basta adicionar o PPA

$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -

Feito isso

$ sudo apt install nodejs

Utilizando o PPA, o npm é instalado automaticamente junto com o node. Novamente testando a instalação


$ node -v
v6.9.4
$ npm -v
3.10.10

No momento em que escrevi este artigo, a versão mais atual do Node.js é a v7.4.0, mas ela ainda não estava com LTS (Long Term Support), o que não impede você de testá-la ou usá-la. Se quiser fazer isso, simplesmente repita a instalação via PPA, mas com o seguinte repositório


$ curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -

Verá que as versões foram atualizadas


$ node -v
v7.4.0
$ npm -v
4.0.5

É isso ai pessoal! Tem alguma dúvida? Me deixe uma mensagem nos comentários. Até a próxima!

O post Instalando Node.js 6.x e npm no Ubuntu 16.04 apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Instalando Node.js 6.x e npm no Ubuntu 16.04
Fonte: Locaweb

APPs híbridos com Cordova

APPs híbridos com Cordova

Desde que tive meu primeiro smartphone, sempre quis entender como os aplicativos eram feitos. Eu achava aquilo um máximo! Por isso, ainda na faculdade, em minhas horas vagas, depois que eu aprendi a programar, sempre ficava me aventurando no mundo do Android. Aprendi o suficiente para saber fazer aplicativos básicos e até elementos um pouco mais avançados.
Mas ainda não era suficiente, porque eu queria saber como desenvolver aplicativos para iOS e Windows Phone (sim, acreditem :D) também. Então naquela época eu fiz algumas aulas de Objective C e de C# e acabei até fazendo meus primeiros aplicativos para as duas plataformas.
O problema é que é muito complicado você manter o mesmo APP em três linguagens diferentes e eu não tinha vontade para aprender Objective C (com seus infinitos colchetes) e nem memória no PC para manter o Visual Studio e programar com C# :D
Foi aí que em um belo dia ouvi falar do PhoneGap, basicamente um framework mobile multiplataforma baseado nas tecnologias padrões da web. Isso significa que o mesmo código de um aplicativo rodaria nas três plataformas que eu mencionei e em mais algumas que o Phonegap dava suporte. Sensacional, não?
 
A tecnologia
O que deu vida ao PhoneGap foi um conjunto de APIs móveis open-sources chamado de Apache Cordova, gerenciado pela Apache foundation.
Basicamente, o que o Cordova faz é prover APIs que permitem acessar os elementos nativos dos dispositivos móveis e computadores tais como, câmera, gps, NFC, áudio, etc., via JavaScript.
Como é o Cordova que vai fazer com que nossas chamadas via Javascript sejam interpretadas por cada uma das plataformas que desejarmos, temos aí uma maneira universal para programar nossos apps sem termos que nos preocupar com Java, Swift ou C#, mas somente com HTML, CSS e qualquer framework JavaScript que estivermos dispostos a usar.
Uma vez combinado com um framework UI (Interface de usuário), as possibilidades para criar aplicativos utilizando somente as linguagens web que mencionei, eram infinitas. Essa modalidade de aplicativos ficou então conhecida como aplicativos híbridos.
Desde os tempos iniciais do PhoneGap até os dias de hoje, a plataforma evoluiu bastante e já é possível utilizá-la inclusive para criar aplicativos para Windows, Ubuntu e OS X, ultrapassando as barreiras do mobile.
 
Frameworks e mais frameworks
Falando em frameworks, o PhoneGap já não está mais sozinho no universo Cordova. Existe um verdadeiro ecossistema de frameworks open-source que permitem que você construa aplicativos híbridos.
Um deles é o ionic, um dos melhores atualmente. Ele foi construído utilizando Angular e é uma plataforma que já permite até mesmo integrar serviços como push notifications e analytics.
A grande vantagem do ionic é a extensa comunidade que ele já possui e com isso a vasta gama de elementos UI que ele possui. Só para você ter uma ideia, enquanto escrevia esse artigo, o projeto já tinha mais de 27 mil estrelas no GitHub.
Além do ionic, existem diversos outros que talvez você possa se interessar: jQuery Mobile, Sencha Touch, Ratchet e Lungo. Esses são os que eu conheço, mas existem muitos outros por ai.
 
Nativo X Híbrido
Eu já falei da principal vantagem que vejo em se fazer aplicativos híbridos: a complexidade de desenvolvimento multiplataforma que é bastante facilitada. Ainda assim, pense que é preciso uma equipe com expertise nas plataformas para as quais iremos desenvolver por conta dos testes que realizaremos. Afinal, garantir o funcionamento do produto em todas as plataformas continua sendo uma obrigação de quem desenvolveu o produto, não é mesmo?
É por isso que por mais que diminua a complexidade de desenvolvimento, o custo de desenvolver para múltiplas plataformas continuará sendo alto em outros aspectos. Nós sabemos que desenvolver software de qualidade ainda é uma tarefa complexa e cara. Mesmo assim é possível utilizar tecnologias híbridas para desenvolver um software mobile multiplataforma de qualidade; basta estarmos dispostos a pagar o preço para isso.
Atualmente, muitas empresas utilizam os APPs híbridos como MVP (Minimum Viable Product) porque conseguem desenvolver rapidamente os aplicativos para várias plataformas, a fim de testá-los e validá-los com seu público-alvo. É realmente uma das finalidades que eu indicaria para que você utilizasse essa tecnologia, pois a um custo baixo, você poderia errar ou acertar rapidamente (agora eu vi vantagem :D).
Muitos APPs híbridos acabam virando nativos mais tarde, quando atingem uma base considerável de usuários, muitas vezes por conta de performance. Eu não vou entrar muito no assunto de performance porque os softwares como o Cordova estão cada vez mais evoluídos e já permitem, como disse anteriormente, a utilização de recursos nativos dos aparelhos em contrapartida dos apps “fakes” feitos com WebView.
Mas é fato que se você precisar desenvolver um código nativo (em C por exemplo), como muitas empresas de games precisam, ou se precisar de uma performance absurda, então realmente escolher o híbrido não seria uma boa ideia. É melhor então começar a pensar em montar suas equipes para cada uma das plataformas que pretende atuar.
E você, o que acha? Nativo ou híbrido?
Dúvidas? Deixe um comentário, que eu terei prazer em responder! Até a próxima!
O post APPs híbridos com Cordova apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

APPs híbridos com Cordova
Fonte: Locaweb

Instalando o Cordova 6.x no Ubuntu e Mac OS X

Instalando o Cordova 6.x no Ubuntu e Mac OS X

Instalar o Cordova no Ubuntu e no Mac OS X é uma tarefa bem simples se já tivermos com o Node.js e npm instalados. Caso você ainda não tenha essas dependências, você pode instalá-las utilizando um destes dois guias, para Ubuntu ou para Mac OS X.
Bom, agora que você já tem as dependências necessárias, vamos utilizar o npm para instalar o Cordova. Neste guia, eu estou utilizando o Ubuntu 16.04, mas os mesmos comandos podem ser utilizados para instalar no Mac OS X também. Para instalar o framework, simplesmente digite em seu terminal

$ npm install -g cordova

Aqui eu precisei de sudo, por conta de algumas permissões de pastas do meu computador. A saída desse comando, deve ser mais ou menos a seguinte (pode mudar dependendo de quantas dependências do cordova você já tiver instaladas)

Para ter certeza que tudo está certo, vamos então criar uma aplicação de teste bem simples. Todos os comandos que vamos precisar para criar essa aplicação serão feitos através da CLI (command-line interface) do Cordova.
Entre em um diretório de sua preferência onde deseja criar a aplicação. No meu caso

$ pwd
/home/pablo
$ cd repos

Uma vez no diretório, digite

$ cordova create appTest
Creating a new cordova project.

Se nenhum erro apareceu, a aplicação inicial foi criada. Aqui não estamos falando de nenhuma plataforma, simplesmente estamos testando nosso framework. Por isso, vamos utilizar o nosso navegador mesmo para testar nossa aplicação, pois não vamos precisar instalar nenhuma dependência de plataforma. Com a aplicação criada, entre no diretório em que ela está

$ cd appTest

Agora vamos adicionar uma plataforma ao nosso projeto, neste caso como disse o próprio navegador (é possível que ele instale algumas dependências automaticamente)

$ cordova platform add browser
Adding browser project…
Running command: /home/phsil/.cordova/lib/npm_cache/cordova-browser/4.1.0/package/bin/create /home/phsil/repos/MyApp/platforms/browser io.cordova.hellocordova HelloCordova
Creating Browser project. Path: platforms/browser
Discovered plugin “cordova-plugin-whitelist” in config.xml. Adding it to the project
Fetching plugin “cordova-plugin-whitelist@1” via npm
Installing “cordova-plugin-whitelist” for browser

Uma vez que o nosso projeto agora tem suporte para o navegador, vamos então rodar nossa aplicação para confirmar que tudo deu certo

$ cordova run browser
Running command: /home/phsil/repos/MyApp/platforms/browser/cordova/build
Cleaning Browser project
Running command: /home/phsil/repos/MyApp/platforms/browser/cordova/run –nobuild
Static file server running @ http://localhost:8000/index.html
CTRL + C to shut down

Como você pode ver, foi criado um servidor estático no endereço http://localhost:8000/index.html. Abra seu navegador (se ele não foi aberto automaticamente) e digite o endereço do servidor.
Se tudo deu certo, você verá a seguinte tela:

Parabéns, você criou sua primeira aplicação utilizando o Cordova.
Você pode saber muito mais sobre o framework, olhando sua documentação neste link. É uma documentação bem completa que vai te ajudar a entender melhor os aspectos do framework e começar a desenvolver para outras plataformas, como Android e iOS.
Ficou alguma dúvida? Escreva aí nos comentários! Até a próxima!
O post Instalando o Cordova 6.x no Ubuntu e Mac OS X apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Instalando o Cordova 6.x no Ubuntu e Mac OS X
Fonte: Locaweb

Instalando Node.js 6.x e npm no Mac OS X com Homebrew

Instalando Node.js 6.x e npm no Mac OS X com Homebrew

Node.js é uma plataforma Javascript que permite que os desenvolvedores criem aplicações de rede escaláveis e de maneira rápida. É uma plataforma extensamente utilizada no mundo todo e mantida por uma grande comunidade.
Outro importante elemento é o gerenciador de pacotes npm (node package manager). Com o npm é possível ter acesso a um repositório online com milhares de projetos de código aberto para o Node e, claro, gerenciar todas as dependências e versões que precisarmos. Dito isso, vou mostrar como instalar o node e também como instalar o npm no seu Mac OS X utilizando o brew. Vamos lá?
Nosso Homebrew de cada dia
Uma das maneiras mais simples de instalar o node no Mac OS X é utilizando o Homebrew. Primeiro, precisamos ter certeza de que os repositórios do brew estão atualizados.

$ brew update

Vamos primeiro pesquisar as versões de node disponíveis para instalação, pois aqui queremos instalar a versão 6.x, que é a versão estável e LTS. Se executarmos o seguinte comando

$ brew install node

Ele instalará a versão mais atual, que na data de escrita deste tutorial era a 7.x. Como queremos a versão 6.x, vamos pesquisar para ver se ela está disponível

$ brew search node
leafnode llnode node node-build node@0.10 node@0.12 node@4 node@5 node@6 nodebrew nodeenv nodenv
Caskroom/cask/mindnode-pro Caskroom/cask/node-profiler Caskroom/cask/nodebox Caskroom/cask/nodeclipse Caskroom/cask/printnode Caskroom/cask/soundnode

Como podemos ver no resultado da busca, temos a versão node@6, a qual iremos instalar.
O restante são outros pacotes do node que podemos instalar com o Brew e por hora vamos só ignorá-los. Logo

$ brew install node@6

Como essa não é a última versão do node, precisamos exportar o nosso bin para o nosso PATH porque o Brew não faz isso automaticamente

$ echo ‘export PATH=”/usr/local/opt/node@6/bin:$PATH”‘ >> ~/.bash_profile
$ source .bash_profile

Uma vantagem do Brew é que quando instalamos o node com ele, o npm será instalado também. Para verificar que tudo foi instalado corretamente vamos conferir as versões que foram instaladas (pode ser que você já tenha instalado uma versão mais atual)

$ node -v
v6.9.4
$ npm -v
3.10.10

É isso ai pessoal, bem simples não é? O Homebrew sempre facilita algumas coisas para nós. Tem alguma dúvida? Me deixe uma mensagem nos comentários. Até a próxima!
O post Instalando Node.js 6.x e npm no Mac OS X com Homebrew apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Instalando Node.js 6.x e npm no Mac OS X com Homebrew
Fonte: Locaweb

Conheça a arte do SOLID

Conheça a arte do SOLID

Quando escuto ou leio a palavra SOLID me vem logo o Snake, do game Metal Gear Solid na cabeça e isso acontece há muito tempo. Não sou nenhum fã do jogo, mas também não sou hater, apenas não joguei o suficiente para entrar em um dos lados da força.
Agora, voltando ao tal do SOLID – que não é jogo -, você já ouviu falar dele? Já o usou? Sabe para que serve? Neste artigo vamos fazer um overview e ver a melhor forma de usar esse cara…
Primeiro precisamos saber que SOLID é uma sigla para Single responsibility, Open-closed, Liskov substitution, Interface segregation and Dependency inversion.
Para facilitar, o SOLID é um acrônimo para os cinco primeiros princípios da programação orientada para objetos, nós buscamos segui-los para que um projeto seja realmente orientado a objetos e não um fruto da nossa linda e maravilhosa criatividade.
Vamos ver o que cada um desses princípios tratam; só para facilitar o entendimento dos conceitos, utilizaremos alguns exemplos em JAVA e outros em Ruby:
– Single Responsibility
O Single responsibility está ligado diretamente ao objetivo que a cada classe possui, sendo que uma classe deve ter sempre um único objetivo. Se o sistema está crescendo e uma classe passou a ter duas responsabilidades é hora de dividi-la em duas classes, cada uma com uma responsabilidade. Exemplo:
class Client
def save(args)
super
ExecuteDepencencies.execute(args[:dependencies])
end
end

class ExecuteDepencencies
def self.execute(dependencies)
dependencies.each do |dependency|
dependency[:module].execute(dependency[:arg])
end
end
end

class UploadFile
def self.execute(file)
#Do the upload
end
end

class Sendmail
def self.execute(email)
#Send email
end
end

Imagine um formulário de cadastro onde o usuário ao submeter os dados já faz o upload do arquivo anexo e envia um e-mail para o mesmo confirmando o cadastro. A responsabilidade de salvar ficou na classe do cliente enquanto fazer o upload e enviar o e-mail ficaram em classes separadas, podendo ser utilizados em outros lugares do sistema em que seja necessário novamente fazer o upload de um arquivo como no cadastro de produtos ou enviar um e-mail como no fechamento de uma compra.
– Open-closed
O princípio de aberto e fechado nos traz o conceito de que devemos sempre deixar nossas classes abertas para serem expandidas, porém fechadas para serem modificadas. Ou seja, você deve isolar a regra para que assim outras classes possam usar ela. Exemplo:
public class User {
public void executeRole(String role){
if(role == ‘Admin’){
// Do Something
}

if(role == ‘Client’){
// Do Something
}
}
}

No exemplo acima sempre que implementarmos alguma regra nova, por exemplo um Fornecedor (Provider), iremos colocar um if a mais no código e esses ifs tendem ao infinito.
A ideia do princípio é colocar a role em uma interface para retirar esses ifs. Exemplo:
public interface Role {
void executeRole(String role);
}

public class Admin implements Role {}
public class Client implements Role {}
public class Provider implements Role {}

Desta forma dentro das classes iremos implementar o método executeRole sem nenhum if, apenas executando o que cada um deveria fazer. A ideia nesse caso é que a interface Role seja pouco modificada (o ideal é que ela não seja modificada) e apenas a sua implementação nas classes que irão utilizá-la sejam alteradas conforme a necessidade da classe.
 
– Liskov substitution
Esse princípio está relacionado a herança e diz que se você tem um objeto B que herda A, em qualquer lugar que você tenha A você pode substituir por B sem precisar alterar o programa. Exemplo:
class Gadget
def call(number)
true
end
end

class Smartphone < Gadget
end

class Psp < Gadget
def call(number)
raise “This gadget do not make calls”
end
end

Basicamente temos uma classe Gadget e ela possui um método de call (ligar), sendo que Smartphone e PSP são Gadgets, logo herdam ela e trazem consigo o método call. Porém, o PSP não faz ligações, por isso mesmo faremos o método retornar uma exception. Com isso ferimos o princípio de Liskov.
Se tivéssemos uma instância de Gadget e a mesma fosse substituída por Smartphone funcionaria normalmente. O método call, ao invés de ter um retorno booleano, como o método da classe pai fazia, acaba retornando uma exception (claro que poderíamos fazer o método call no PSP, mas queria deixar dessa forma, como um exemplo).
 
– Interface segregation
O Princípio da Segregação de Interface trata da coesão de interfaces e diz que classes não devem ser forçadas a depender de métodos que não usam. Exemplo:
public interface Activity {
void buy(Order order);
}

public class ShopOwner implements Activity {}
public class Client implements Activity {}
public class Provider implements Activity {}

Esse exemplo está ferindo o princípio, pois o dono da loja pode comprar do fornecedor e o cliente comprar do dono da loja, mas o fornecedor não compra de ninguém e, nesse caso, você seria obrigado a implementar o método buy no fornecedor, mesmo o método não servindo para ele.
– Dependency inversion
O princípio de inversão de dependência nos diz que SE devemos acoplar alguma classe em outra, devemos fazer esse acoplamento em classes estáveis. De forma mais simples o princípio quer dizer:

Módulos de alto nível não devem depender de módulos de baixo nível. Ambos devem depender de abstrações.
Abstrações não devem depender de detalhes. Detalhes devem depender de abstrações.

Exemplo:
public interface ActionAfterBuy {
void execute(User user);
}

public class Cart implements ActionAfterBuy {}

Nesse exemplo o carrinho é um módulo de alto nível e o ActionAfterBuy (Ação depois de comprar) é uma abstração. Perceba que o ActionAfterBuy é uma classe estável, pelo fato de que ela pouco vai ser alterada ao longo do tempo (a ideia de classes estáveis é justamente essa, não alterá-la durante o ciclo de vida do software); além disso, ela não conhece detalhes de sua própria implementação.
Esse é apenas um resumo do que é o SOLID, caso queira se aprofundar no assunto, recomendo fortemente o livro “Orientação a Objetos e SOLID para ninjas” do Maurício Aniche. Outro bom artigo é o “The Principles of OOD”.

Gostou do que falamos? Ficou com alguma dúvida? Deixe nos comentários!
O post Conheça a arte do SOLID apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Conheça a arte do SOLID
Fonte: Locaweb

Você tem o controle de suas ações?

Você tem o controle de suas ações?

Eu sempre (nem sempre) me fiz essas perguntas: Será que eu tenho o controle de minhas ações? Será que eu realmente controlo tudo o que eu faço? E se eu quisesse fazer algo diferente, saberia por onde começar e como controlar isso?
Por que essas perguntas estavam rodeando minha cabeça?
Porque muitas vezes queremos aprender algo novo ou até mesmo focarmos em aprimorar o que já existe ou… Podem existir “n” motivos para você querer ter o real controle de suas ações, mas a grande pergunta – e dificuldade – é sobre como fazer isso. E, desses “n” motivos, pegarei duas situações para tomarmos como exemplo.
Situação 1:
Você trabalha como freelancer e precisa tocar 5 projetos em paralelo, sendo que o prazo deles é muito próximo um do outro. Para terminá-los você dividiu sua jornada diária entre os cinco, podendo assim, trabalhar em todos eles. Como controlar o seu tempo corretamente e saber como pode melhorar?
Situação 2:
Você está aprendendo uma nova linguagem e seu objetivo é dedicar 2 horas de seu dia para codar um pequeno projeto dela. Mas você também precisa manter as 5 horas diárias e ininterruptas de trabalho (sem contar os e-mails, notícias, mensagens no WhatsApp e notificações que precisa ler) e não pode parar as outras atividades que já faz. Como se organizar para isso?
Na segunda semana do mês de janeiro conheci o Wakatime, uma ferramenta sensacional para controlar o tempo e saber como você está empregando ele. O melhor é que ele realmente cumpre o que propõe.
Ele funciona da seguinte maneira: você instala os plugins – tanto em seu Editor/IDE (tem para quase tudo), em seu navegador (só tem pro Chrome memória Chrome) e no terminal. Depois de instalado a mágica começa a acontecer e esse cara simplesmente pega tudo o que você estiver fazendo no momento e coloca em métricas. Assim é possível saber o que está fazendo e quando está fazendo.
Melhor do que falar é mostrar o print das primeiras horas que usei o Wakatime:

Eu não uso chrome (e não vou usar), por isso ele não se encontra na minha métrica. Como você pode ver ele capturou o tempo que eu estive entre o terminal e o editor; mostra os projetos em que estive trabalhando e quanto tempo fiquei neles.
E isso não é tudo! O Wakatime ainda possui outros recursos, que fazem dele uma das ferramentas mais sensacionais que já vi. Com ele é possível definir objetivos, como “Codar X horas por dia”, podendo ou não definir um projeto ou linguagem específica. Além disso, você também pode integrá-lo em suas contas no Github, Gitlab e Bitbucket, além de Slack e Office365.

Com esse tipo de métrica você terá muitos dados que o ajudarão a identificar os pontos a serem melhorados e poderá traçar estratégias para se tornar mais produtivo, focado e até capaz de identificar algum ponto técnico que você tem trabalhado pouco.
E você, já usou algum tipo de ferramenta assim? Conhece o Wakatime? Se sim, o que achou? Deixe seu comentário!
O post Você tem o controle de suas ações? apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Você tem o controle de suas ações?
Fonte: Locaweb

APIs descomplicadas no Rails 5 com Rails API

APIs descomplicadas no Rails 5 com Rails API

Uma das grandes novidades no Rails 5 é que o Rails API teve seu pull request aceito.
Como você já deve imaginar, agora o Rails API faz parte do core do Rails e isso fará com que o projeto ganhe mais mantenabilidade e visibilidade, uma vez que toda a comunidade que mantém o framework passará a olhar para ele.
A grande vantagem de se usar o Rails API é sua aplicação, que terá apenas os elementos que ela precisa para funcionar, se tratando de uma API. Basicamente você terá uma aplicação “leve”, contando somente com os middlewares que sua API precisará, sendo totalmente customizável. Isso significa também, que caso sua aplicação evolua e você precise de elementos de front end ou do assets pipeline do Rails, será bem simples de colocá-los de volta.
Visto suas vantagens, vamos então criar nossa primeira API com Rails API?
Para começar, vou assumir que você tem instalado ruby 2.2+ e o logicamente o Rails 5. Tendo os pré-requisitos em mãos, de acordo com a documentação, só o que precisamos fazer para criar nossa API é rodar o seguinte comando:

$ rails new pet_api –api

Eu não vou entrar em detalhes sobre como a diretiva –api impacta na criação da nossa aplicação Rails, mas é ela que vai fazer com que a nossa aplicação fique mais “leve”, como eu mencionei anteriormente. Basicamente, sua aplicação não incluirá os middlewares que são úteis para aplicações que utilizam o navegador (que não é o caso de uma aplicação em modo API).
Continuando nossa jornada, agora que já temos a aplicação criada, vamos então baixar nossas gems e configurar o nosso banco padrão da aplicação:

$ cd pet_api
$ rails db:setup db:migrate

Note que como estamos no Rails 5, podemos substituir o comando rake por rails.
Uma vez configurado o banco, podemos rodar nossa aplicação para testar se está tudo certo.

$ rails server

Se tudo deu certo, você verá a imagem abaixo:

Agora que já conseguimos criar e configurar a nossa aplicação em modo API, vamos utilizar os geradores automáticos do rails (scaffold) para gerar o código necessário para nossa API.

$ bundle exec rails g scaffold pet name kind

A saída para esse comando será a seguinte:

invoke active_record
create db/migrate/20170112232027_create_pets.rb
create app/models/pet.rb
invoke test_unit
create test/models/pet_test.rb
create test/fixtures/pets.yml
invoke resource_route
route resources :pets
invoke scaffold_controller
create app/controllers/pets_controller.rb
invoke test_unit
create test/controllers/pets_controller_test.rb

Como vocês podem perceber, uma vez que estamos em modo API nenhuma view é criada pois não teremos a necessidade delas na aplicação. Feito isso, precisamos rodar a migração de banco para o nosso novo modelo:

$ bundle exec rails db:migrate

Vamos analisar o código que foi gerado para podermos fazer alguns testes na nossa API. O nosso modelo é bem simples e não temos muito o que fazer aqui:

# app/models/pet.rb
class Pet < ApplicationRecord
end

No controller, podemos ver que temos as actions para inserir, atualizar, mostrar e excluir um registro (resource) em nosso banco:

#app/controllers/pets_controller.rb
class PetsController < ApplicationController
before_action :set_pet, only: [:show, :update, :destroy]

# GET /pets
def index
@pets = Pet.all

render json: @pets
end

# GET /pets/1
def show
render json: @pet
end

# POST /pets
def create
@pet = Pet.new(pet_params)

if @pet.save
render json: @pet, status: :created, location: @pet
else
render json: @pet.errors, status: :unprocessable_entity
end
end

# PATCH/PUT /pets/1
def update
if @pet.update(pet_params)
render json: @pet
else
render json: @pet.errors, status: :unprocessable_entity
end
end

# DELETE /pets/1
def destroy
@pet.destroy
end

private
# Use callbacks to share common setup or constraints between actions.
def set_pet
@pet = Pet.find(params[:id])
end

# Only allow a trusted parameter “white list” through.
def pet_params
params.require(:pet).permit(:name, :kind)
end
end

Outro arquivo importante para nós é o routes.rb onde são definidas quais serão as rotas da nossa API. Como podemos ver

# config/routes.rb
Rails.application.routes.draw do
resources :pets
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

temos somente nossa resource pets o que já é suficiente para podermos realizar todas nossas requisições básicas. Podemos listar nossas rotas com:

$ rails routes

Prefix Verb URI Pattern Controller#Action
pets GET /pets(.:format) pets#index
POST /pets(.:format) pets#create
pet GET /pets/:id(.:format) pets#show
PATCH /pets/:id(.:format) pets#update
PUT /pets/:id(.:format) pets#update
DELETE /pets/:id(.:format) pets#destroy

Por último, ainda temos que arrumar uma maneira de serializar o que nossa API irá servir, porque em condições normais, geralmente, não iremos querer que nossa resposta JSON seja a representação de cada coluna do nosso banco de dados. Para isso, vamos utilizar o Active Model Serializer do próprio rails-api. Para isso adicione a seguinte linha ao seu Gemfile:

# Gemfile
gem ‘active_model_serializers’, ‘~> 0.10.0’

Basicamente, o que o Active Model Serializer faz é permitir que criemos um serializer para formatar como será nossa resposta JSON, e uma vez que ele cria uma camada entre o nosso model e o nosso controller, não vamos precisar alterar nada neste último, isto é, poderemos continuar chamando o método to_json com nosso objeto ActiveRecord normalmente.
Vamos atualizar o nosso bundle

$ bundle

E como sempre utilizando dos artifícios do rails, vamos usar nosso gerador automático para criar nosso serializer

$ bundle exec rails g serializer pet

Com isso temos nosso serializer

# app/serializers/pet_serializer.rb
class PetSerializer < ActiveModel::Serializer
attributes :id
end

Como vocês podem ver, só o atributo id foi gerado. Queremos retornar também o nome e o tipo do nosso animalzinho e então precisamos adicionar esses dados no serializer

# app/serializers/pet_serializer.rb
class PetSerializer < ActiveModel::Serializer
attributes :id, :name, :kind
end

Agora sim já estamos prontos e podemos testar nossa API. Vamos criar um pet. Eu vou utilizar o postman mas você pode fazer um simples curl se preferir. Vamos iniciar o servidor

$ bundle exec rails s

Se você estiver utilizando o postman também, crie uma nova requisição POST com os seguintes dados:
Endereço: http://localhost:3000/pets
Headers: Content-Type: application/json
Body: {“name”:”totó”,”kind”:”cão”}
e envie a requisição. A sua resposta deve ser a seguinte
{
“id”: 1,
“name”: “totó”,
“kind”: “cão”
}
Isso quer dizer que eu criei um pet com o nome totó e ele é do tipo cão e a id pela qual podemos fazer operações sobre ele é a 1. Podemos fazer todas as operações que criamos no nosso controller, mas eu vou deixar como exercício para vocês testarem.
Existem outras operações mais avançadas como versionamento e autenticação que não fazem parte do escopo deste artigo, mas que eu voltarei a falar em breve em outra postagem.
Como vocês puderam perceber, criar uma API com Rails 5 é relativamente simples, lembrando que utilizando o rails em modo API diminui e muito a stack da nossa aplicação. Isso faz com que poupemos recursos e ela seja mais leve e limpa.
Espero que tenha sido útil para vocês e sintam-se livres para fazer perguntas por meio dos comentários. Até a próxima!
O post APIs descomplicadas no Rails 5 com Rails API apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

APIs descomplicadas no Rails 5 com Rails API
Fonte: Locaweb

8 Dicas de PHP que você deveria conhecer

8 Dicas de PHP que você deveria conhecer

Um tempo atrás foi postado uma pesquisa no Twitter aqui da Locaweb  para saber qual a sua linguagem de programação preferida.
O resultado me surpreendeu, pois o bom (ou não tão bom) e velho PHP desbancou o Ruby, o Python e o Java (desbancar o Java não foi surpresa). A surpresa foi grande porque a maioria dos Devs que conheço reclamam do PHP por N motivos, mas acredito que a vitória se deu justamente devido a popularidade do PHP que segundo a Tiobe (acrescentar link) em outubro  estava na 6 posição de linguagem mais usada no mundo.

Como minha experiência com PHP é maior que nas outras linguagens resolvi trazer algumas dicas que podem facilitar o trabalho dos PHPzeiros.
1. php -f nome-do-arquivo.php
Muitas vezes você está querendo testar um script isolado que é responsável por uma única função dentro do sistema.
No terminal você usa php – f nome-do-arquivo.php e executa somente este arquivo no terminal.
2. php – a
Quem nunca precisou testar algo? Esse cara facilita muito na questão de testes, pois ele abre um terminal do PHP que você pode usar o PHP a vontade.

3. Esqueça (de vez) o ‘?>’ no final dos arquivos.
Nas versões atuais do PHP não é mais necessário usar o ?> para fechar seus scripts, isso evita diversos erros que pode ser ocasionados por espaços em branco ou caracteres estranhos antes do fechamento, esse erro seria lançado no browser e ficaria explícito ao usuário, no caso de não usar o fechamento seria lançado um erro pelo parser no PHP.
4. Interpolação de strings
Existem uma série de formas de você construir uma string no PHP entre elas as mais conhecidas e utilizadas são a concatenação, interpolação e o heredoc.
Recentemente eu realizei uma bateria de testes para saber qual delas realmente é mais vantajosa. A interpolação de strings usando aspas dupla e {} para identificar as variáveis é a forma mais rápida de realizar a tarefa principalmente se você estiver com um sistema que faça isso com muitos usuários acessando ao mesmo tempo.

5. Evitando aquele maldito erro dos Ifs
Quem nunca esqueceu de um ‘=’ no if fazendo if x = 1 ?
Esse erro é muito comum e pior de tudo é que não acusa erro porque x = 1 é sempre true  para evitar esse tipo de erro é  bom costume inverter a ordem da variável no if, ficando if 1 = x , desta forma quando for esquecido um = o PHP irá indicar o local do erro e será muito mais rápido de corrigir.

6. Utilize os operadores === e !==
Os operadores === e !== são pouco utilizados porém são muito úteis já que eles comparam valor e tipo.
O PHP tem tipagem dinâmica sendo assim quando usamos o operador == podemos ter resultados que não queremos, por exemplo

7. isset() brincando de strlen()
Em alguns casos você pode substituir o strlen por isset.
Essa substituição lhe dará dois ganhos, primeiro o isset e mais performático que o strlen e segundo que caso a variável não esteja setada você iria tomar um erro com o strlen, coisa que com o isset não aconteceria.

8. Métodos em cadeia
O PHP a partir da versão 5 ganhou um suporte maior e melhor a orientação a objetos e esse suporte permite que você faça um encadeamento de objetos de uma mesma classe desde que nos métodos dessa classe retornem o próprio objeto.

Tem mais alguma dica que se acha legal? Agora um desafio pra vocês que leram, em um dos exemplos eu coloquei um errinho e o primeiro que comentar e acerta o erro irá ganhar uma camiseta da Loca, gostou? Deixa seu comentário e boa sorte.
O post 8 Dicas de PHP que você deveria conhecer apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

8 Dicas de PHP que você deveria conhecer
Fonte: Locaweb