Blog

Ser ágil é ser rápido?

Ser ágil é ser rápido?

Oras, se você estiver se referindo ao significado do adjetivo ágil, contido no dicionário e que se refere a algo “que se movimenta com excesso de facilidade; que se move de maneira rápida; veloz”, pode até ser que sim. Agora, se você estiver se referindo ao ágil dentro do contexto de software, então com certeza não!
Ainda lembro quando estava estagiando na SAP da Hungria, primeiro lugar em que realmente tive experiência com desenvolvimento de software, e, em minha entrevista, o gerente falou que eles eram ágeis.
Eu já havia feito um minicurso de Scrum em um evento da universidade e para mim até então, saber Scrum era ser ágil. Logo, sem hesitar, falei para eles que achava legal o fato de utilizarem a metodologia e estava me gabando por saber o que significava ágil (mal sabia eu, que se eles não utilizassem Scrum mesmo, talvez eu nem tivesse conseguido a vaga :D).
Outra coisa que eu havia colocado em minha cabeça é que ser ágil é realmente ser mais rápido. Pode até que isso realmente aconteça em algumas situações, mas essa não é a regra do mindset, de maneira alguma.
E você não precisa ler aqueles livros de páginas sobre as mais diferentes abordagens que dão para o ágil por aí. Basta ler o manifesto ágil. Sim, simples assim. Tem até o link aqui para ficar ainda mais fácil.
Agora, faça o seguinte: abra a busca de texto do seu navegador na página do manifesto e procure pelas palavras “rápido” e “veloz”. Achou? Pois é!
Para iniciar no ágil, essa é a primeira coisa que você tem que colocar em sua cabeça: desenvolvimento de software ágil não é necessariamente desenvolvimento de software rápido. Não! Uma das melhores definições para o ágil que eu já vi é a seguinte:
 
“The point of Agile is reducing the cost of change and uncertainty.”.
 
Não é uma maravilha? Esse sim é o ponto do ágil: reduzir os custos das mudanças e incertezas. O que o seu cliente quer hoje, amanhã pode não querer mais e não é porque ele é indeciso (pode até ser, vai :D), mas porque o mercado muda e os objetivos também. E toda essa mudança e incerteza não são colocados na conta dos processos antigos que existiam e ainda existem por aí.
 
Mas então por que o ágil consegue responder às mudanças e outras metodologias não?
Ué, por entregar software mais rápido! Êpaaaa! Como assim, Pablo? Você acabou de dizer que não tem nada a ver com rapidez!
Então, são unidades do software final que gerem algum valor para que o cliente entenda se está tudo bem; se a ideia é essa mesmo, se é esse o valor que ele estava esperando. E isso sim é mais rápido.
O que eu estou querendo mostrar é que não adianta pensar que um projeto que você demoraria um ano para entregar utilizando waterfall, agora você vai entregar com dois meses utilizando ágil. O que vai acontecer é que, mesmo que você demore o mesmo ano (o que provavelmente será menos), o valor que você vai gerar para o seu cliente será certeiro.
O software entregue será o que ele realmente estava precisando, ao invés de chegar no final do ano de desenvolvimento com waterfall – e descobrir que seu cliente queria uma moto vermelha mas você acabou entregando um barco azul.
Tenha na cabeça que ágil não é uma metodologia milagrosa. As incertezas sempre estarão lá e o seu cliente sempre vai mudar, isso é algo natural. O que o ágil faz é permitir que você responda às mudanças sem ter que esperar muito tempo. E como já dizia Benjamin Franklin “Tempo é dinheiro”!
O post Ser ágil é ser rápido? apareceu primeiro em Blog Locaweb – Notícias sobre tecnologia, programação e muito mais..

Ser ágil é ser rápido?
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

Na mesa do Chief – Entrevista com a Designer Cristiane Amaral

Na mesa do Chief – Entrevista com a Designer Cristiane Amaral

Eae! Td bele? Mais um hangout para vocês. :) No vídeo de hoje converso com a Designer Cris Amaral. Nesse hangout falamos sobre a profissão, mercado, clientes, entre outras coisas. Assista abaixo esse bate-papo: Sobre a Designer Cris Amaral Formada em Design de Interiores (CAD) e Design Gráfico pela Universidade Federal de Santa Catarina, experiência como […]
O post Na mesa do Chief – Entrevista com a Designer Cristiane Amaral apareceu primeiro em Chief of Design.

Na mesa do Chief – Entrevista com a Designer Cristiane Amaral
Fonte: Chef of Design

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

Na mesa do Chief – Entrevista com a Designer e Desenvolvedora Anyssa Ferreira do estúdio Haste Design

Na mesa do Chief – Entrevista com a Designer e Desenvolvedora Anyssa Ferreira do estúdio Haste Design

Eae! Td bele? Hoje tem hangout, hoje tem entrevista, hoje tem “Na mesa do Chief” :) Durante este mês de março, que é o mês onde temos o dia internacional da mulher, eu vou trazer para você uma série de vídeos com mulheres que atuam na área. E começamos essa série com um bate papo […]
O post Na mesa do Chief – Entrevista com a Designer e Desenvolvedora Anyssa Ferreira do estúdio Haste Design apareceu primeiro em Chief of Design.

Na mesa do Chief – Entrevista com a Designer e Desenvolvedora Anyssa Ferreira do estúdio Haste Design
Fonte: Chef of Design

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