Blog

6# ERROS que te impedem de fazer um Portfólio e travam a sua carreira!

6# ERROS que te impedem de fazer um Portfólio e travam a sua carreira!

Eae, td bele? Você tem um portfólio ou ainda não dedicou um tempo para criar o seu? Independente da resposta é muito provável que você tenha cometido, ou ainda comete, certos erros ao criar o seu portfólio. Existem certas coisas que prejudicam a gente e nos fazem adiar, e até mesmo desistir, de ter um portfólio. […]
O post 6# ERROS que te impedem de fazer um Portfólio e travam a sua carreira! apareceu primeiro em Chief of Design.

6# ERROS que te impedem de fazer um Portfólio e travam a sua carreira!
Fonte: Chef of Design

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

Brincando com a Internet das Coisas gastando pouco

Brincando com a Internet das Coisas gastando pouco

A Internet das Coisas (IoT) veio pra ficar. Grandes empresas como Amazon, Google e Nest estão investindo pesado em produtos e itens para você e sua casa ficarem sempre conectados.
Há pouco tempo a Amazon lançou uma linha de botões que com apenas um clique realiza a compra de produtos específicos, como sabão em pó e detergente. Ela também lançou o Alexa, sistema inteligente de assistência doméstica, que pretende integrar vários elementos de sua casa.
A Nest investe na área de automação residencial com câmeras de monitoração, alarmes de incêndio e até termostatos conectados à Internet. O Google, por sua vez, tem o Home, um speaker inteligente que responde a comandos de voz e está integrado à sua conta na plataforma.
Projetos desse tipo (larga escala e pronto para o mercado) requerem um investimento muito grande. É preciso contratar engenheiros para desenvolver o produto final, realizar testes dos mais variados na plataforma… Mas, calma, não se assuste! Brincar com IoT não sai caro e ainda pode ser um ótimo exercício para praticar e aprender programação e eletrônica básica.
Por exemplo: com um pequeno investimento e um pouco de conhecimento em programação e eletrônica, você pode desenvolver um protótipo para automatizar a abertura da cortina do seu quarto em um horário específico. Gostou da ideia? Vou mostrar pra você o que é necessário para dar os primeiros passos – sem pesar em seu bolso e sem passar dor de cabeça!
Plataformas de prototipagem
O mercado possui as mais variadas marcas e modelos de plataformas de prototipagem, custando a partir de R$15. Essas plataformas costumam ser vendidas com alguns kits com sensores e componentes eletrônicos básicos e é aí que eu recomendo o investimento. Mas vamos para as plataformas:
// Arduino
O Arduino (https://www.arduino.cc/) é uma plataforma de hardware open-source desenvolvida pensando em todos os níveis de conhecimento. O que eles mesmos afirmam é que o Arduino foi feito para que qualquer um pudesse realizar projetos interativos. De longe é o que eu mais recomendo para quem deseja brincar com pequenos projetos e que necessitam de pouco processamento.
As placas Arduino UNO e Genuino UNO. Imagem de: https://www.arduino.cc/en/uploads/Main/A000066_iso_both.jpg

Essa é uma placa eletrônica que fornece 6 portas de entrada e saída (I/O) digitais e 6 I/Os analógicas. Essas portas estão posicionadas de uma forma que você pode simplesmente encaixar outras plaquinhas (os chamados Shields) no Arduino. Os Shields oferecem desde conexão à Internet até a capacidade de se comunicar com satélites GPS e precisam ser comprados a parte.
E como escreve código nessa “coisinha”? A fabricante fornece o Arduino IDE, que lhe dá vários exemplos de código e, com o clique de um botão compila e instala o código escrito em C/C++ no seu Arduino. Simples assim.
São vendidos diversos kits Arduino – que variam de R$ 70 (os mais simples com menos componentes) a R$ 400 (com diversos Shields, sensores e componentes eletrônicos).
A recomendação é analisar o que você precisa e comprar um kit que contenha apenas os componentes necessários.
// ESP8266
Esse carinha é especial. Ele é bem pequeno e por isso conta apenas com 2 I/Os, mas para compensar ele já vem com um módulo Wi-Fi bem completo que pode ser utilizado, inclusive, como Access Point!
O ESP8266 com 2 I/Os e Wi-Fi integrado. Imagem de: https://hackadaycom.files.wordpress.com/2014/09/esp.png?w=250
Escrever código para o ESP é um pouquinho complicado. Você vai precisar de um conversor USB para RX/TX, que é vendido a parte, e um editor de texto de sua preferência.
Existem algumas linguagens de programação, como LUA, Python e C/C++, que são suportadas; inclusive o fórum oficial fornece uma boa documentação de como compilar e instalar o código da placa. Mas, pra você que não quer ter tanto trabalho gerando o binário na mão, alguém adaptou o Arduino IDE para o ESP: É o ESP8266 IDE! Nele você vai escrever o código em C/C++ e a IDE se responsabiliza pela parte “burocrática” de compilar e instalar.
O ESP dificilmente é encontrado em kits, mas ele custa apenas R$15 e os sensores podem ser comprados com facilidade na internet. Também é possível utilizá-lo como um Shield no Arduino ou em conjunto com outros Shields.
// Raspberry Pi
Você alguma vez já ouviu falar em um computador do tamanho de um cartão de crédito? Provavelmente estavam falando sobre o Raspberry Pi (https://www.raspberrypi.org). Ele é bem completo: Roda Linux, tem HDMI, USB e Ethernet.
Algumas versões possuem SATA, USB 3.0, interface de câmera, Bluetooth, Wireless… Se a sua intenção é fazer um projeto mais arrojado, como uma central de controle, essa pode ser sua escolha!
O Raspberry Pi 3. Um computador do tamanho de um cartão de crédito. Imagem de: https://www.raspberrypi.org/wp-content/uploads/2016/02/Raspberry-Pi-3-top-down-web.jpg
Programar para o Raspberry é mais fácil do que parece. Existem diversas IDEs que fazem todo o trabalho pesado e você ainda tem a opção de escolher programar em Java, Python, C/C++, PHP, Perl… Vale lembrar que os mesmos sensores são utilizados no Arduino e no ESP8266, e também podem ser utilizados no Raspberry Pi, pois ele possui 40 I/Os para você brincar bastante!
Vamos falar de valores… Oficialmente, o Raspberry Pi precisa ser importado dos EUA a partir dos US$20 + frete + impostos + taxas. No Brasil você vai encontrar na internet por valores que giram em torno de R$200.
Próximos passos
Agora que você já conhece um pouco mais sobre IoT e algumas plataformas de prototipagem, é possível pensar em um projetinho bacana para fazer. Existem vários fóruns de ajuda para as plataformas citadas e eles estão recheados de informações sobre os mais diversos sensores e projetos para lhe inspirar!
Dicas que eu posso dar pra quem está começando:

Aprenda um pouquinho de eletrônica: o que é e para que serve um resistor, quais as leis da física que operam sobre a corrente elétrica…
Acompanhe o andamento de projetos open-source, você vai aprender muito!
Pergunte! Se você não conseguiu encontrar a solução do seu problema, participe dos fóruns e poste suas dúvidas!

Existem alguns projetinhos simples que todo iniciante faz e é uma mão na roda para aprender o básico:

Piscar leds;
Ligar/Desligar leds ao pressionar um botão ou bater palmas;
Consumir a API do Twitter e exibir informações em uma tela LCD.

Se você se interessou pelo assunto e quer se aprofundar, em breve teremos mais posts sobre prototipagem! Caso alguma dúvida tenha surgido, escreva nos comentários!
O post Brincando com a Internet das Coisas gastando pouco apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Brincando com a Internet das Coisas gastando pouco
Fonte: Locaweb

Configurando o seu LAMP no Cloud em 4 passos

Configurando o seu LAMP no Cloud em 4 passos

Já teve problemas ao configurar seu Cloud? Para quem não tem tanta experiência, pensar em cloud pode parecer complicado, pois é preciso configurar o servidor, instalar muitas coisas e, normalmente, utilizando apenas o terminal – já que a maioria dos clouds não possui modo gráfico (eu não conheço nenhuma exceção ao que vou dizer, mas pode ser que tenha).
Para isso listei 4 passos para instalar e configurar o LAMP em seu servidor e deixar ele pronto para rodar sua aplicação.
No exemplo abaixo estou usando um Ubuntu 16.04 em S.O. com distribuição baseada no Debian. Esses 4 passos podem ter uma ou outra alteração, mas dão muito certo. Também podem variar os caminhos (no caso do PHP, se for uma versão que não usporte PHP7, você deve colocar sempre PHP5 nos comandos, irei falar abaixo).
Qualquer outra distribuição segue a mesma base, porém os comandos mudam um pouco (a única que conheço é o CentOS que em vez de usar apt-get usa yum).
Antes de iniciar atualize os pacotes do sistema rodando:
$ sudo apt-get update
1º Passo – Instalação e configuração do Apache
Para Instalar o Apache rode no terminal:
$ sudo apt-get install apache2
Logo de cara o Apache já é instalado e já se encontra funcionando, basta acessar seu servidor pelo link “http://SEU-IP”, você poderá ver a imagem abaixo, que é padrão do Apache:

2º Passo – Instalação e configuração do MySQL
Instale o MySQL com o seguinte comando:
$ sudo apt-get install mysql-server
Durante o processo de instalação você será perguntado sobre a senha para o usuário root do MySQL, fora isso, a instalação vai transcorrer normalmente. Após a instalação o MySQL é importante fazermos o seguinte passo:
É importantíssimo usar o comando abaixo para remover configurações defaults do MySQL que abririam brechas de segurança no seu banco. Nesse passo você será perguntado se deseja trocar a senha do usuário root do seu banco. Como você acabou de configurar ela, acredito que não queria então é só dar um by-pass nesse cara e ele vai manter a mesma senha.
$ sudo mysql_secure_installation
3º Passo – Instalação e configuração do PHP
Para instalar o PHP rode no terminal:
$ sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql
Se a sua versão não suporta PHP 7 você deve usar esse comando abaixo:
$ sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt php5-mysql
Note que acima estão alguns dos modulos mais usados do PHP, mas existem outros como o php-gd, php-curl, etc. Caso sua aplicação utilize algum módulo específico será necessário instalá-lo. Para ver todos os módulos disponíveis rode o comando:
– apt-cache search php-
Agora vamos fazer com que o Apache identifique os arquivos .php como prioridade quando o servidor for chamado, para isso vamos abrir o arquivo abaixo:
/etc/apache2/mods-enabled/dir.conf , você pode utilizar o editor que achar melhor, vou usar o nano pois acredito que seja mais fácil, caso tenha pouca experiência com terminal. Normalmente o VI também vem instalado com o S.O.
Rode o comando:
$ sudo nano /etc/apache2/mods-enabled/dir.conf
Você deve ver o arquivo da seguinte forma:

E você deve alterar para ficar desta forma, basicamente trocando o primeiro para PHP. O HTML você pode deixar aonde estava o PHP, ou deixar em segundo, e ir mudando todos – isso não tem importância nesse caso.

Para salvar o arquivo após a alteração, digite Ctrl+x (sair e salvar o arquivo); depois Y (salvar mesmo com mudanças) e, por fim, Enter (Confirmar que você quer salvar e sair).
Após essa alteração você deve reiniciar o Apache com o comando:
$ sudo service apache2 restart
4º Passo – Testar o seu servidor
Para testarmos se tudo o que fizemos está funcionando, vamos criar uma página em PHP que mostra as configurações do PHP no servidor.
Rode o comando (novamente você pode usar o editor que preferir):
$ sudo nano /var/www/html/info.php
Esse comando irá criar um arquivo em branco na pasta raiz de acesso do Apache, nesse arquivo você deve inserir o seguinte comando:
<?php phpinfo();
Após inserir esse comando salve e saia do arquivo (ctrl+x, y, ENTER)
Para testar seu servidor acesse “http://SEU-IP/info.php”
A página exibida deve ser algo parecido com o que está abaixo:.

Pronto! Agora seu cloud está configurado e pronto para receber sua aplicação. :)
O post Configurando o seu LAMP no Cloud em 4 passos apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Configurando o seu LAMP no Cloud em 4 passos
Fonte: Locaweb

5 erros que você pode estar cometendo ao criar uma paleta de cores

5 erros que você pode estar cometendo ao criar uma paleta de cores

Eae? Tudo bele? Começarei este artigo te fazendo uma pergunta: você já criou uma paleta de cores? Se sim. Foi fácil para você? Se a resposta de novo foi sim, ou você é muito evoluído neste quesito, e eu tenho que sinceramente te parabenizar, ou você pertence a aquele grupo dos precipitados que não pararam para […]
O post 5 erros que você pode estar cometendo ao criar uma paleta de cores apareceu primeiro em Chief of Design.

5 erros que você pode estar cometendo ao criar uma paleta de cores
Fonte: Chef of Design

Como fazer um Currículo Criativo? Aprenda a criar o seu e potencialize as suas chances!

Como fazer um Currículo Criativo? Aprenda a criar o seu e potencialize as suas chances!

Eae, td bele? Talvez o primeiro passo que vem na mente de quem está a procura de um emprego seja a de elaborar um currículo (CV), né?! Só para quem é Designer, ou trabalha em alguma área criativa no geral, não basta a simples criação de um currículo feito em editor de texto, tipo Microsoft Word. […]
O post Como fazer um Currículo Criativo? Aprenda a criar o seu e potencialize as suas chances! apareceu primeiro em Chief of Design.

Como fazer um Currículo Criativo? Aprenda a criar o seu e potencialize as suas chances!
Fonte: Chef of Design

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

Proporção Áurea: Guia sobre o Número de Ouro no Design

Proporção Áurea: Guia sobre o Número de Ouro no Design

Eae, tudo bele? Neste artigo trago um assunto muito falado no meio criativo: a proporção áurea. Tem gente que afirma que ela faz toda a diferença em projeto, enquanto outras pessoas dizem que é uma falácia esse tal número. O fato é que se você trabalha com Design é bom conhecê-lo. Por isso hoje vamos […]
O post Proporção Áurea: Guia sobre o Número de Ouro no Design apareceu primeiro em Chief of Design.

Proporção Áurea: Guia sobre o Número de Ouro no Design
Fonte: Chef of Design

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

[LIVE] Como se adaptar ao mercado atual de Design?

[LIVE] Como se adaptar ao mercado atual de Design?

Eae! Td bele? Hoje trago para você o hangout ao vivo que fiz com a a galera do blog Designimador sobre:como se adaptar ao mercado de Design? O projeto Designimador, do qual faço parte, nasceu para ser um portal de compartilhamento de conhecimento sobre design, criatividade, freelancer, comunicação, arte e conteúdos relacionados. Nessa conversa que tive com […]
O post [LIVE] Como se adaptar ao mercado atual de Design? apareceu primeiro em Chief of Design.

[LIVE] Como se adaptar ao mercado atual de Design?
Fonte: Chef of Design