Maio 2014 / Ano 03 / Edição 10
O poder de fabricar Nós fazemos a Internet no Brasil
as suas coisas #capa #pag18
Esqueça PS4 e Xbox One: o futuro dos games está nas plataformas abertas #games #pag46
Bots no Twitter: como automatizar interações #api #pag28
O futuro dos BitCoins
R$24,00
#opinião #pag64
Expediente TIAGO BAETA Publisher Luis Leão e Kemel Zaidan Editores RINA NORONHA (MTB 2759-ES) Chefe de Redação/Jornalista Responsável EDU AGNI Projeto Gráfico / Diagramação NATHÁLIA TOREZANI Revisão COLABORADORES Adam Junqueira, André Horta, Alan Hoffmeister, Anderson Casimiro, Diego F. Aranha, Fernanda Weiden, Flavia Jobistraibizer, João Antônio Mangueira, João Batista Neto, Kemel Zaidan, Leandro Vieira, Lucas Vanzin, Luis Cipriani, Luis Leão, Marco Gomes, Mateus Zitelli, Paulo Silveira, Paulo S. L. M. Barreto, Reinaldo Ferraz, Rina Noronha, Rodrigo Batista, Rodrigo Alves Ruza, William Bruno. IMAGEM da Capa Arduino (Wikipedia) - http://bit.ly/1jtKVB6 Eskenazi Indústria Gráfica Gráfica Grupo imasters Organização > 1000 exemplares > ISSN 1981-0288
Rua Claudio Soares 72, conjunto 1302, Pinheiros - São Paulo/SP CEP: 05422-030 Telefone: (11) 3063-5941 www.imasters.com.br/revista redacao@imasters.com.br Twitter: @iMasters Facebook: /PortaliMasters Os artigos assinados são de responsabilidade dos autores e não refletem necessariamente a opinião da revista. É proibida a reprodução total ou parcial de textos, fotos e ilustrações, por qualquer meio, sem prévia autorização dos artistas ou do editor da revista.
Editorial Esta é uma edição que chega recheada de novidades e com um convite para você colocar a mão na massa! O “movimento maker” está cada vez mais forte no Brasil, não apenas pelo surgimento de novos sites sobre o tema, novas empresas que desenvolvem hardware no Brasil começaram a comercializar produtos “open hardware”, mas temos também novos espaços para que você tenha acesso a esses hardwares (como hackerspaces e fablabs). Além de um artigo especial sobre o assunto, confira o texto do Mateus Zitelli, que conta um pouco da experiência de construir uma uma máquina de corte CNC em casa (se você não sabe o que é isso, não leu o artigo da edição número 8 sobre fabricação digital). Na entrevista, Tom Cucato, da Open Knowledge Foundation, fala sobre organização e os motivos de uma representação oficial da OKF no Brasil, a primeira fora da Europa. Dados abertos e direitos civis na internet estão na pauta! Entre as novidades que chegam com essa edição, estão três colunas novas: Flávia Jobistraibizer, editora da Linux Magazine, assina a Tecnologia do Futuro, com novidades para os devs. Ander-
son Casimiro traz a Desenvolvimento Zen para a Revista, um espaço para falar de PHP, claro, mas muito além da linguagem, boas práticas e dicas importantes para programadores de qualquer linguagem. E Fernanda Weiden é nossa nova Conexão Vale do Silício e vai contar, a cada edição, suas experiências e mostrar um pouco das semelhanças das empresas gringas com as brasileiras. Se você sentiu falta de algum tema que gostaria de ser abordado, entre em contato com a gente. Pode ser um nome para entrevista, uma indicação de review ou mesmo um artigo seu. A Revista iMasters é feita para a comunidade, mas principalmente pela comunidade. Aguardamos um email no redacao@imasters.com.br Boa leitura e mãos à obra!
Luis Leão é desenvolvedor web que encontrou em APIs e hardware aberto novas formas de integrar a web com o mundo real. www.luisleao.com.br redacao@imasters.com.br
6 > Sumário
18
Capa - O poder de fabricar as suas coisas
28 API Bots no Twitter: como automatizar interações
46 Games Esqueça PS4 e Xbox One: o futuro dos games está nas plataformas abertas
64 Opinião Que futuro o Bitcoin e outras moedas criptográficas terão nos próximos anos?
Sumário < 7
08 :: Entrevista > Tom Cucato, diretor executivo do OKFN Brasil 14 :: NodeJS > Testando o seu código Node com o Mocha 16 :: Desenvolvimento Zen > PHP + Google App Engine 22 :: DIY > Faça você mesmo: como eu construí uma fresadora CNC 24 :: Desenvolvimento > JavaScript como língua franca 26 :: Por dentro do W3C > Os 25 anos da Web 38 :: Comunidade > SouJava: o portal para o futuro da tecnologia Java 40 :: Conexão Vale do Silício > Aposte no bom comportamento 42 :: Review > Brackets: o editor para web que faz jus ao seu propósito 50 :: Tecnologia do futuro > Sempre disponível 53 :: Código Livre > Informações e dicas sobre projetos Open Source 54 :: WordPress > Por que contratar serviços especializados em WordPress? 56 :: Node.JS > Configurando NodeJS em produção em um Cloud Server 60 :: Sr. Conteúdo > Você, cada vez mais próximo 66 :: Servidores > O servidor dedicado morreu? 68 :: Desenvolvimento > Aprenda a programar de forma divertida 72 :: iMasters Box
A iMasters é uma revista de Tecnologia/Web aberta a novas ideias. Para colaborar envie o seu material por e-mail <revista@imasters.com.br>
8 > Entrevista
Como é o trabalho de uma Rede pelo Conhecimento Livre no Brasil Por Kemel Zaidan, Editor da Revista iMasters
Crédito: acervo pessoal Tom Cucato
A OKFN (Open Knowledge Foundation Network) é uma ONG com sede no Reino Unido, porém com abrangência mundial. Dedicada a fomentar o conhecimento livre ao redor do mundo, muitas de suas bandeiras – como dados abertos e os direitos civis na Internet – são de grande interesse para um país com tamanha carência em iniciativas de educação e inclusão digital, como é o caso do Brasil. Por esses mesmos motivos, a oficialização de uma representação oficial no país no ano passado (a primeira fora da Europa) é algo que pode ter um grande impacto positivo no longo prazo. Para saber mais sobre a instituição, suas ações e as pessoas por trás do projeto, fomos até Tom Cucato, diretor executivo do OKFN Brasil. O resultado é a entrevista desta edição.
Entrevista < 9
Revista iMasters: O que é a Open Knowledge Foundation e quais os objetivos dessa instituição?
com o objetivo de conectar todos os incríveis atores dos movimentos de cultura livre e de abertura de conhecimento e dados no País.
Tom Cucato: A Open Knowledge Foundation (OKF) é uma organização da sociedade civil sem fins lucrativos e apartidária, fundada em 2004 em Cambridge, Reino Unido, dedicada à promoção de dados abertos e conhecimento livre - o que inclui, por exemplo, dados governamentais, pesquisa financiada com dinheiro público e bens culturais no domínio público.
Valorizamos as raízes da nossa comunidade, enfatizando a colaboração descentralizada para aproveitar ao máximo a força de todos os grupos e indivíduos que promovem a abertura de conhecimento e dados no Brasil. E a nossa principal tarefa é facilitar essa colaboração, seja através de projetos alinhados com a nossa missão de abrir todas as formas de conhecimento, seja apoiando comunidades e grupos de trabalho.
A organização funciona em rede (daí o “N” em OKFN, OKF Network), trabalhando de forma descentralizada com seus embaixadores, grupos locais e capítulos (“chapters”) em mais de 40 países (veja em okfn.org/local/). Atualmente temos oito capítulos que são organizações que representam oficialmente a Open Knowledge Foundation em outros países, sendo o Brasil o primeiro e único fora da Europa, formalmente estabelecido no final de 2012 e lançado no começo de 2013. RiM: Quais os objetivos da OKF para o Brasil? TC: Foi em julho de 2011, durante a Conferência da Open Knowledge em Berlim, que pensamos pela primeira vez em organizar um capítulo brasileiro. Era realmente algo empolgante enxergar aquela rede global de pessoas abrindo o conhecimento em diversas áreas: dados governamentais, recursos educacionais, conhecimento científico e bens culturais. Mesmo aqueles entre nós que não participaram da conferência entraram no questionamento dos tantos grupos e indivíduos no Brasil que estavam fazendo projetos incríveis relacionados ao conhecimento livre, e que poderiam contribuir e colaborar com essa rede global. Desde aqueles dias, e no mesmo espírito que guia a rede global da Open Knowledge, o grupo local no Brasil tem trabalhado para construir uma rede de apoio local para iniciativas de abertura de dados, chamada “Rede pelo Conhecimento Livre”. Claro, isso começou com e permanece no centro da comunidade,
Para tornar esse capítulo possível, o trabalho duro de muitas pessoas foi necessário. O ambiente que conduziu a criação da Open Knowledge Brasil é uma mistura intensa e diversificada de atores e grupos que promovem a abertura de dados em diversas formas no nível local, mas também na América Latina e internacionalmente, como a Transparência Hacker, em que as pessoas estão trabalhando para melhorar a transparência do governo e ensinar jornalismo de dados; a Wikimedia Brasil, o ambiente local de promotores e colaboradores wiki, como a Wikipédia; Recursos Educacionais Abertos Brasil, para melhorar o acesso aos recursos educacionais; o Grupo de Trabalho em Ciência Aberta no Brasil, pelo qual pesquisadores têm trocado experiências sobre práticas científica abertas; o movimento Hackerspace brasileiro, exemplificado pelo Garoa Hacker Clube, e muitas outras iniciativas que constituem a verdadeira força do movimento global de abertura de conhecimento que a Open Knowledge Brasil deseja conectar e apoiar. RiM: O que é o movimento de dados abertos e qual a sua importância? E qual a situação dos dados abertos no país? TC: Dados governamentais num formato aberto (veja aqui um uma introdução br.okfn.org/dados-abertos/) podem gerar uma maior transparência e agregar um valor social a esses dados, além de possibilitarem uma maior participação das pessoas em questões públicas.
10 > Entrevista
“O grupo no Brasil tem trabalhado para construir uma rede de apoio local para iniciativas de abertura de dados, chamada Rede pelo Conhecimento Livre” Sobre o Brasil, estamos muito mal colocados em um censo de dados abertos produzido pela rede da Open Knowledge (veja em index. okfn.org), uma comparação entre 10 conjuntos de dados de diversos países, como mapas, tabelas de transporte, orçamento e gasto públicos, legislação etc. Há mais de 35 países à nossa frente se levarmos em conta esses conjuntos de dados, então há muito a ser feito no Brasil com relação à melhoria na publicação de dados. RiM: Quais os desafios que existem para uma maior disseminação e utilização dos dados abertos no Brasil? TC: Um dos maiores desafios é criar uma cultura nos órgãos públicos na qual se entenda que a maior parte dos dados produzidos por eles é de interesse público. E, entendido isso, a próxima etapa seria começar a melhorar a qualidade do que é publicado. A Lei de Acesso à Informação (LAI) pode ajudar a mudar essa cultura dentro dos órgãos públicos, na medida em que mais e mais cidadãos interessados passarem a pedir dados. Mas a LAI ainda é muito nova, foi sancionada só no final de 2011, então se você conversar com muitos setores da sociedade civil organizada, verá que ainda há um grande caminho a ser percorrido para que as pessoas conheçam esse direito recente. Também será necessário o cumprimento do que está previsto na LAI para os órgãos públicos que não fornecerem os dados solicitados por qualquer cidadão. Ainda parece ser comum que funcionários questionem para que fim alguém está pedindo os dados e quem é a
pessoa solicitante, ou se ela vai usar aquilo para alguma pesquisa, por exemplo. Para uma maior disseminação, também precisamos entender as dificuldades que as organizações da sociedade civil estão encontrando para obter os dados e como querem utilizá-los. A Open Knowledge Brasil está fazendo um esforço para identificar alguns usos de dados no Brasil e criar cursos e guias através do projeto Escola de Dados (escoladedados.org), hoje coordenado pelo Marco Túlio Pires. Por exemplo, estamos coordenando um grupo de estudos de programação para auxiliar pessoas que estão seguindo um curso sobre a linguagem de programação Python, e o número de interessados foi muito grande. Infelizmente a maior parte das pessoas envolvidas com a organização está em São Paulo, mas precisamos pensar em formas de atuar de forma descentralizada, para que esse tipo de iniciativa possa ocorrer em outros estados. RiM: O que você acha da Lei de Acesso à Informação? Ela está sendo cumprida? TC: A Lei de Acesso à Informação (LAI), quando mais utilizada e seguida, será fundamental para criarmos uma cultura em que cidadãos e governo usem melhor os dados. Primeiro porque os cidadãos, organizados ou não, podem solicitar dados públicos ainda não publicados, o que não é pouco, para entenderem questões do seu interesse tendo números como base. Na medida em que dados passarem a ser mais publicados, com uma boa qualidade e num formato aberto (veja aqui uma introdução sobre o tema br.okfn.org/ dados-abertos), melhor.
Entrevista < 11
Numa matéria publicada pela Folha de São Paulo, em março deste ano, a Controladoria Geral da União diz que a Lei de Acesso à Informação não funciona em 11 estados, o que já é algo preocupante (http://ow.ly/w35B8). Mas se formos olhar como estão sendo tratados alguns pedidos de dados federais, como neste caso de dados de educação http:// ow.ly/w35Lf ou essa base de dados de dados dos currículos Lattes http://ow.ly/w35Qb, vemos que estamos bastante longe do ideal. Alguns dos argumentos recorrentes que estão sendo utilizados é de que isso aumentará os custos daqueles que produzem esses dados, mas isso já devia ter sido previsto. RiM: Os desenvolvedores brasileiros estão prontos para utilizar os dados abertos, ou ainda é preciso investir em educação? TC: Certamente temos diversos desenvolvedores no Brasil que podem trabalhar com esses dados públicos. Acredito que muitos ainda desconhecem a Lei de Acesso à Informação (LAI), ou alguns podem não ter interesse no assunto, o que é compreensível. Mas na medida em que formos criando uma cultura do hacking cívico, e com o ensino da programação sendo incorporado cada vez mais no currículo escolar ou a partir da demanda profissional que estamos vendo crescer, acredito que teremos usos incríveis dos dados públicos em pouco tempo. Mas as pessoas não vão começar isso do nada. Acredito, sim, que é preciso investir em cursos, guias e tutorais sobre como podemos usar esses dados e ferramentas que podemos criar para usá-los. Também é necessário
ampliar o conhecimento sobre a LAI, ainda muito recente no País. Nem todo mundo tem interesse em se envolver nessas questões, mas quanto mais exemplos tivermos dos potenciais usos positivos para a sociedade, mais pessoas se juntarão ao movimento pelos dados abertos e conhecimento livre. RiM: Quais são os melhores exemplos hoje da utilização de dados abertos? TC: De alguns anos para cá, estão se tornando cada vez mais comum os desafios de dados abertos, também chamados de hackatons. Eles são uma boa maneira de criar uma comunidade e uma cultura em torno do uso de dados públicos. Nessas competições têm surgido diversos aplicativos e essa pode ser uma boa forma de aproximar a população em torno do tema, formando comunidades e uma cultura ao redor do uso dos dados, inclusive sendo bastante didático para que as pessoas usem a LAI para exigir dados ainda não publicados. Em 2012, a Open Knowledge Brasil realizou um hackaton com a Câmara Municipal de São Paulo (CMSP). Foi uma atividade incrível, demonstrando como o diálogo entre a sociedade civil e seus representantes pode funcionar para fazermos algo acontecer. Desenvolvedores e cidadãos interessados participaram do evento e usaram esse momento para dialogar com os técnicos da CMSP, esclarecendo do que precisavam e como queriam fazer uso dos dados. Foi uma das primeiras experiências de atividades dessa natureza resultante desse diálogo e da colaboração entre a sociedade civil e o governo.
“Um dos maiores desafios é criar uma cultura nos órgãos públicos na qual se entenda que a maior parte dos dados produzidos por eles é de interesse público”
12 > Entrevista
“A Open Knowledge Brasil está fazendo um esforço para identificar alguns usos de dados no Brasil e criar cursos e guias através do projeto Escola de Dados” RiM: O que ainda falta ser feito nesse campo? TC: Pegando o exemplo citado anteriormente, temos o problema da sustentabilidade dos aplicativos desenvolvidos nesses desafios. Há um custo para manter aplicativos no ar e deixá-los atualizados, resolvendo bugs e desenvolvendo melhorias. Com a criação da Open Knowledge Brasil, esperamos poder manter alguns projetos que nossa comunidade avaliar alinhados com nossa missão e encontrarmos modelos para que isso se torne viável. Espero que surjam outras iniciativas assim ao redor do País, e muito nos interessa aprender com elas. Nos Estados Unidos e na Europa (Sunlight Foundation, Open Knowledge Foundation e suas várias filiais, My Society) é comum termos organizações da sociedade civil apoiando e desenvolvendo isso, mas no Brasil me parece que o Terceiro Setor ainda está bem no começo nesse sentido, princi-
palmente quando pensamos em organizações sem fins lucrativos com uma forte atuação em projetos de TI. RiM: Alguns argumentam que certos tipos de dados devem ser mantidos privados. Por que certos dados não deveriam ser abertos? TC: Os casos em que dados devem ser mantidos privados ocorrem principalmente quando temos que respeitar a privacidade do indivíduo. Há outros casos previstos pela Lei de Acesso à Informação, como a publicação de dados que podem colocar em risco a soberania nacional ou requerem um planejamento estratégico de alguns órgãos. Mas deve-se tomar muito cuidado para que esses casos em particular não sirvam de desculpa para órgãos públicos deixarem de publicar os dados solicitados pelos cidadãos. </>
Quer saber mais? Introdução resumida aos dados abertos: http://br.okfn.org/dados-abertos Guia de Dados Abertos: desenvolvido pela Open Knowledge Foundation e traduzido para o português por voluntários no Brasil - http://opendatahandbook.org/pt_BR/ Guia de Jornalismo de Dados: também produzido pela Open Knowledge Foundation junto ao European Journalism Centre, foi recentemente traduzido para o português sob coordenação da Abraji. Leia este guia se o seu interesse for num enfoque mais jornalístico e se quiser saber como jornalistas e programadores vêm trabalhando juntos para resolver problemas usando dados - http://datajournalismhandbook.org/pt/ Participe da Open Knowledge Brasil: se quiser acompanhar as discussões de nossas atividades e saber mais sobre conhecimento livre em geral - http://br.okfn.org/participe.
14 > NodeJS
Testando o seu código node com o
mocha
Por Alan Hoffmeister, Administrador da Comunidade Brasileira de Node.js Testes unitários são os aliados mais poderosos de qualquer projeto. Eles garantem a integridade estrutural e evitam que qualquer código seja posto em produção com alguma falha já testada. No Node.js não poderia ser diferente, já que essa poderosa ferramenta conta com amigos à sua altura para ajudar na tarefa de testar o seu código.
Um pouco sobre o Mocha O Mocha é um framework para testes extremamente flexível, simples e divertido. Ele se encaixa perfeitamente no seu estilo de testes, seja ele BDD ou TDD, síncrono ou assíncrono, usando o gerador de relatório que mais se adequa ao seu projeto. Desenvolvido por TJ Holowaychuk, foi um dos primeiros frameworks para testes a se destacar na plataforma Node.js, sendo vastamente usado por vários desenvolvedores, e está listado entre os pacotes mais favoritados do npm (http://ow.ly/voatI). Entre as alternativas ao Mocha podemos citar Jasmine, Expresso, NodeUnit, jsUnit e o Vows.
Estruturando o seu projeto Primeiramente temos que pensar como será o melhor jeito de criarmos uma aplicação testável, e para isso podemos usar o conceito primordial de qualquer projeto designado para rodar na plataforma Node.js: pequenos módulos que juntos formam uma funcionalidade maior. Classes grandes e funções com múltiplas funcionalidades podem ser complicadas de testar e até mesmo de dar a devida manutenção em um momento posterior. Tenha em mente que pequenos pedaços de código, que fazem somente uma tarefa, são facilmente reaproveitáveis, testáveis e muito menos propícios a falhas inesperadas.
Um projeto testável Vamos iniciar um projeto simples, mas que tenha a capacidade de mostrar o Mocha atuando. Primeiramente vamos instalar todas as dependências: # Crie um projeto em uma pasta vazia mkdir meu-projeto && cd meu-projeto && npm init # Logo após instale o Mocha globalmente sudo npm install -g mocha # Criamos as pastas principais do projeto mkdir test lib # Assim como o arquivo principal touch index.js test/general-test.js # Logo após abra o arquivo generaltest.js com o seu editor favorito vim general-test.js
Nesta aplicação, construiremos uma biblioteca capaz de executar os cálculos que são passados via linha de comando. Primeiramente vamos aos testes: // Vamos usar a lib assert, que já vem no core do Node.js var assert = require(‘assert’); // E também vamos incluir a lib da calculador, que criaremos mais tarde var calculadora = require(‘../lib/ calculadora’); // Descrevemos um tópico inicial usando o método describe() do Mocha describe(‘Testes gerais da calculadora’, function(){ // Dentro do tópico criamos os testes relacionados aos mesmos, fazemos isso usando o método it() it(‘A calculadora deve ser uma função’, function(){
NodeJS < 15
// Usamos o assert.equal() para verificar se o tipo da variável ‘calculadora’ realmente é uma função assert.equal(typeof calculadora, ‘function’); }); it(‘O cálculo 191 * 7 deve ser igual a 1337’, function(){ assert.equal(calculadora(‘191 * 7’), 1337); }); });
Fácil e rápido, você já pode usar o comando mocha ./test/*-test.js para ver o que está de errado com sua aplicação, ou utilizar o parâmetro --reporter spec para ter um relatório mais agradável. Certamente o teste reclamou da ausência do arquivo ../lib/calculadora.js, então vamos criá-lo: // Vamos usar o módulo VM para compilar o input do usuário, lembrese: evite o eval() var vm = require(‘vm’); module.exports = function(calculo){ // Vamos executar o código que fora passado e retornar o seu resultado return vm.runInNewContext(‘(function(){ return ‘ + calculo + ‘})()’); };
Agora, usando o Mocha, seus testes devem passar. Só está faltando o programa principal, vamos editar o index.js:
it(‘Deve retornar um buffer’, function(callback){ algumMetodoAsync(function(buff){ assert.ok(Buffer.isBuffer(buff)); callback() // Não esqueça de chamar o callback });});
Conclusão Uma ferramenta tão flexível como o Mocha faz com que a plataforma Node.js ganhe mais confiança e agilidade nos projetos desenvolvidos com ela. Junte isso como módulo request (https://github.com/mikeal/request) e zombie (http://zombie.labnotes.org/), e você poderá fazer um teste de ponta à ponta: bibliotecas, API e frontend. </>
Veja mais Github do TJ Holowaychuk: github.com/visionmedia
Alternativas ao Mocha Jasmine: jasmine.github.io/ Expresso: visionmedia.github.io/expresso/ NodeUnit: github.com/caolan/nodeunit
var calculador = require(‘./lib/ calculadora’);
jsUnit: github.com/pivotal/jsunit
var resultado = calculador(process. argv[2]);
Vows: vowsjs.org/
console.log(resultado);
Executando node ./ ‘1 + 1’, você deve ver o output 2 em seu terminal.
Testes assíncronos Utilizando um callback juntamente com o método it() do Mocha, é possível testar bibliotecas assíncronas:
Alan Hoffmeister é administrador da Comunidade Brasileira de Node.js. Trabalha 24h com Node.js implementando software e hardware para medicina remota usando esta tecnologia. Também escreve sobre JavaScript de um jeito humorado no http://caba.re. https://github.com/cranic | @alan_hoff
16 > Desenvolvimento Zen
PHP + Google App Engine Por Anderson Casimiro, entusiasta PHP e Open Source, co-criador e organizador do PHPSP
Há algum tempo, o Google criou o App Engine, plataforma como serviço na nuvem do gigante das buscas, que até então suportava Java, Python e Go. No Google I/O de 2013, foi apresentada uma nova linguagem suportada pelo PaaS da empresa mais buscada de Mountain View: PHP. Essa foi a “feature” mais pedida pela comunidade App Engine e, nesse caso, os pedidos foram atendidos. O que é cloud computing? O App Engine é melhor que seus concorrentes? Consigo fazer café no App Engine? São perguntas que não serão respondidas neste artigo. Pretendo apresentar um aplicativo simples até seu deploy no GAE (Google App Engine). Em um próximo artigo, iremos mais fundo no SDK PHP. O primeiro passo é criar um aplicativo no Console de Desenvolvedor do GAE, informando um nome e um ID para o mesmo - para isso, basta ter uma conta Google. O ID, como esperado, deve ser um identificador único para o projeto e o usaremos em breve - para este artigo, usarei imasters-simple-math. Por hora, isso é suficiente. Em seguida, você deve baixar o SDK e preparar seu ambiente de acordo com seu sistema operacional. Em suma, você deve ter Python 2.7, PHP 5.4 e MySQL 5.5 instalados e disponíveis no sistema para tirar proveito do GAE SDK. Descompacte o arquivo e mova o diretório google_appengine para o diretório de sua preferência - voltaremos já para ele. Agora vamos criar nossa aplicação. Criei um diretório para ela em meu diretório de projetos. Vou usar o Composer para gerir minha dependência (no caso, o microframework Respect) e realizar o autoloading. Algo não
padrão que também precisarei é o BCMath, extensão PHP com funções de aritmética em nível binário, que traz resultados precisos essa é uma das extensões PHP suportadas pelo GAE. Vale ressaltar que o imasters-simple-math está no GitHub, portanto tudo o que precisa para rodá-lo em sua própria instância de GAE é cloná-lo forká-lo, rodar o update do Composer e editar o arquivo app. yaml com as configurações do seu projeto. O arquivo app.yaml contém a configuração do seu projeto para o SDK. Na diretiva handlers, você configura o comportamento das requisições para sua aplicação (por exemplo, que toda requisição deve ser tratada pelo index.php, que é o comportamento padrão de nossa aplicação). Definimos também o runtime (php, duh :P) e, por último, mas não menos importante: application - este deve conter como valor o ID de sua aplicação (aquele que criamos no Console de Desenvolvedor; no nosso caso, imasters-simple-math). Com tudo isso pronto, podemos rodar o servidor embutido no sdk com o seguinte comando: /path/para/google_appengine/dev_ appserver.py /path/para/seu-projeto/ Se você tiver não tiver problemas em seu ambiente, uma instância local estará disponível em http://localhost:9999. É possível que o SDK não encontre sua instalação de PHP: se isso acontecer, ele vai avisar, e você precisa informar no parâmetro --php_executable_ path o caminho para o executável do PHP. Aqui vale um pequeno lembrete: é o executável CGI de seu ambiente - em algumas instalações, já há um executável php-cgi, e é para este que você deve apontar; em algumas distribuições Linux, esse executável se
Desenvolvimento Zen < 17
chama php mesmo, mas se encontra em outro diretório. Nas versões mais recentes, ele está incluído no pacote php5-fastcgi. No meu caso, a chamada ficou assim, pois também quero usar outra porta para o webserver: ~/bin/google_appengine/dev_appserver. py --port=9999 --php_executable_path=/ srv/www/cgi-bin/php ~/Projects/ imasters-simple-math Com o AppServer rodando, você tem disponível um ambiente com muitas das funcionalidades do GAE, inclusive um painel administrativo da instância na porta 8000. Agora você pode testar sua aplicação. Com a aplicação testada, podemos fazer o deploy no GAE. Para isso, é só rodar: /path/para/google_appengine/appcfg.py update /path/para/seu-projeto/ Insira seu usuário e senha (conta Google) e aguarde o término do processo. Agora é só testar sua aplicação em http://seu-projeto. appspot.com. No caso do projeto para este artigo, é http://imasters-simple-math.appspot.com (sim, ela está no ar e rodando). Você pode utilizar essa aplicação como uma API. Por exemplo, para somar dois números, você deve acessar /add/55/128. Uma subtração com /sub/5.38/3.14. Uma multiplicação com /mul/5.43/0.44. Uma divisão com /div/0.1/0.7, e podemos ter o resto de uma divisão com /mod/5/4. Também deixei disponíveis um recurso para potência (/pow/2/8) e uma de raiz quadrada (/sqrt/144). Os números nos recursos que passei aqui podem ser substituídos, e a precisão que deixei é de 10 casas decimais. Se for usar em seu projeto “forkado”, você pode mudar essa precisão no arquivo application/bootstrap.php. Se estiver usando Windows ou Mac, você pode contar com o GAE Launcher - um app que facilita sua vida lidando com o SDK; os instaladores estão no diretório dele. Há também uma integração com o GAE se você estiver utilizando o IDE PHPStorm - fiz um vídeo curtinho há pouco tempo mostrando por cima essa integração, veja em http://youtu.be/sdnaL_ud6bQ.
Esqueci de mencionar que você pode fazer tudo isso sem custos: o Google não vai te cobrar por simplesmente levantar uma aplicação simples. Se precisar de mais recursos, aí você pode configurar o GAE para a cobrança quando ultrapassar a cota grátis. Esse ambiente é muito poderoso - sem contar que é um serviço muito interessante para colocar uma PoC (Proof of Concept - Prova de Conceito) no ar sem custos em um ambiente de nuvem. Vale lembrar que, além das vantagens do Cloud Computing, no GAE sua aplicação tira proveito da camada de Cache do Google. No próximo artigo, entraremos mais a fundo no SDK PHP do Google App Engine. Até a próxima! </>
Links úteis imasters-simple-math: github.com/ duodraco/imasters-simple-math Console de Desenvolvedor do Google App Engine: console.developers.google. com Baixe o SDK do GAE: developers.google. com/appengine/docs/php/gettingstarted/ installing Composer: getcomposer.org Respect: respect.li BCMath: br1.php.net/bcmath Extensões PHP suportadas pelo GAE: developers.google.com/appengine/docs/ php/#PHP_Enabled_extensions
Anderson Casimiro atua com desenvolvimento web desde 2001 também gerindo times de desenvolvimento nesse período. Entusiasta PHP e Opensource, cocriador e organizador do PHPSP. Colaborador de projetos opensource, apaixonado por Desenvolvimento bem feito. Curte um bom e velho Rock e Geek sempre. http://duodra.co | @duodraco
18 > Capa
Aprender Fazendo e fazer aprendendo o poder de fabricar as suas coisas Por Luis Le達o, colaborador do Fazedores.com e Editor da Revista iMasters
Imagem: http://bit.ly/1scMiXO
Capa < 19
Algo que me impressiona na cultura americana é o fato de que as pessoas colocam a mão na massa. Muitas vezes eles são autodidatas, mas são, principalmente, proativos e criativos, e se aventuram a fazer um pouco de tudo: de coisas “normais”, como marcenaria, carpintaria e pintura, a questões altamente complexas, como modelagem e impressão 3D, eletrônica, programação e até mesmo lançar foguetes. O DIY – Do It Yourself, ou Faça Você Mesmo – é realmente bastante forte por lá. Você deve ter lido nas últimas edições da Revista sobre hackerspaces, FabLabs, oficinas colaborativas, fabricação digital e muitos outros assuntos que tratam um pouco do “movimento maker”, que também envolve a cultura DIY, focada na auto-suficiência e no aprendizado em qualquer área – não apenas em tecnologia. E nesta edição eu quero falar um pouco mais sobre isso, que vai muito além da criação de novas tecnologias. O movimento maker trata da apropriação dos modelos de produção e construção de coisas, o que envolve desde atividades manuais, como tricô, costura e artesanato em geral, até técnicas mais complexas de marcenaria, carpintaria, metalurgia, eletrônica e robótica. É óbvio que novas tecnologias e processos já mencionados em outras edições, como fabricação digital, impulsionam o movimento por permitirem a criação de novos métodos de fabricação, antes acessíveis somente a grandes empresas. Mas não confunda Arduino e Open Hardware com o movimento - eles são apenas catalisadores do processo, não o objetivo final. Tudo começou “muito tempo atrás”, e é preciso um pouco de história: lembra da Revolução Industrial? Apesar de todos os benefícios trazidos após essa época, nós perdemos nossa capacidade de criar coisas únicas; tudo foi homogeneizado, ganhou escala e perdeu originalidade: o celular que você tem hoje é igual ao de muita gente por aí, todos podem (dentro das condições financeiras de cada um) adquirir um determinado bem que foi fabricado na China e que é idêntico ao mesmo modelo fabricado/vendido em outro país etc. Apenas dois exemplos simples. E até aí, tudo
bem! Temos acessos a diferentes bens e serviços, e eles são padronizados, o que nos dá certa “garantia” de qualidade, mas esquecemos que, muitas vezes, por conta dessa padronização, criar um novo produto é algo caro e nunca vai ser feito em uma garagem.
Produto final ou protótipo? Este é um dos primeiros aprendizados de quem começa a trabalhar com hardware: fazer um único item sai caro. Mandar fabricar uma placa de circuito e incluir os componentes não é viável se você precisa de uma única peça, mas se você produz um lote de 20, 50 ou 100 peças, os custos principais estão diluídos (isso não quer dizer que o valor total é baixo). Prototipar coisas é um pouco diferente; você não precisa ter um produto pronto e bonito, em uma única placa e com o melhor acabamento possível. O objetivo é apenas provar que aquilo funciona com os componentes modularizados. É por isso que o Arduino e todos os seus acessórios se tornaram um grande sucesso: eles têm escala e o custo para produção, devido a essa escala, cai, tornando-se viável para usá-los como protótipo até se conseguir recurso suficiente para produzir em escala. Pensando ainda na produção em massa e no custo ao se gerar apenas uma única peça (ou pelo menos uma peça adaptada a alguma demanda específica), vou citar um caso interessante em que já existia um produto, chamado WREX (Wilmington Robotic Exoskeleton), adaptado a uma cadeira de rodas e que pode ser utilizado por crianças (a partir dos 6 anos) ou adultos que nasceram com uma síndrome congênita que afeta a força muscular. Neste exemplo, Emma, uma criança aos dois anos de idade, não podia utilizar o aparelho porque ele era muito pesado. Sabendo disso, médicos conseguiram reproduzir a mesma tecnologia utilizando ligas metálicas mais leves e impressão 3D (veja mais: http://ow.ly/vMEL7), criando peças facilmente substituíveis e leves o suficiente para que uma criança pudesse começar a se alimentar sozinha.
20 > Capa
Imagem: Flickr - http://bit.ly/1kQ2P0C
Essa demanda por produtos personalizados, paramétricos e com pequena escala impulsionou a fabricação digital, permitindo criar coisas novas usando tecnologias não tão novas assim, mas que ficaram mais acessíveis, produzindo coisas em uma quantidade não massificada. Junto com os hardwares abertos e com as mesmas práticas de comunidades open source, deram origem a impressoras 3D (nos seus mais variados modelos), máquinas de corte a laser (como a Lasesaur - http:// www.lasersaur.com/) e de corte de vinil, além de outros aparatos eletromecânicos utilizados em processos de fabricação.
taforma de desenvolvimento também livre e simples. Quem já trabalhou com PIC sabe como é viver num mundo onde tudo tem preço, inclusive o gravador do microcontrolador.
Voltando ao hardware, embora em 1999 Richard Stalman não acreditasse que projetos de hardware aberto pudessem se tornar realidade, surgiram as iniciativas de open source hardware, como o Arduino e muitas outras. O resultado: artistas, programadores e engenheiros voltaram sua atenção para criação de objetos tecnológicos que utilizam um microcontrolador de baixo custo com uma pla-
Ainda hoje, financiar um projeto através de crowdfunding significa acreditar na ideia e na capacidade de execução do inventor, e isso implica correr riscos e financiar algo que pode não será realizado, mas também há grandes casos de sucesso e projetos como o Peeble (http://ow.ly/vMFnI), maior sucesso de arrecadação da plataforma e que se tornou um produto de sucesso, impulsionando o surgi-
Depois disso, surgiram as plataformas de financiamento coletivo (crowdfunding), como o Kickstarter, em 2009, o que permitiu a execução de projetos maiores, nas mais diferentes categorias, com atenção especial para tecnologia, pois financiamentos gigantes permitiam a produção em escala baseada em um protótipo construído e apresentado dentro da plataforma.
Capa < 21
mento dos “smartwatches” e do Oculus Rift (http://ow.ly/vMFqI). Mas daí vem o software. Como o movimento maker se encaixa quando a gente fala de desenvolvimento de software? Eu já afirmei anteriormente sobre o surgimento do open hardware, e grande parte disso foi graças à integração da comunidade. Se falarmos exatamente de Arduino, sabe-se que ele tem três pilares: o hardware em si, com seu projeto aberto e padronizado e todas as placas de expansão; o software aberto e multiplataforma; e, principalmente, a comunidade focada no desenvolvimento de mais expansões e bibliotecas, além da melhoria da própria interface de desenvolvimento. Hoje é praticamente impossível alguém ter uma dúvida sobre desenvolvimento de software que outra pessoas já não tenha questionado antes, e muitas das vezes essa dúvida já foi respondida em sites como o Stack Overflow. Isso acontece exatamente porque existem pessoas com essa mesma essência do movimento maker (autodidatas, criativas, próativas) que estão lá com interesse em ajudar, compartilhar conhecimento e aprender com o processo.
de habilidades como liderança, empreendedorismo e trabalho em equipe, sempre demandadas pelo mercado de trabalho.
Próximos passos Então fica a pergunta: “o que eu posso fazer?”. A resposta é simples: estude e comece a fazer! (lembre-se de Aristóteles!). Veja a qual processo você mais se adequa e comece a explorar as possibilidades, mas não foque apenas na questão tecnológica, pois, às vezes, é mais importante entender como fazer as coisas do que simplesmente fazer algo no computador e mandar “imprimir”. Além disso, não tenha medo de errar, isso faz parte do jogo. Se você é desenvolvedor, o que pode fazer agora é começar a contribuir com iniciativas de softwares livres (participe daquela que você já utiliza e/ou mais tem afinidade) e abra seus projetos no GitHub ou outro site de versionamento de código. Não tenha medo de expor seus códigos: fazendo isso, você pode receber contribuições de outros desenvolvedores e aprender ainda mais. </>
DIY - Saiba mais Indo além Onde mais o movimento maker pode ser aplicado? Na educação! Vou citar aqui um artigo do Humberto Zanetti (leia o texto: http://ow.ly/ vMFB6), professor há nove anos e mestrando com foco na aplicação de tecnologia em educação, que começa citando uma frase de Aristóteles: “É fazendo que se aprende a fazer aquilo que se deve aprender a fazer”.
Sobre a cultura Maker http://ow.ly/vMGhU Cultura maker na educação http://ow.ly/vMGgn Open Hardware no InterCon 2013 http://ow.ly/vMGdG Móveis com design aberto http://ow.ly/vMGaD
Você travou, certo? Eu também ;) Ele faz uma abordagem bem crítica sobre o processo educacional “de mão única” e como teorias como o Construtivismo e o Construcionismo se baseiam na mesma lógica do movimento maker: colocar a mão na massa, aprender durante o processo, resgatar o processo criativo e identificar talentos, relacionando-se também com o desenvolvimento
Luis Leão é um desenvolvedor web que encontrou em APIs e hardware aberto novas formas de integrar a web com o mundo real. www.luisleao.com.br
22 > DIY
Faça você mesmo: como eu construí uma fresadora CNC Por Mateus Zitelli, Desenvolvedor front-end Quem nunca teve vontade de produzir um objeto qualquer em casa, como um utensílio para cozinha, uma réplica daquela pecinha que se quebrou e você não acha em lugar nenhum para comprar ou até mesmo um presente personalizado para alguém? Foram desejos como esses que motivaram a meu pai e a mim a aceitar o desafio de construir uma fresadora CNC (Controle Numérico Computadorizado). Planejamento capacidade para trabalhar tanto peças grandes como pequenas, com boa qualidade e também ter a robustez para ser usada com diversos materiais, desde madeira até alumínio. Tudo isso sem gastar muito, reutilizando material que já tínhamos em mãos. Para controle da fresadora, decidimos usar somente software livre, tal decisão permitiu que tivéssemos flexibilidade em todo o processo de produção, além de utilizar ferramentas que estão em constante desenvolvimento
Imagem 1: A CNC, estrutura montada
e que possibilitam expansão para as mais diferentes necessidades que poderiam aparecer no decorrer do projeto. Software Tendo essa decisão em mente, não tivemos dúvidas sobre qual sistema operacional escolher: o GNU/Linux. Não poderíamos ter feito escolha melhor - após uma breve pesquisa, encontramos a distribuição LinuxCNC, e foi amor à primeira vista. Ela oferece uma solução completa para controle de máquinas CNC, contendo até extensões para o Kernel Linux trabalhar com requisições em tempo real, característica fundamental para evitar travamentos e acidentes durante o funcionamento da máquina. Além disso, a interface com o driver, que já entrarei em detalhes, seria feita totalmente por via serial, sem a necessidade de nenhum intermediário. Essa distribuição também inclui o software de controle EMC2, que oferece mais do que todas as funcionalidades necessárias, um sistema completo de visualização e interpretação de g-code (linguagem para descrição de rotas e comandos para CNCs) e um esquema de configuração passo a passo simples e eficiente. Eletrônica Como queríamos poder trabalhar com materiais mais duros como metais, decidimosusar um fuso com 1,5 cv com resfriamento a água, possibilitando a fresa com até 24 mil rpm. Além do fuso, precisaríamos de motores de passo com um torque para aguentar o tranco. Para suprir tal necessidade, escolhemos motores NEMA 23 bipolares com 12,6 Kgf.cm que re-
Imagem 2: A CNC em outra perspectiva
DIY < 23
queriam 2.8 amperes cada. Devido a essa exigência, utilizamos a placa para três eixos com drivers TB6560, permitindo trabalhar com até 3,5 amperes por eixo, microstepping (processo para suavizar o passos do motor e diminuir a vibração) de até 1/16, que no nosso caso era mais que suficiente, isolamento óptico para porta serial, evitando que possíveis sobrecargas danificassem o computador, entre outras características que faziam dessa, mesmo sendo uma solução relativamente barata, uma boa escolha para o nosso projeto.
para a instalação da parte elétrica, e então para a configuração do EMC2.
Estrutura
Resultados e considerações finais
Parte fundamental para alcançarmos a robustez desejada foi preparar uma estrutura que aguentasse o impacto do processo de fresa, mas essa se mostrou a etapa mais árdua da construção. Decidimos utilizar eixos-guia de 25 milímetros, que pareciam suficientes até para as tarefas pesadas. Como tínhamos algumas peças de alumínio disponíveis, resolvemos usá-las na estrutura, mas para que se adequassem ao projeto precisariam ser cortadas. Como não tínhamos uma outra CNC, todo o corte foi feito à mão. Após horas de trabalho árduo, muito barulho e com os braços cansados de tanto serrar, conseguimos as peças de que precisávamos. Montagem Com todos os componentes da máquina em ordem, era hora da montagem. Começamos pela parte estrutural, tomando os devidos cuidados para evitar que deixássemos passar qualquer folga ou desalinhamento dos eixos. Com a parte estrutural concluída, partimos
Imagem 3: Objeto de madeira fresada
O processo foi muito simples, definimos o tamanho da região de trabalho, que no nosso caso foi de 1000 mm X 800 mm X 150 mm, mapeamos os pinos da saída serial de acordo com a documentação da placa de controle, tivemos que definir também o quanto equivale cada passo do motor em distância percorrida pelo fuso e, após mais alguns detalhes, estávamos prontos para testar (imagem 1).
Toda a configuração foi tão simples e intuitiva que no primeiro teste a CNC já estava funcionando corretamente. Foi fantástico ver que, após meses de planejamento e montagem, obtivemos numa das primeiras tentativas tudo funcionando como desejado. Alguns meses após o término da construção e várias horas fresando, descobrimos que os eixos-guia que escolhemos são finos demais para trabalhar com metais, sofrendo uma leve torção, mas no geral a qualidade está ótima. A CNC tem sido muito útil, e até fundamental, para nossos projetos. Agora, o próximo passo é montar uma impressora 3D fresando tanto as peças como a própria placa de circuito impresso em casa! </>
Mateus Zitelli é front-end. Faz graduação em Ciência da Computação na UFABC, é apaixonado por tecnologia, inovação e empreendedorismo. http://zitell.li | @MateusZitelli | mateus@zitel.l
Imagem 4: Resultado da peça de latão fresada
24 > Desenvolvimento
Por Paulo Silveira, Editor na Casa do Código e Fundador da Caelum
JavaScript como língua franca Designers, marketeiros, arquitetos de informação e outros colegas da equipe de desenvolvimento podem tirar proveito desse skill. Mas com qual linguagem ele deve começar a programar? Perl, Python, Ruby, PHP, Java, C#? Designers, marketeiros, arquitetos de informação e outros colegas da equipe podem tirar proveito desse skill. Mas com qual linguagem ele deve começar a programar? Perl, Python, Ruby, PHP, Java, C#? Realmente as vertentes são muitas, e a resposta pode depender de um contexto: experiência de programação, gostos, front-end, backend, tipo de empresa em que se quer trabalhar etc. Ao mesmo tempo em que há essa pluralidade de caminhos, se eu pudesse dar só uma dica, seria esta: faça seu amigo começar pelo JavaScript. Não importa em qual plataforma sua equipe programar, o JavaScript muito provavelmente estará envolvido. Mais: o webdesigner tirará proveito de conhecer JavaScript, podendo pedir recursos mais específicos ao time de desenvolvimento ou até mesmo comitar pequenas mudanças. O profissional de analytics saberá dizer melhor onde disparar eventos, como colher essas informações. O arquiteto de informação conhecerá o que é possível e impossível de fazer. JavaScript é também a linguagem onipresente: o designer, por exemplo, não precisará instalar nada no seu computador, pois já há uma máquina virtual instalada no seu browser. Editor? Qualquer um. Do notepad e vi ao emacs e sublime. Também não precisa de debugger, pois seu browser traz um embutido. O designer nem mesmo precisará entender esses jargões para começar o seu aprendizado. Uma linguagem que era considerada o patinho feio há 15 anos, é hoje uma das queridinhas dos desenvolvedores. A compatibilidade entre os browsers tem melhorado vertiginosamente, e um profissional com profundo conhecimento
nessa linguagem é um dos mais buscados no mercado. Ela aparece no DevOps, ela está em bancos de dados não relacionais, ela está no servidor com node.js. Não é a toa que escolhemos JavaScript como a linguagem do Ano do Código, uma iniciativa inspirada no Code.org para trazer aos jovens uma forma de ter o primeiro contato com a programação. Saiba mais sobre isso em anodocodigo.com.br. O que você está esperando? Seu time de não-desenvolvedores pode tirar muito proveito aprendendo JavaScript. O trabalho com analytics, SEO, adwords, mídias sociais e design será certamente melhor aproveitado, além de o diálogo com o time de desenvolvimento melhorar consideravelmente. </>
Links interessantes Começar a programar é com JavaScript: http://ow.ly/vohsK JavaScript for Designers - An Intro to JS Terms and Concepts, de Rachel Nabors: http://ow.ly/vohmI Aprenda Scratch (projeto do grupo Lifelong Kindergarten, no Media Lab do MIT): http://scratch.mit.edu/ Code.org: http://code.org/
Paulo Silveira é Bacharel e Mestre em Ciência da Computação pela USP. Editor na Casa do Código (www.casadocodigo.com.br) e um dos fundadores do GUJ.com.br e da Caelum.com.br. Um entusiasta da inovação na educação. paulo.silveira@caelum.com. br | @paulo_caelum
26 > Por dentro do W3C
Os 25 anos da Web Por Reinaldo Ferraz, Especialista em Desenvolvimento Web do W3C Brasil
Em 2014, a Web completa 25 anos de existência. Em março de 1989, Tim Berners-Lee apresentava sua proposta para o gerenciamento de informação que propunha o uso do “hipertexto” como forma de conectar documentos entre si. Uma simples linguagem de marcação que mudaria a forma de como consumimos e acessamos informação na Internet. Sim, a Web mudou nossa forma de acessar e usar a Internet, e grande parte da popularização da rede mundial de computadores se deve a ela. Hoje pelo menos duas em cada cinco pessoas no mundo estão navegando pela Web e esse número tende a crescer ainda mais. Para entender a sua importância, sugiro fazermos um simples exercício de lembrar como era executar algumas atividades antes da criação da Web. Antes de 1989, a televisão, o rádio e o telefone (fax não conta, por favor) eram os principais canais de comunicação, sendo este último o único com a possibilidade de envio e recebimento de informações (por voz). Televisão e rádio eram sistemas de mídias em massa, mas tinham como principal característica o espectador passivo, que pouco interagia a não ser por telefone ou carta. Os canais de comunicação mais modernos como Videotexto ou BBS eram complicados demais para o grande público e dependiam de um dispo-
sitivo computacional que não era barato para a maioria das famílias da época. Trabalhos escolares envolviam volumes de pesadas enciclopédias que ocupavam um enorme espaço físico dentro de casa. Barsa e Enciclopédia Britânica eram praticamente unânimes para qualquer pesquisa. Trabalhos em grupo reuniam os colegas em torno da enciclopédia e cada um fazia sua parte, mas algumas vezes era necessário esperar alguém terminar de utilizar o volume para você pudesse começar sua pesquisa. Algumas tarefas que hoje parecem muito simples eram complicadas em 1989, como pesquisar preços e comprar uma passagem aérea. Era necessário ir até uma loja da companhia aérea, esperar ser atendido e comprar a passagem com o atendente. Queria pesquisar preços? Dificilmente o atendente “seguraria” uma passagem para você enquanto você fazia pesquisa nas lojas dos concorrentes. Ou então você poderia comprar por telefone. E reservar um hotel no exterior? Percebeu como o mundo mudou? A evolução do acesso à informação, a facilidade com que qualquer pessoa pode buscar e encontrar conteúdo e principalmente o empoderamento do cidadão, desde fazer comentários em sites, blogs e redes sociais até a articulação da sua
“Não é somente para celebrar que o W3C reforça a participação da comunidade. A Web corre sérios riscos, e Tim Berners-Lee chama a comunidade para se engajar nos debates políticos da Web”
Por dentro do W3C < 27
Tim Berners – Lee
“Se queremos uma Web verdadeiramente para todos, então todos devem ter um papel na formação de seus próximos 25 anos” comunidade para exigir seus direitos e cobrar seus governantes. E isso é só um pouco do que a Web oferece, de forma livre e aberta desde a sua concepção. Comemore, participe, debata e defenda a Web durante todo o ano O ano de 2014 será marcado pelas comemorações do aniversário da Web não só no mês de março. O W3C está criando uma programação de ações e eventos que serão constantemente atualizados no site http://www.webat25.org/. Mas não é somente para celebrar que o W3C reforça a participação da comunidade. A Web corre sérios riscos, e Tim Berners-Lee chama a comunidade para se engajar nos debates políticos da Web sobre pontos extremamente relevantes para o seu desenvolvimento e evolução: •• Como podemos conectar as quase três em cada cinco pessoas em todo o mundo que ainda não estão conectadas à Web? •• A regulamentação da Internet está muito disputada em terreno mundial e nacional. Que novas soluções inclusivas podem evitar os danos de uma Web fragmentada? •• A nossa capacidade de usar a Web para falar e se organizar coletivamente está sob ameaça de censura e vigilância, e qualquer usuário online está ameaçado por cibercrimes. Como podemos atender à sociedade com necessidades crescentes de liberdade, privacidade e segurança online? •• Globalmente, menos de 10% do conjunto de dado-chave do governo têm sido abertos gratuitamente para reuso online, limitando drasticamente o empoderamento de inovação da Web em áreas como
a melhoria do transporte público e a luta contra a corrupção. Que medidas podem ser tomadas para despertar o verdadeiro poder dos dados abertos? •• A Plataforma Web aberta deve ser capaz de se expandir para atender à indústria que demanda por interoperabilidade, mobilidade e desempenho em dispositivos conectados de todas as formas e tamanhos. Como vamos enfrentar os desafios colocados por essa diversidade? •• Como vamos promover um rico ecossistema de diversidade e inovação a longo prazo, em vez de jardins murados menos férteis? Para concluir, deixo aqui a frase de Tim Berners-Lee sobre a importância de cada indivíduo na evolução da Web e na celebração dos 25 anos da sua criação: “Se queremos uma Web verdadeiramente para todos, então todos devem ter um papel na formação de seus próximos 25 anos”. Aqui no Brasil, o W3C está planejando diversas ações para celebrar os 25 anos da Web durante a conferência anual Web.br, que ocorrerá em setembro deste ano em São Paulo. Para maiores informações, acesse http://conferenciaweb.w3c.br/ </> Reinaldo Ferraz é especialista em desenvolvimento web do W3C Brasil. Formado em Desenho e Computação Gráfica e pós graduado em Design de Hipermídia pela Universidade Anhembi Morumbi, em São Paulo. Trabalha há mais de 12 anos com desenvolvimento web. Coordenador do Prêmio Nacional de Acessibilidade na Web e do Grupo de Trabalho em Acessibilidade na Web e representante do W3C Brasil em plenárias técnicas do W3C. @reinaldoferraz
28 > API
Bots no Twitter: como automatizar interaçþes Por Luis Cipriani, Developer Advocate no Twitter
Imagem: Quka / Shutterstock.com
API < 29
O objetivo é entender quais recursos da API você vai precisar e como identificar quando você deve responder a um usuário para poder interagir automaticamente Desenvolvedores adoram APIs porque elas permitem que você interaja com um serviço via código, trazendo assim uma série de benefícios como incrementar um produto, automatizar uma tarefa ou capturar dados. A plataforma do Twitter (https://dev.twitter.com) oferece um conjunto de APIs para que os desenvolvedores e empresas possam usufruir dos dados gerados pelos seus usuários, e uma das aplicações possíveis é a criação de um bot (robô, em inglês), cuja função é interagir com usuários à medida que ele recebe tweets dirigidos a ele. A função desse bot pode variar. Por exemplo, durante a Campus Party, foi disponibilizado um bot chamado @oquevernaCP (O que ver na Campus Party?) que, ao receber tweets dos usuários com a hashtag de um palco do evento, ele respondia com o próximo evento da programação - naquele palco ou na programação geral. É uma ótima maneira de ajudar participantes a se planejarem em um evento com vários acontecimentos em paralelo.
Fonte: https://twitter.com/oquevernaCP/statuses/427593696570531840
A Startbucks foi mais longe e criou um bot que, até dezembro de 2013, havia rendido mais de US$ 180 mil (http://ow.ly/voQe8) em vendas de café: o @Tweetacoffee. Esse bot ajuda os usuários a presentearem amigos com café da Starbucks, bastando que você crie um tweet como este abaixo:
30 > API
Fonte: https://twitter.com/tessaemilyhall/status/441622323343286272
O bot envia instruções de pagamento para você e, logo após a efetuação desse pagamento, ele envia as instruções de como pegar o vale-café no site. É uma solução simples, porém com um impacto grandioso. Este artigo apresentará como criar um bot simples, que responde “Sim”, “Não” ou “Talvez” para qualquer pergunta de um usuário. Você pode trocar essa simples resposta por algo bem mais complexo. O objetivo é entender quais recursos da API você vai precisar e como identificar quando você deve responder a um usuário para poder interagir automaticamente. A implementação será em Ruby, mas desenvolvedores de qualquer outra linguagem serão capazes de entender como funciona.
Criando a aplicação no Twitter Para obter os tokens de acesso para utilizar a API do Twitter, você precisa acessar apps.twitter.com e criar sua aplicação em “Create new app”. Você terá que preencher um formulário com os dados dela. Logo após sua aplicação ser criada, você deve criar os access tokens, que serão necessários para a autenticação na API. Para obtê-los, você deve entrar na sua aplicação e depois clicar na aba “API keys” e pedir para gerá-los. Depois desse procedimento, você deve possuir quatro tokens: consumer key, consumer secret, access token key, access token secret. Não compartilhe esses tokens com ninguém, pois com eles qualquer pessoa pode acessar sua conta. Certifique-se também, na aba “Permissions”, de que a sua aplicação possui acesso de leitura e escrita à API.
32 > API
API de Streaming e a biblioteca Tweetstream Normalmente, uma API é oferecida no modelo requisição e resposta, no qual para cada recurso que um desenvolvedor deseja recuperar ele realiza uma requisição HTTP e manipula a resposta obtida do servidor da API. Esse tipo de modelo é aplicado pela REST API no Twitter, porém, para o caso dos bots, desejamos saber em tempo real quando um tweet com uma pergunta é feito para que possamos responder o mais rápido possível. Sendo assim, o Twitter também oferece a API de Streaming, que trabalha com um modelo de conexão persistente, ou seja, a requisição é feita e a conexão fica aberta indefinidamente, e qualquer tweet criado que esteja dentro do critério estabelecido pela conexão é retornado na resposta com uma latência muito baixa entre sua criação e a entrega. Para o nosso bot, utilizaremos a URL GET user da API de streaming. Essa URL faz parte do stream do usuário, ou seja, ela retorna eventos e dados relativos ao usuário que está autenticado, como quando alguém passa a seguir ou quando algum tweet é retweetado. No caso deste bot, estamos interessados em quando algum usuário cria um reply (resposta), ou seja, quando alguém cria um tweet que se inicia com arroba e o nome do usuário do bot. A conexão será feita utilizando a biblioteca tweetstream (http://ow.ly/voRoP), que é uma gem do Ruby própria para lidar com conexões à API de Streaming. Além disso, essa gem tem como dependência o EventMachine (http://ow.ly/voRGO), que é uma biblioteca que suporta o desenvolvimento de aplicações orientadas a eventos. Esse tipo de arquitetura é importante para um bot no Twitter, pois ela permite que requisições à API não sejam bloqueantes, o que poderia deixar a resposta do bot lenta.
Configuração do Tweetstream Basicamente, o que precisamos para configurar a biblioteca são os tokens obtidos quando se cria a aplicação em apps.twitter.com. Crie um arquivo chamado bot.rb e coloque o código abaixo: require require require require require require
“rubygems” “tweetstream” “em-http-request” “simple_oauth” “json” “uri”
# config oauth OAUTH = { :consumer_key => “EDIT_HERE”, :consumer_secret => “EDIT_HERE”, :token => “EDIT_HERE”, :token_secret => “EDIT_HERE” } ACCOUNT_ID = OAUTH[:token].split(“-”).first.to_i TweetStream.configure do |config| config.consumer_key = OAUTH[:consumer_key] config.consumer_secret = OAUTH[:consumer_secret] config.oauth_token = OAUTH[:token]
API < 33
config.oauth_token_secret = OAUTH[:token_secret] config.auth_method = :oauth end
O código acima apenas cria uma constante para configuração dos tokens de OAuth. Você deve trocar os valores “EDIT_HERE” pelos valores de consumer_key e consumer_secret, que são obtidos logo ao criar a aplicação, e token e token_secret, que são obtidos ao requisitar os tokens de acesso. Logo depois, como precisamos do ID da conta de Twitter para saber se as perguntas são dirigidas a esse usuário, extraímos o ID do valor da variável OAUTH[:token], que se localiza no início da string. Por fim, chamamos o método de configuração da biblioteca tweetstream, que simplesmente atribui os valores dos tokens para as variáveis equivalentes na biblioteca.
Realizando a conexão ao User Stream Como já temos a biblioteca configurada, podemos escrever o código que realiza a conexão ao User Stream. @client
= TweetStream::Client.new
puts “[STARTING] bot...” @client.userstream() do |status| # Cada status recebido pelo User Stream será manipulado dentro desse bloco puts status.text # print do texto do tweet end
Nesse trecho de código, estamos criando uma instância do cliente de tweetstream que vai lidar com a conexão à Streaming API e logo após adicionando o método @client.userstream que realiza essa conexão. Esse método requer um bloco de código, que será executado toda vez que a conexão com o User Stream retornar um status. Esses status são representados por objetos JSON que são mapeados automaticamente para objetos Ruby, o que permite o fácil acesso e a manipulação dos eventos recebidos. Por exemplo, para saber qual é o texto do tweet, basta acessar status.text.
Decidindo se você deve responder ou não a um tweet Vamos expandir um pouco o código anterior para incluir a decisão se vamos ou não responder a um tweet recebido via Streaming. Isso é importante, porque não queremos gerar respostas automáticas para retweets ou para simples menções ao nosso usuário, por exemplo.
34 > API
@client
= TweetStream::Client.new
puts “[STARTING] bot...” @client.userstream() do |status| if !status.retweet? && status.in_reply_to_user_id? && status.in_reply_to_user_id == ACCOUNT_ID && status.text[-1] == “?” tweet = { “status” => “@#{status.user.screen_name} “ + %w(Sim Não Talvez). sample, “in_reply_to_status_id” => status.id.to_s } # Aqui vai o código que posta a resposta no twitter (apresentado abaixo) end end
O comando if acima é dividido em três partes: 1. a primeira linha do comando verifica se o status recebido não é um retweet, pois não queremos gerar respostas automáticas para perguntas que já foram respondidas; isso também pode gerar um uso abusivo da API; 2. a segunda linha verifica se o tweet é em resposta ao usuário bot, ou seja, se o tweet se inicia com arroba (@) e o nome do usuário, e esse usuário possui ID igual ao ID do nosso bot, então esse tweet é dirigido apenas para o bot; 3. a terceira linha apenas verifica se o último caractere do texto do tweet é um ponto de interrogação, ou seja, se o tweet é mesmo uma pergunta. Se todas as condições forem satisfeitas, nós criamos o hash que vai conter a resposta e que possui dois campos: o status a ser retornado, que é simplesmente um sorteio entre “Sim”, “Não” e “Talvez”; e o ID do usuário que estamos respondendo, o que faz com que o Twitter notifique esse usuário e conecte esse tweet como uma resposta da pergunta que o usuário fez.
Criando o tweet de resposta Por fim, só precisamos postar o tweet com a resposta. Para isso, utilizaremos a REST API, mais especificamente o endpoint POST statuses/update. Vamos atualizar o trecho de código anterior com a requisição HTTP que realiza o post do tweet. @client
= TweetStream::Client.new
puts “[STARTING] bot...” @client.userstream() do |status| if !status.retweet? &&
API < 35
status.in_reply_to_user_id? && status.in_reply_to_user_id == ACCOUNT_ID && status.text[-1] == “?” tweet = { “status” => “@#{status.user.screen_name} “ + %w(Sim Não Talvez). sample, “in_reply_to_status_id” => status.id.to_s } twurl = URI.parse(“https://api.twitter.com/1.1/statuses/update.json”) authorization = SimpleOAuth::Header.new(:post, twurl.to_s, tweet, OAUTH) http = EventMachine::HttpRequest.new(twurl.to_s).post({ :head => {“Authorization” => authorization}, :body => tweet }) http.errback { puts “[CONN_ERROR] errback” } http.callback { if http.response_header.status.to_i == 200 puts “[HTTP_OK] #{http.response_header.status}” else puts “[HTTP_ERROR] #{http.response_header.status}” end } end end
Há dois pontos importantes nesse trecho que realiza a requisição. Primeiramente, a requisição deve ser autenticada, portanto deve possuir a assinatura OAuth. Para isso, utilizamos a biblioteca simple_oauth (http://ow.ly/voRPb), cujo objetivo é receber como parâmetros os detalhes da requisição e os tokens OAuth configurados anteriormente e gerar a assinatura que deve ser atribuída ao header Authorization da requisição. Outro ponto importante é que desejamos que essa requisição não seja bloqueante, pois sua latência pode fazer com que as respostas do nosso bot sejam entregues com atraso. Para implementarmos essa requisição, usamos a biblioteca em-http-request (http://ow.ly/ voRUh), que implementa a execução da requisição dentro da arquitetura do EventMachine e, portanto, é executada de forma assíncrona. Perceba também que adicionamos o header Authorization na instanciação do request, bem como o tweet a ser feito no body. Após a instanciação, adicionamos o código que lida com os resultados da nossa requisição, em casos de falha ou de sucesso.
Executando o bot Pronto! Agora basta entrar no terminal e executar o bot com o comando ruby bot.rb. Após a conexão, entre no Twitter e crie um tweet que inicia com o usuário do bot. O exemplo abaixo foi obtido rodando o código deste artigo (dê uma olhada nas datas de criação dos tweets para ter uma ideia da latência entre a pergunta e a resposta):
36 > API
Fonte: https://twitter.com/lfcipriani/status/441907645822533632
Conclusão Este artigo mostrou com menos de 80 linhas de código como você pode criar um bot no Twitter que responde automaticamente a perguntas de outros usuários. Apesar de simples, essa implementação apresenta a linha geral a ser seguida quando você tiver alguma ideia interessante de um bot. O código final pode ser encontrado em um gist na URL bit.ly/botnotwitter. Se você quiser ver uma implementação um pouco mais elaborada, que implementa fluxos alternativos da conexão ao User Stream, como casos nos quais acontecem erros ou tweets são perdidos devido ao volume alto de tweets, ou como implementar Rate Limit para evitar que um usuário faça perguntas demais, você pode consultar o código do bot @oquevernaCP, que foi executado na última Campus Party, em São Paulo. O código pode ser acessado pela URL bit.ly/oquevernacp </>
Luis Cipriani é Developer Advocate no Twitter e Cientista da Computação com especialização em sistemas distribuídos. Possui experiência em empresas financeiras e de mídia, trabalhando com engenharia e arquitetura de software em vários tipos de projetos, desde back-office applications até sistemas web em tempo real. Mantém o blog talleye.com e a conta de relacionamento com desenvolvedores do Twitter no Brasil, @TwitterDevBr. Twitter pessoal: @lfcipriani
38 > Comunidade
SouJava: o portal para o futuro da tecnologia Java Por Rodrigo Alves Ruza, coordenador da Sociedade de Usuários da Tecnologia Java
Desde a década de 90, quando Java nasceu, desenvolvedores de todo mundo foram cativados pela nova forma de desenvolvimento, que facilitava a criação de aplicações para Internet e criou uma verdadeira comoção no mundo do desenvolvimento. Foi graças à própria Internet que os desenvolvedores brasileiros logo tiveram contato com a tecnologia Java. O acesso ao código fonte, disponível desde o início, fez começar uma grande onda de colaboração entre os desenvolvedores da linguagem, criando uma enorme comunidade ao seu redor. Vários grupos de usuários se formaram, entre eles, no Brasil, a Sociedade de Usuários da Tecnologia Java, ou “SouJava”. Criado no final dos anos 90 a partir do trabalho de evangelistas e desenvolvedores Java no Brasil, o SouJava cresceu e se tornou um dos mais ativos e importantes grupos de usuários Java no mundo, tendo como foco participar da evolução da tecnologia, expandir a adoção e principalmente compartilhar intensamente o conhecimento. Atualmente o grupo possui diversas atividades na comunidade brasileira, como reuniões, presenciais e online, focadas na divulgação técnica da tecnologia Java, com um foco na aplicação em projetos reais. Além das reuniões, que são mensas, gratuitase e abertas a qualquer desenvolvedor interessado, o SouJava também realiza diversos eventos como o JustJava, Café Brasil, Javali, Sou+Java, Maratona 4 Java, e vários outros. Em todos estes eventos os membros do SouJava, junto com palestrantes de todo o País, se esforçam para dividir conhecimentos e auxiliar os desenvolvedores, tornando a comunidade ainda mais forte e unida. Desde o seu início, o SouJava acompanha as novidades e evoluções da tecnologia. Recentemente, o grupo participou do lançamento do Java 8, o que foi um grande momento para a
comunidade Java. A nova versão traz novidades importantes como suporte a programação funcional com Lambdas, nova biblioteca de data e tempo, e muitas outras funcionalidades importantes. Participar dessa evolução e explorar novos conhecimentos a partir de tecnologias inovadoras é fundamental para minha carreira de desenvolvedor, assim como a de todos os que utulizam a tecnologia. Por isso que projetos como o OpenJDK e as discussões sobre o futuro da plataforma ajudam a revigorar os membros da nossa comunidade. Presenciar a evolução do Java, assim como o aumento de usuários e projetos espalhados pelo mundo, é o que nos motiva no grupo de usuários SouJava a continuar ativos e plenamente concentrados em promover a tecnologia Java em todo o seu conteúdo e detalhes técnicos.
Muito além da tecnologia Minha história com o SouJava começou em 2012, no evento JustJava, quando conheci o Bruno Souza (JavaMan), na época o presidente do grupo. Por se tratar do presidente, eu esperava um comportamento bastante formal, o que me deixou nervoso só pelo fato de eu não saber como me portar na sua presença. Porém, eu estava redondamente enganado. Mostrando bem o espírito colaborativo e acolhedor do SouJava, além de bastante humilde, Bruno trata a todos de igual para igual, sempre confiando o mesmo nível de responsabilidade a cada um de nós. Quando me interessei em participar do grupo e comecei a ajudar na organização, fui designado para ajudar nos eventos de São Paulo. Como parte da organização, pude participar ativamente dos evento, assistindo as palestras e aprendendo bastante sobre Java, o que para mim é de extremo valor até os dias de hoje. Quando me tornei oficialmente um membro ativo do
SouJava, passei a fazer parte de uma equipe de grandes amigos, que já estavam no SouJava háalgum tempo. O nosso grupo era formado por alunos de escola técnica e minha equipe era composta por Fabio Silva, William Moreira, Caio Magalhães, Fellipe Barreto, Johnny Santos e posteriormente Ygor Siqueira e Alexandro Martins. Com eles, aprendi muito sobre a tecnologia Java, e também muito além, sobre amizades. Como parte do SouJava conheci pessoas de que nem imaginaria me aproximar um dia. Vinicius Senger e Yara Senger (Fundadores da Globalcode), Felipe Pedroso (Intel), Stephen Chin (evangelista Java), Maurício Leal (RedHat), Otávio Santana (desenvolvedor do OpenJDK), Fábio Veloso (representante no JCP) e uma grande lista de pessoas que fazem a diferença tanto no mundo Java como em outras áreas da tecnologia. O SouJava me permitiu ir além das expectativas e encontrar a minha verdadeira identidade no meu “mundo tecnológico”. Descobri que posso testar meus limites a todo momento, pois sempre terei amigos no SouJava com quem contar. Esse apoio e incentivo tem sido muito importante na minha carreira. Para mim, o SouJava é mais do que apenas um grupo: é parte da minha família, e eu faço parte da família SouJava. Para participar do SouJava basta ir às reuniões técnicas, que acontecem todos os meses. Nesses encontros, você vai aprender muito sobre a tecnologia Java, fazer amigos e comer uma pizza com a gente. Agora, se você quiser realmente se envolver, e passar a fazer parte do grupo, o SouJava é um grupo muito aberto e qualquer interessado pode participar. Você será muito bem vindo a fazer parte de nossas atividades. Compartilhando conhecimentos, inovando, e expondo ao mundo a importância da tecnologia Java, você pode participar da organização e do dia a dia da Sociedade de Usuários da Tecnologia Java, fazer parte da família SouJava. Eu me envolvi, e com isso, cresci como profissional, fiz amigos, aprendi muito e aumentei minhas oportunidades. E sei que não vou parar por ai. Eu ainda quero muito mais, quero me envolver com o futuro da tecnologia Java, quero poder ensinar e compartilhar o que aprendi, quero me posicionar muito bem
no mercado, e me firmar como um desenvolvedor Java de qualidade. E sei que o SouJava vai continuar fazendo parte da minha vida, e vou ter o apoio que preciso para ir ainda mais longe. </>
Participe do SouJava Reuniões técnicas Mensais: o SouJava organiza encontros técnicos nos auditórios de algumas das mais importantes empresas do mercado Java mundial. Nesses encontros, temos muita informação e muita tecnologia. Os encontros são gratuitos. Detalhes sobre as próximas reuniões: http://soujava.org.br Canal IRC: diversos membros e organizadores do SouJava participam diariamente do canal #SouJava no IRC, trocando informações e experiências: http://soujava.org.br/servicos/ canal-irc-soujava/ Lista de discussão: o SouJava mantém um conjunto de listas de discussão sobre a tecnologia: http://soujava.org.br/servicos/listas-de-discussao/ Reuniões Semanais de Organização: nessas reuniões, o grupo que organiza o SouJava discute as próximas atividades, organiza o dia a dia do grupo, e divide as tarefas necessárias para o SouJava funcionar. Todas as segunda-feiras, das 21 às 22hs, por telefone. Detalhes para participar da reuniao: http://soujava.org. br/organizacao Adopt-a-JSR: o programa de padronização do SouJava, onde é discutido o futuro da tecnologia Java, e as ideias e discussões são levadas para o Java Community Process (JCP): http://soujava.org.br/servicos/adopt-a-jsr/ jDuchessBR: uma rede mundial de tecnologia, voltada para o público feminino, que reúne algumas das melhores programadoras do mundo para discutir o papel da mulher no mundo da programação Java: http://soujava. org.br/jduchessbr/
Rodrigo Alves Ruza, Coordenador da Sociedade de usuários da Tecnologia Java
40 > Conexão Vale do Silício
Aposte no bom comportamento Por Fernanda Weiden, Gerente de Engenharia do Facebook
Ultimamente tenho participado de diversas conversas com desenvolvedores que têm dúvidas sobre como monitorar o desempenho de softwares criados por eles. Com base nessas conversas, quero aproveitar este espaço para falar um pouco sobre formas de monitoramento de serviços, e não somente sobre tecnologias em si. Afinal, tecnologia é um pouco como gente: cada uma tem seu lado positivo e negativo e está sempre cercada de pessoas que a amam ou odeiam, sem nem sempre entender o porquê. Quando falamos de serviços rodando 24x7, é fundamental conhecer muito bem o sistema ou o software para entender qual é o comportamento desejado: utilização de rede, CPU, memória, disco, quantidade de mensagens de alerta em logs, quantidade de erros em logs, número de ativos em um determinado período, entre outros. Também é importante compreender o desempenho do software, obter números de latência e outras informações específicas sobre o serviço que é oferecido. De forma geral, desenvolvedores e administradores acompanham o funcionamento de
seus serviços para saber quando as coisas param de funcionar. Para isso, são criados diversos monitores na tentativa de capturar falhas no sistema. A intenção é, na ocorrência de um incidente, ter conhecimento de que há algo errado ou inesperado. Entretanto, é no momento em que os problemas acontecem (e eles sempre acontecem) que os envolvidos percebem que não estavam monitorando o serviço em um sinal específico, que naquela ocasião foi o sintoma de uma falha. Pela minha experiência, acredito que o erro mais comum cometido durante o monitoramento de desempenho ocorre na sequência de incidentes que causam alguma interrupção no serviço. Nesse tipo de situação, todo o foco inicial vai para resolver o problema e restabelecer o serviço. Só então os responsáveis preocupam-se com os sintomas que diversas vezes passaram despercebidos. É então, no “calor do momento”, que monitores (código para detecção de certos comportamentos) e alertas (métodos de notificação para esses monitores) são criados para todos os sintomas de que algo está errado. E isso se repete cada vez que um incidente ocorre.
Conexão Vale do Silício < 41
Tecnologia é um pouco como gente: cada uma tem seu lado positivo e negativo e está sempre cercada de pessoas que a amam ou odeiam, sem nem sempre entender o porquê Existe uma percepção de que esse tipo de resposta a incidentes garante que da próxima vez o sistema estará mais preparado. Mas isso nem sempre é verdade. O que acontece é que os sistemas, a cada vez, “encontram” um jeito novo e impressionante de falhar, e as coisas falham de uma forma sempre mais fantástica. Querer prever todos os tipos possíveis de falhas é como mirar em um alvo móvel, ou como dizemos em inglês “aiming at a moving target”. Pode ser divertido e poupar tempo, mas é extremamente ineficiente. Então, como se preparar para incidentes e saber o que realmente está acontecendo? Minha resposta para essa pergunta é: identifique e aposte no bom comportamento. Se você sabe qual é e tem dados de diversos ângulos sobre o comportamento esperado, sempre que algo estiver fora da normalidade você será alertado. Esse conhecimento vai fazer com que você sempre saiba das falhas, não importa qual a situação que levou o sistema a isso, pois elas são um
desvio do bom comportamento do serviço. Comportamento esse que, vale lembrar, não muda tão frequentemente. Assim, fica claro que sistemas de monitoramento de desempenho são somente um alerta de que algo está errado e não podem ser confundidos com sistemas de diagnóstico de falhas. Para encontrar a solução ou a causa central de um problema, é necessário investir em ferramentas de diagnóstico. Por fim, separar a expectativa entre diagnóstico e monitoramento é essencial para que façamos um bom trabalho em cada uma dessas disciplinas, que são igualmente importantes, mas completamente diferentes entre si.</>
Fernanda Weiden trabalha com infraestrutura de grande escala, atualmente no time de engenharia do Facebook responsável for caching e segurança. Anteriormente, Fernanda trabalhou no Google, na Suíça, e na IBM, em São Paulo. Participante da comunidade Software Livre desde 2002, foi uma das organizadoras do FISL (Fórum Internacional Software Livre) por vários anos e entre 2009 e 2011 foi vice-presidente da Free Software Foundation Europe.
42 > Review
Brackets: o editor para web que faz jus ao seu propósito Por João Batista Neto, Líder de Desenvolvimento do iMasters
Logo que fui convidado para fazer este review, me foi sugerido que escrevesse sobre o, até então desconhecido para mim, editor Brackets. Honestamente, por usar o Vim desde que lembro como desenvolvedor, essa euforia recente por editores como Atom.io, Sublime text etc., me cansa. Mas também entendo a necessidade dos desenvolvedores por uma ferramenta que seja rica em recursos, mas simples e leve o suficiente para ser utilizada no dia a dia.
Primeira impressão Se você já usou alguma vez o Sublime Text, então provavelmente terá a mesma primeira impressão que a minha: a interface de usuário é praticamente igual. O tema padrão do Brackets é mais suave que o padrão do Sublime, mas os elementos visuais são dispostos de uma forma tão semelhante, que quase dá para dizer que é um clone. O editor também abre ridiculamente rápido. Mais rápido, inclusive, que a versão do Vim com interface gráfica – gVim.
Uma análise mais profunda Ao fazer uma análise sobre alguma coisa, tenho o cuidado de procurar antes saber: qual o propósito disso? “Brackets is an open source code editor for web designers and front end developers.” O editor Brackets deixa muito claro seu propósito, mas, mais importante, o cumpre com maestria. A mágica desse editor e, certamente, o motivo para o desenvolvedor front end dar-lhe uma chance, é o recurso Live Preview. Ao ativar o recurso, uma aba no navegador Google Chrome é aberta. A partir de então, cada caractere modificado, elemento adicionado ou removido na marcação, valor modificado de propriedades CSS, cada simples edição, reflete instantaneamente no navegador.
Review < 43
Chega a ser divertido ver as coisas acontecendo no navegador, enquanto vamos editando o código. Por utilizar Node.js, o Live Preview é instantâneo, sem refreshes. Isso permite, por exemplo, que ao selecionar um parágrafo no editor, o mesmo parágrafo seja destacado no navegador.
Prós É open-source – o Brackets é lançado sob licença MIT. Esse foi, pelo menos para mim que não conhecia o editor, o principal motivo que me fez instalá-lo. É rápido – muito rápido. Excelente para desenvolvimento front-end, desde pequenas coisas até grandes projetos. Tem o recurso de Live Preview – por utilizar o próprio navegador para exibir o resultado do desenvolvimento on-the-fly, temos uma visualização real do que está acontecendo. É fácil – a interface é simples e intuitiva. Tem opção para vários idiomas, incluindo o português brasileiro. É extensível – o editor pode receber novos recursos através da adição de extensões. Além disso, o repositório de extensões é grande o suficiente para cobrir soluções para diversas situações pelas quais outros desenvolvedores já passaram. Integração com Theseus – o desenvolvimento, a análise de código e a depuração de Javascript ficam fáceis com o a integração com Theseus. De fato, não é surpresa um editor que utiliza Node.js como infra ter uma boa integração para depuração JavaScript.
É multiplataforma – possui pacotes pré-compilados para Windows, Mac e Linux. Apesar de o pacote para Linux ser Debian, a característica open source do editor permite que terceiros empacotem para outras distros, como o Fedora.
44 > Review
Gerenciador de projetos – o gerenciador de pastas funciona como um gerenciador de projetos. Um recurso que falta no Sublime text, mas que foi bem implementado no Brackets. Não é preciso levantar várias instâncias do editor, basta selecionar o projeto em que vamos trabalhar. Além disso, o editor se lembra dos arquivos abertos na última vez que o projeto foi trabalhado, trazendo essa seleção automaticamente. Construído com tecnologia web – a ferramenta não é apenas focada em web, é construída com tecnologia web. Exatamente por isso, ela pode ser modificada utilizando apenas marcação, CSS e JavaScript.
Contras É fundamental uma resolução alta para o Live Preview – a grande vantagem do Live Preview é poder colocar o editor lado a lado com a janela do navegador. No meu caso, com 1920x1080px, a experiência foi excelente. Mas, em resoluções menores, a experiência do Live Preview pode ser prejudicada.
Conclusão Brackets é um projeto open source da Adobe, lançado sob licença MIT, que nasceu para ser guiado e desenvolvido pela e para a comunidade de desenvolvedores. É um editor com foco em web e leva isso muito a sério. Tanto é que a própria ferramenta utiliza de tecnologias web, tanto em sua interface quanto em sua infraestrutura. É fácil, leve e pode ter novos recursos adicionados através de extensões próprias ou de terceiros, que podem ser desenvolvidas utilizando HTML, JavaScript e CSS. Só o fato de ser open source com licença MIT já justifica sua instalação para, pelo menos, dar uma chance. Mas o Live Preview é a cereja do bolo, que faz do Brackets um dos melhores editores para web com que tive contato até agora. </>
João Batista Neto é Engenheiro de Aplicações e trabalha com ambiente web desde 2000 em diversas linguagens, como Java e PHP, dedicando esforços ao desenvolvimento de bibliotecas reutilizáveis para a comunidade. Especialista em integração de sistemas, possui várias bibliotecas reutilizáveis publicadas como open-source para a comunidade, como biblioteca Cielo, PayPal, ECT (Correios), BuscaPé, Lomadee, Twitter, Facebook entre várias outras. É administrador do Fórum iMasters e iMasters Code, onde compartilha conhecimento com a comunidade de desenvolvedores. Também é autor de artigos no Portal iMasters e de cursos no iMasters PRO. @netojoaobatista
46 > Games
Por Kemel Zaidan, membro da comunidade de Software Livre brasileira e Editor da Revista iMasters
Esqueça PS4 e Xbox One: o futuro dos games está nas plataformas abertas O final de 2013 e o início de 2014 foram agitados por dois grandes lançamentos: as duas maiores plataformas de jogos, PlayStation e Xbox, lançaram novas versões de seus consoles, o PlayStation 4 e o Xbox One, da Sony e da Microsoft, respectivamente. Conforme costuma acontecer nessas ocasiões, ambos os lançamentos receberam plena atenção da mídia e dos meios de comunicação. Por mais interessante que essas plataformas possam parecer, lançamentos desse tipo sempre trazem mais do mesmo: hardware que incorpora os avanços dos últimos anos, gráficos mais realistas, maior poder de processamento e a continuidade de muitas das franquias que fizeram sucesso anteriormente, sendo esta uma das formas mais antigas de trazer os jogadores mais fanáticos para as novas versões dos consoles. Dessa forma, eles esperam poder reviver as velhas aventuras de seus personagens e jogos favoritos em versões melhoradas. Contudo, desenvolver jogos para essas plataformas é algo para poucos. Para começar, o custo de aquisição do kit de desenvolvimento (que é cotado em algo próximo a US$ 2.500 para o PS4 - http://ow.ly/vqRpg) já afasta muitos desenvolvedores independentes. Em seguida, o grau de complexidade que essas plataformas exigem demanda um número elevado de profissionais trabalhando em equipe e, consequentemente, os custos dos jogos giram hoje em torno das centenas de milhões de dólares. Tome como exemplo o jogo Grand Theft Auto V, considerado o mais caro da história. Lançado em 2013, ele custou US$ 266 milhões, cifra que supera o orçamento de muitos blockbusters hollywoodianos. Mas se depois de tudo isso você ainda assim tiver conseguido criar seu jogo, estará inevitavelmente “amarrado” aos donos da plataforma (nesse caso, as gigantes Sony e Microsoft), tendo que optar pela necessidade da custosa distribuição de mídias físicas (as caixinhas com os discos que tendem a desaparecer) ou a distribuição digital através do modelo de “app store”. Em ambas as situações, você terá que se submeter aos termos e às condições que essas empresas impõem para a venda de conteúdo através de suas redes de distribuição online. Situações como essas tendem a afastar a inovação, pois, quando há somas tão grandes em jogo, é compreensível que haja uma maior aversão ao risco e uma grande pressão por lucro. Isso justifica todo o marketing envolvido e a continuidade das franquias. Não seria bom se o desenvolvimento de jogos fosse mais acessível a uma quantidade maior de desenvolvedores independentes que pudessem colocar em prática ideias e jogabilidades inovadoras? Pois é isso que está acontecendo agora, a partir das plataformas móveis e dos sistemas abertos.
Games < 47
OUYA - o pioneiro
Imagem: http://bit.ly/1kLQlEv
A pioneira delas foi o OUYA (ouya.tv). Surgido de um dos projetos de maior sucesso no Kickstarter (http://ow.ly/vqRzp), a campanha conseguiu arrecadar mais de US$ 8,5 milhões através da plataforma de financiamento colaborativo, valor nove vezes superior ao objetivo inicial de US$ 950 mil. A ideia do OUYA é simples: levar os jogos da plataforma Android para a TV e possibilitar o uso de joysticks, da mesma forma como fazem os consoles tradicionais. As vantagens dessa abordagem vão além do conforto de uma tela maior e de um joystick nas mãos: os jogos possuem preços compatíveis com as plataformas móveis (girando em torno de US$ 5) e qualquer desenvolvedor pode disponibilizar seus jogos para o console. Assim como acontece com o Android, não há custo para a aquisição do SDK, e a loja fica apenas com uma porcentagem dos jogos vendidos. Isso é um estímulo à criatividade: quanto mais gente no ecossistema, melhor - ganha a plataforma e ganham os jogadores. Há espaço inclusive para jogos de nicho, como aqueles com visual retrô, coisa impraticável nas plataformas mais “modernas”. Apesar de custar apenas US$ 99 (um quarto do valor do PS4 e um quinto do XBox One no mercado americano), o hardware do OUYA se assemelha ao de um tablet topo de linha: processador NVidia Tegra 3 quad-core, 1 GB RAM, 8 GB de armazenamento em flash, conexão HDMI com saída 1080p, WiFi 802.11bgn e bluetooth 4.0. É possível até mesmo montar seu próprio hardware e imprimir o case em um impressora 3D - http://ow.ly/vqS8M.
SHIELD - a aposta da Nvidia
Imagem: http://bit.ly/SzL0Kb
Com abordagem semelhante ao OUYA, a Nvidia lançou seu console próprio, o SHIELD, com o mesmo intuito de dar vida nova aos jogos criados para a plataforma Android. Nesse caso, o apelo principal continua sendo a aposta na mobilidade, mas com a jogabilidade de um dispositivo dedicado: um joystick semelhante aos videogames comuns, LCD de alta definição, alto falantes de excelente qualidade. Além disso, o SHIELD aposta no processador de última geração da fabricante (o Tegra 4) e traz a interessante possibilidade de fazer streaming de alguns jogos do PC para o console ou de eventualmente jogar os jogos na TV através de conexão Wi-Fi. Tanto o OUYA quanto o SHIELD se beneficiam do ecossistema Android, permitindo a instalação de aplicativos que podem expandir as possibilidade de entretenimento dos aparelhos, ao possibilitar o uso de aplicativos Android, como YouTube, XBMC, Netflix, Plex, Pandora, Google Play Books etc.
SteamOS - foco na distribuição de jogos O último jogador a entrar nesse campo parece ter sido a Valve, conhecida pela sua plataforma pioneira na venda de jogos online, o Steam. Em 2012, o cofundador da Valve, Gave Newell ganhou as manchetes ao declarar que o Windows 8 era “um desastre”, fazendo com que a empresa apostasse fortemente no Linux ao criar uma distribuição voltada para jogos e para a execução de
48 > Games
Alienware com SteamOS. Imagem: http://bit.ly/1oq3kiN
sua plataforma Steam, o SteamOS. Por sua vez, as Steam Machine nada mais são do que um hardware dedicado com a plataforma SteamOS pré-embarcada. Contudo, o download do sistema operacional foi disponibilizado online (http://ow.ly/vqSth) para aqueles que desejam montar ou reaproveitar seu próprio hardware. Do ponto de vista técnico, a aposta faz muito sentido: o Linux é, de fato, uma plataforma muito mais estável e flexível do que o Windows para o desenvolvimento de jogos e já atingiu um amadurecimento que permite seu uso para esse fim. Ao contrário de outros sistemas proprietários, ele não está suscetível a mudanças bruscas de rumo por parte de uma única empresa, gerando incompatibilidades e rupturas com versões anteriores. Como o desenvolvimento do GNU/Linux é aberto e colaborativo, sempre existe ainda a possibilidade de influenciar nos rumos do desenvolvimento e adaptá-lo a necessidades particulares. Do ponto de vista estratégico, a posição também parece inteligente, pois a empresa cria uma plataforma de jogos que é “hardware agnostic”, ou seja, independente de hardware, focando o negócio na distribuição dos games - que já é a vocação da empresa - e na experiência do usuário.
Ponto sem volta Resta ainda saber se todas essas iniciativas terão sucesso comercial. Apesar de tudo, não
faltam críticos a cada um dos projetos citados: uma busca rápida na Internet e não é difícil encontrar reviews negativos. Entretanto, a minha aposta vai na direção diametralmente oposta: independentemente de sucesso comercial, já é possível pensar em modelos de negócio e distribuição que não eram possíveis há poucos anos. Modelos mais acessíveis tanto ao consumidor final quanto aos desenvolvedores e que contemplam nichos que não eram viáveis até pouco tempo. A caixa de Pandora foi aberta, e creio que tenhamos chegado a um ponto sem volta: no caso de algum projeto fracassar, outros se sucederão corrigindo eventuais falhas e com a vantagem de ter as experiências anteriores como bússola para se guiar. As oportunidades são grandes, e quem se sair bem sucedido na criação de um mercado de games alternativo ganhará uma boa dianteira em relação aos concorrentes que vierem depois. É ver para crer. </>
Kemel Zaidan Kemel Zaidan é membro ativo da comunidade de software livre brasileira e um defensor das causas ligadas à inclusão digital e ao conhecimento livre. No campo profissional, já coordenou projetos de educação e inclusão em entidades do terceiro setor e foi editor-chefe da Linux Magazine, tendo palestrado nos mais diversos eventos da área de tecnologia. Nos últimos anos, tem se dedicado a pesquisar o universo da cultura digital e seus desdobramentos. @kemelzaidan
50 > Tecnologia do Futuro
Sempre disponível Por Flávia Jobistraibizer, Editora-Chefe das revistas Linux Magazine e Admin Redes & Segurança
Em tempos em que informações valem ouro e estas precisam manter-se disponíveis em tempo integral para que possam ser manipuladas, consultadas, transferidas, copiadas ou qualquer outra finalidade a que se destinem, é necessário redobrar a atenção com a disponibilidade dos servidores de bancos de dados. Um servidor instável, offline ou mesmo danificado pode trazer sérios prejuízos para empresas que trabalham com informações, realizam métricas e análises de dados, para o mercado de Big Data etc. Uma técnica já bastante popularizada de “backup” das informações de servidores de bancos de dados é a replicação. Ela consiste em criar réplicas dos dados entre servidores paralelos, de forma que, em caso de falha de um servidor, os dados ainda estejam disponíveis em outra instância para que o negócio não deixe de funcionar, garantindo dessa forma a confiabilidade e a disponibilidade centralizada das informações para todos os sistemas que delas necessitem. Um bom cenário de replicação útil para diversas empresas com as quais trabalhei é o seguinte: •• Uma empresa possui sua matriz localizada no estado de São Paulo e algumas filiais espalhadas pelo Brasil; •• A matriz da empresa precisa analisar em tempo real as informações geradas pelas filiais: cadastros de novos clientes, vendas, ordens de serviços, orçamentos etc.; •• As filiais necessitam de aprovação de
determinadas ações das filiais, como nos casos de ordens de compra. Sendo assim, uma vez que os dados estejam centralizados na matriz, quaisquer alterações serão replicadas para as filiais e vice-versa. No caso de uma falha em qualquer um desses servidores, após sua resolução, os dados serão atualizados de forma que nada seja perdido e o processo de negócios continue com a menor taxa de impacto possível, reduzindo o risco de prejuízos.
No mundo real Você pode adaptar esse cenário para a sua necessidade com a finalidade de verificar se e quando é necessário ter replicação de dados na sua empresa. No mercado de SGBDs (Sistemas Gerenciadores de Bancos de Dados) atuais, é praticamente inexistente um sistema que não tenha o recurso de replicação de dados, uma vez que ele passou a ser prioridade e item de suma importância para quem precisa consumir a informação armazenada rapidamente, sem preocupações em relação à disponibilidade dos dados.
Replicação ou espelhamento? Até pouco tempo atrás, o espelhamento - no caso dos bancos de dados - era diferente da replicação que temos hoje. A replicação tinha algum retardo, levava algum tempo para atualizar os outros servidores, enquanto o espelhamento consistia em manter uma cópia fiel em tempo real do servidor em outro local.
Tecnologia do Futuro < 51
Como manter os dados dos seus servidores de bancos de dados replicados de forma que estejam sempre disponíveis em uma eventual falha no sistema
Atualmente, a replicação pode ter o mesmo efeito de um servidor espelho, quando bem configurado, e o retardo, se existente, é muito pequeno, possuindo alguns milissegundos. No entanto, para fins didáticos do conceito de ambos os recursos, o espelhamento de volumes lógicos (locais onde são armazenados os dados) são tratados como volumes físicos presentes em uma infraestrutura única, o que não acontece na replicação, na qual os volumes podem estar em diferentes arquiteturas e infraestruturas, remota ou localmente.
Replicação no MySQL A replicação de dados em servidores MySQL é bastante facilitada e trabalha basicamente com a configuração de binários. No cenário exemplo deste artigo, vamos trabalhar com apenas dois servidores. Ambos devem possuir o parâmetro server-id configurado, para que seja mais fácil identificá-los. Não é o objetivo deste artigo ensinar a instalação do servidor MySQL, então vamos partir da premissa de que você já possui duas instâncias do MySQL instaladas em dois servidores, que em meu exemplo terão os IPs 192.168.11.1 (master principal, que será o servidor que sofrerá efetivamente todas as alterações) e 192.168.11.2 (o slave), e ambas as versões são 5.1.x. Nesse cenário, a máquina master possui um banco de dados chamado finance e que será replicado para o servidor escravo. O servidor escravo possui um usuário previamente criado chamado adamante e que possui acesso ao banco de dados que será replicado. No arquivo my.cnf, deverá ser configurado o
banco de dados a ser replicado e o server-id do servidor master seguinte: log-bin = /var/log/mysql/mysql-bin.log binlog-do-db=finance server-id=1
O servidor escravo poderá sofrer a mesma alteração no arquivo my.cnf, no entanto, seu server-id será 2 (server-id=2): log-bin = /var/log/mysql/mysql-bin.log replicate-do-db=finance server-id=1
Reinicie o servidor de banco de dados master e em seguida execute os comandos que irão garantir os privilégios necessários ao usuário adamante (presente no servidor escravo) para que este tenha acesso à replicação de dados do servidor master: GRANT REPLICATION SLAVE ON *.* TO ‘adamante’@’%meudominio.com.br; FLUSH PRIVILEGES;
O próximo passo consiste em bloquear a tabela para receber dados, de forma que possamos realizar um dump completo para a primeira carga de dados no servidor escravo. USE finance; FLUSH TABLES WITH READ LOCK;
52 > Tecnologia do Futuro
Dessa forma, todas as tabelas do banco de dados finance estarão congeladas para que seja possível criar um arquivo de exportação íntegro.
master de forma que tenhamos um resultado parecido com este:
É possível fazer a exportação do arquivo dump do banco de dados de duas formas: a primeira utilizando o comando mysqldump + nome da tabela e gerando um arquivo .sql que poderá ser importado no servidor escravo posteriormente, ou então através do nome do binário de dados, o que pode ser mais interessante caso sua massa de dados seja muito grande.
+------------------+----------+--------------+------------------+
Vamos trabalhar com o comando mysqldump que é bastante ágil e atende à maioria dos cenários atuais de pequenas e médias empresas. Vamos criar uma cópia do banco finance em um arquivo .sql que será transportado para o servidor escravo e que servirá para deixá-los idênticos nesse primeiro momento - lembrando que as tabelas do servidor master permanecem bloqueadas pelo comando LOCK enviado anteriormente. Execute o comando com o usuário root da máquina master (isso também poderia ser feito com algum usuário que tivesse permissões para exportação de dados, como o usuário adamante presente no servidor escravo): mysqldump --u root --p 123456 --database finance > finance_export.sql
Uma vez exportados os dados, teremos um arquivo .sql contendo todo o conteúdo do banco de dados finance. Copie esse arquivo .sql para o servidor escravo, crie um banco de dados com o mesmo nome (finance) nesse servidor e importe o arquivo .sql que criamos para populá-lo com os dados.
| File
| Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+ | mysql-bin.000159 | 114
| finance
| manual,mysql
|
+------------------+----------+--------------+------------------+
Veja que o binário do banco de dados finance possui o nome mysql-bin.000159 e sua posição é 114. No servidor masters, vamos informar de onde os dados serão recebidos através do comando CHANGE MASTER. CHANGE MASTER TO MASTER_ HOST=192.168.11.1’, MASTER_ USER=’adamante’, MASTER_ PASSWORD=’123456’, MASTER_LOG_ FILE=’mysql-bin.000159’, MASTER_LOG_ POS=114; SLAVE START;
Isso finaliza a configuração da replicação entre os dois servidores. Desbloqueie as tabelas do servidor master com o comando UNLOCK TABLES; e a partir de então todas as alterações realizadas no servidor master serão replicadas no servidor escravo. Futuramente vou abordar a replicação de dados em outros SGBDs. Até lá! </>
mysqldump --u adamante --p 123456 --database finance < finance_export.sql
Reinicie o banco de dados escravo para que as configurações tenham efeito e em seguida vamos coletar uma informação importante para finalizar a configuração da replicação: o local do binário de dados. Execute o comando SHOW MASTER STATUS; no servidor
Flávia Jobstraibizer é gerente de projetos, editora-chefe das Revistas Linux Magazine e Admin Magazine, analista de sistemas, autora de livros de informática e defensora da liberdade digital. http://flaviajobs.com.br | @flaviajobs
Código Livre < 53
Informações e dicas sobre projetos Open Source Por Kemel Zaidan, membro da comunidade de Software Livre brasileira e Editor da Revista iMasters
jQuery-maskMoney
Homebrew
Trata-se de um plugin para o jQuery, popular biblioteca JavaScript que permite mascarar a entrada de dados numéricos em um formulário HTML para formato de moeda. Há opções para utilizar os símbolos monetários (ex.: R$, US$, € etc.) antes ou depois do valor, exibir separadores de casas, separador decimal como vírgula ou ponto, e exibição de número negativo; tudo isso com uma baixa curva de aprendizado. http://ow.ly/w1UHu
O projeto se autodenomina “o gerenciador de pacotes que faltava ao Mac OS X” e se propõe a facilitar a instalação de diversos softwares e ferramentas de desenvolvimento que são muito utilizados e que foram propositalmente deixados de fora do sistema operacional pela Apple. O programa é escrito em Ruby e cada software é instalável através de um script Ruby simples denominado “formula”. São mais de 2700 softwares e bibliotecas instaláveis por meio do programa. http://ow.ly/w1Ynj
Dose É uma ferramenta gráfica em forma de semáforo e escrita em Python que exibe o estado dos testes que são normalmente utilizados em dojos (TDD, ou test driven development, na sigla em inglês). O programa utiliza a biblioteca gráfica wxPython e pode funcionar facilmente com suítes de testes de praticamente qualquer linguagem, incluindo JavaScript, C, Bash Script, Ruby e, obviamente, Python. http://ow.ly/w1WOy
Pencil É uma ferramenta de código aberto para a prototipagem de mockups e interfaces de usuário. Além de estar disponível para todas as plataformas (Windows, Linux, Mac etc.), pode ser instalada como uma extensão do Firefox ou como um programa autônomo. Entre seus recursos estão o suporte para diagramas de fluxo e diferentes coleções de objetos de design (como botões, menus, caixas de diálogo etc.), que podem ser utilizados facilmente para o projeto de interfaces. Além das coleções disponíveis, é possível instalar mais algumas a partir do site e de contribuições da comunidade. http://ow.ly/w22Fu
Lime É um clone 100% livre do editor de texto mais hipster do momento, o Sublime Text. Ao contrário de seu irmão mais famoso, o Lime é escrito em Go e dividido em backend e frontend, sendo que o primeiro já suporta a maior parte dos recursos do Sublime, como a compatibilidade com os esquemas de cor do TextMate, as definições de sintaxe, os snippets, a API de plugins em Python e os múltiplos cursores. No frontend, há diversas opções, ainda em estágio inicial de desenvolvimento, como qml, HTML e até mesmo linha de comando. http://ow.ly/w21dg
Kemel Zaidan é membro ativo da comunidade de software livre brasileira e um defensor das causas ligadas à inclusão digital e ao conhecimento livre. No campo profissional, já coordenou projetos de educação e inclusão em entidades do terceiro setor e foi editor-chefe da Linux Magazine, tendo palestrado nos mais diversos eventos da área de tecnologia. Nos últimos anos, tem se dedicado a pesquisar o universo da cultura digital e seus desdobramentos.
Imagem: Ingvar Bjork / Shutterstock.com
Por que contratar serviços especializados em WordPress? Por Leandro Vieira, CEO da Apiki WordPress
Ao escolher o WordPress, você fará uma boa escolha para o seu negócio. Quem toma essa decisão precisa estar seguro e seguir confiante, e para te ajudar vou apresentar alguns bons e sólidos motivos para a sua escolha. Antes de mais nada, certifique-se de que o WP é a melhor escolha - sim, pode ser que não seja a melhor para você. Depois, conheça os tipos de serviço e toda as possibilidades. Tudo isso é necessário antes de contratar uma empresa especializada. Atualmente, o WordPress tem a maior de participação de mercado entre os CMS (Content Manager Service), com 21,8% e crescendo. Não possui custo de licença e é código
aberto. Além disso, possui uma comunidade incrível e participativa, de pessoas que são apaixonadas pela plataforma. Novas versões são lançadas periodicamente, o que o torna sempre atualizado, sem falar na interface intuitiva, que facilita o uso pelos editores. A plataforma ainda é amigável para as ferramentas de busca e pode ser facilmente integrada a inúmeras plataformas sociais. Com sua popularidade e adesão, tanto por empresas como por desenvolvedores diversos, você não fica refém de um único fornecedor, e a troca de prestador de serviço, quando for o caso, torna-se facilitada. No Brasil e no mundo, já temos empresas e casos de uso muito expressivos. O importante é você saber
WordPress < 55
Fonte: http://w3techs.com/technologies/history_overview/content_management/all/q
o que deseja, aonde quer chegar e encontrar algum serviço baseado em WordPress. O WordPress oferece inúmeros temas, prontos ou personalizáveis, para dar vida às suas ideias, e o investimento nisso é mínimo. O sistema também oferece dezenas de milhares de plugins, que agregam novos recursos e funcionalidades à plataforma - você pode usar um plugin já existente ou desenvolver algum que atenda melhor às suas necessidades. Como os números são superlativos, é importante ficar atento a importantes detalhes.
Esqueça o WordPress, pense no seu projeto O desenvolvimento personalizado em WordPress é o caminho que lhe permite esquecer a plataforma e focar no seu projeto, pensando na ideia, na arquitetura de informação, no design, na implementação do design responsivo. Você só precisa confiar o trabalho a especialistas que farão tudo acontecer, do jeito que você planejou. Não existe limite, ou ele pode ir até onde forem sua criatividade e ousadia. Alguns projetos de Internet são monitorados com ênfase em performance e resultados, gerando atualizações constantes no site desenvolvido. Portanto, lembre-se de que o seu fornecedor deve te atender com serviços de suporte, melhorias evolutivas e desenvolvimento contínuo, para levar seu projeto sempre ao próximo estágio. Contratar uma empresa de hospedagem, na hora de publicar o seu site, também não é um problema - praticamente
todas as empresas de hosting já possuem um produto direcionado para WordPress, algumas até com suporte especializado. Por falar em suporte, é comum que o fornecedor ofereça um treinamento inicial para que você conheça bem a plataforma e se sinta confortável. No mercado também são ofertados cursos especializados em WordPress focados em gestores de conteúdo e desenvolvedores. Assim, você garante conhecimento técnico para o seu time e pode até contar com soluções in house. Com tanta flexibilidade, você terá liberdade para focar em seu negócio, gerir seu conteúdo e dar ênfase ao marketing de conteúdo através do WordPress, aplicando facilmente técnicas de otimização para mecanismos de busca, integrações sociais, landing pages, Google Analytics e o que precisar. Ah, e atente-se para o fato de que o tamanho do seu negócio não é fator determinante. WordPress é para empresas grandes e para aquelas que pensam grande. Há serviços direcionados para todo público, e as pequenas e médias empresas ganham cada vez mais atenção e espaço. A sigla PME sempre teve espaço junto ao WordPress.
Leandro Vieira Leandro Vieira é uma das grandes referências de WordPress no Brasil, entusiasta e evangelista da plataforma. Fundador e CEO da Apiki, empresa especializada no desenvolvimento web com WordPress. Leandro@apiki.com | @leandrovieira
56 > Node.JS
Por William Bruno, Desenvolvedor Front-End da Locaweb
Configurando NodeJS em produção em um Cloud Server A idéia de poder utilizar apenas JavaScript tanto no client-side quanto no servidor é o trending do momento. NodeJS está aí, e já vemos grandes cases de empresas migrando plataformas, escalando e reduzindo custos. Mas e como colocaremos em produção? Usarei neste artigo um Cloud Server Pro da Locaweb, com o Sistema Operacional Debian com configuração mínima 512 MB de RAM, e você pode usar estes passos para instalar em qualquer máquina Debian, ou em outra distruição Linux, com algumas diferenças. Depois de conseguir acesso ssh ao seu servidor, via chave privada, vamos passar por todos os passos até você conseguir utilizar uma aplicação em produção, na porta 80.
Preparando para instalar Vamos precisar do python e do wget, e vamos instalá-los: apt-get install wget python vim
wget http://nodejs.org/dist/v0.10.26/ node-v0.10.26.tar.gz
Depois decompactamos: tar xvf node-v0.10.26.tar.gz
Pressione TAB após digitar “node” para completar o nome do arquivo. pushd node-v0.10.26
Digite apenas node e pressione TAB novamente. Execute cada um dos comandos abaixo individualmente, esperando o anterior terminar para enviar o próximo: ./configure make make install
Eu sempre instalo o VIM, pois estou mais familiarizado com ele.
Instalando o NodeJS Copie o link de download do source code mais atual no site: http://nodejs.org/download/ No momento em que escrevo este artigo, a versão é 10.26. Vamos baixar diretamente para o servidor utilizando wget:
Após alguns minutos para testar, digite apenas: node -v
No terminal, você deverá ver algo como: v0.10.26 Tudo certo, NodeJS instalado e funcionando. Após isso, você pode apagar o diretório que usamos e o tar que foi baixado:
Node.JS < 57
rm -r node-v0.10.26*
Hello World Nesse ponto, você pode subir a aplicação NodeJS que desenvolveu localmente, utilizando um git clone, rsync ou outra forma de deploy que preferir. Vou fazer um Hello World bem simples com o Express para continuarmos a ver como deixar o servidor rodando e configurar as dependências. Instale o expressjs globalmente: rm -r node-v0.10.26*
Iremos utilizar o diretório:
curl http://localhost:3002
O output do terminal será um “Hello World” como escrevemos no app.js
Nginx como proxy reverso Deixamos a aplicação node rodando na porta 3002 (escolha qualquer porta de número alto) e, para acessarmos via http, a partir do browser, vamos utilizar o nginx como proxy reverso, escutando a porta 80 para direcionar as requisições para o node. Por boa prática, sempre configure o seu firewall para bloquear todas as outras portas, liberando somente aquelas que forem necessárias, como a 80 do http, e a 22, caso você não tenha mudado a porta do seu ssh. apt-get install nginx
/var/www/seusite.com.br
Como root da aplicação. Dentro dele, crie um arquivo chamado app.js com o conteúdo: var express = require(“express”), app = express(); app.get(‘/’, function(req, res){ res.send(‘Hello World’); }); app.get(‘/node’, function(req, res){ res.send(‘/node’); }); app.listen(3002);
Criei apenas duas rotas para testar a aplicação. Feito isso, deixe uma aba rodando o servidor Node, com o comando:
Caso tenha algum problema na instalação de algum pacote, limpe tudo daquela instalação usando o comando: apt-get purge nome_do_pacote
Assim, além de desinstalar, vai limpar todos os vestígios dele. Depois de instalado, vamos configurar o nginx. Crie o arquivo “seusite” no diretório /etc/nginx/ sites-available, com o conteúdo abaixo: server {
listen
server_name seusite.com.br;
root /var/www/seusite.com.br/; if ($http_host != “seisite.com. br”) {
node app.js
E em outra aba ssh, faça um teste digitando:
80;
}
rewrite ^ http://seusite.com. br$request_uri permanent;
58 > Node.JS
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-ForwardedFor $remote_addr; proxy_set_header Host $host;
}
proxy_pass http:// localhost:3002;
location ~* \.(?:ico|css|js|gif|jp e?g|png|ttf|woff)$ { access_log off; expires 30d;
add_header Pragma public; add_header Cache-Control “public, mustrevalidate, proxy-revalidate”; }
proxy_pass http:// localhost:3002;
location = /robots.txt { access_ log off; log_not_found off; }
location = /favicon.ico { access_ log off; log_not_found off; }
}
Nessa parte, a estrutura do nginx é bem igual à do apache. E então iniciamos o nginx com: /etc/init.d/nginx start
Feito isso, caso a aba com node app.js ainda esteja em execução, você já conseguirá acessar o nosso Hello World pelo browser, passando pelo nginx, e o último passo para deixar em produção é usar um serviço para que você não precise ficar com o terminal aberto, para rodar o servidor node. Usando o Forever Instale-o via npm npm install -g forever
Basicamente, você usará poucos comandos dele por enquanto: •• forever list: mostra todos as aplicações node que estão em execução
location ~ /\.ht {
•• forever start/stop: inicia ou para um servidor node
}
•• forever restartall: reinicia todas as aplicações
deny all;
Vamos deixar o nginx escutando a porta 80, então se por acaso você já tiver um apache ou outro servidor nessa porta pare ele, no caso do apache, basta digitar no terminal: service apache2 stop, ou apachectl stop
E como eu não iniciei o forever com watch, a cada alteração que você fizer nos arquivos precisará reiniciá-lo. É isso, pessoal, temos um servidor Debian rodando NodeJS na porta 3002, com o nginx como proxy reverso na porta 80! Até a próxima!
Faça um link simbólico do arquivo para a pasta sites-enabled: ln -s /etc/nginx/sites-available/ seusite /etc/nginx/sites-enabled/ seusite
William Bruno é Desenvolvedor Front-End da Locaweb, apaixonado por JavaScript, estará estudando matemática, design patterns ou boas práticas de programação sempre que você o encontrar. william. moraes@locaweb.com.br | @tiu_uiLL
60 > Sr. Conteúdo
Você, cada vez mais próximo Por Bruno Rodrigues, Consultor de Informação e Comunicação Digital.
Para o bem ou para o mal, a Copa do Mundo no Brasil colocou o país em outro patamar de relacionamento, dentro e fora da fronteira: agora não somos mais apenas reativos, queremos – e podemos – nos relacionar melhor com nossos públicos, seja à distância ou presencialmente. Mais que aproveitar uma oportunidade, ir além é um baita desafio. Fazer contato (e ele surtir efeito) é sempre uma incógnita, e o sucesso de uma empreitada depende inteiramente de você, aquele que se coloca à disposição, todo o tempo, para dar informações, resolver problemas, agradar. Se queremos estar um passo adiante, como criar relacionamentos maduros, duradouros e eficazes? As mídias sociais, por exemplo, pedem um contato mais profundo do que aquele com que estávamos acostumados há décadas, e que acontecia, até então, em outros canais de atendimento.
moeda. Enquanto o relacionamento trabalha o emocional e o subjetivo, a palavra trabalha o racional e o lado objetivo do contato. O relacionamento trata e cuida do usuário, a escrita entrega o que é esperado da marca. É impossível desvincular um do outro, pois eles se mesclam o tempo todo, e por isso é importante criar bases sólidas na construção de um bom relacionamento e usar a palavra para concretizá-lo. Nas mídias sociais, assim como nos outros canais, existem seis momentos no contato com o cliente: recepção, dúvida, reclamação, crise, manutenção e fechamento. Vamos checar cada um deles e investigar como relacionamento e palavra se comportam nas redes:
Como, então, utilizá-la da melhor maneira, aproveitando todo o seu potencial?
■■ Recepção - Nas mídias sociais, o comportamento é bem diferente de um chat ou contato telefônico. Como já dito, aqui o que se deseja é a construção de uma relação, não um atendimento pontual. Nenhuma marca deve perder tempo criando perfil ou fanpage para questões específicas, pois já existem outros meios e canais para resolvê-las. A marca, na rede, deve ser como uma bem preparada recepcionista no stand de uma feira: simpática, prestativa e bem informada. Ela está ali para fazer o visitante se interessar pelo que a marca tem a mostrar.
Que fique claro que, nas redes, relacionamento e escrita são dois lados de uma mesma
■■ A boa recepção é o momento da identificação, é ali que o relacionamento surge
A palavra oral ou escrita, ferramenta de tantos outros meios, aqui se faz matéria-prima da construção de uma relação realmente estratégica, e vai além da solução de problemas pontuais ou de uma mera disponibilização de informações.
Sr. Conteúdo < 61
“Enquanto o relacionamento trabalha o emocional e o subjetivo, a palavra trabalha o racional e o lado objetivo do contato. O relacionamento trata e cuida do usuário, a escrita entrega o que é esperado da marca“
– e é com a palavra que ele começa a se concretizar. Trate-o pelo nome, sempre, e esqueça o ‘senhor’. O objetivo é a aproximação. E como você representa a marca, faça-o perceber que ele está falando com uma pessoa, não uma máquina. Mostre que você é alguém preparado para iniciar um relacionamento. Seja simpático, prestativo e bem informado – como a recepcionista do stand. ■■ Dúvida - Faça com que com a pergunta do cliente seja percebida como a questão mais importante do dia, porque, para ele, ela realmente é. Se você tem a resposta, dê na hora. Se for uma pergunta específica e você não tiver a resposta, solicite uma forma reservada de contato. Contudo, se não tiver a resposta, e ela for importante para todos os que seguem ou frequentam o seu perfil/fanpage, diga quando a terá. E sem medo de mostrar que (ainda) não sabe. ■■ Cumpra o prometido: no dia e hora anunciado, esteja lá, e faça com que sua resposta seja vista por todos e especialmente por quem perguntou – as redes nos dão esses recursos para que eles sejam usados. Depois, ‘cerque’ a resposta. Aproveite o meio e converse com o usuário. Pergunte sobre a percepção da marca. Se ele gosta dos produtos. O que poderia ser melhorado. Este é um momento precioso, não o desperdice como se estivesse em canais com menos recursos.
■■ Reclamação - Neste caso, a reclamação do cliente não deve ser percebida como a questão mais importante do dia, mas a do ano. Ligue o alerta vermelho. Um usuário insatisfeito em uma rede social é capaz de iniciar um incêndio de proporções devastadoras, arranhando a imagem de uma marca para sempre. Detenha-o. Converse com ele. Nos bastidores, mobilize quem for preciso, mas na rede continue no controle da situação. Jamais interrompa o contato e, em especial, tente perceber o nível de tolerância e o timing de quem está reclamando, ou seja, qual informação irá fazer com que ele pare, pelo menos momentaneamente, de reclamar – e, portanto, de espalhar sua insatisfação -, e em quanto tempo ele espera que a questão seja resolvida. Lembre-se de que ele está em uma mídia eternamente ‘ligada’ e de que a irritação pede tudo para ontem. E de que todos estão vendo. Controle a situação com muita informação: esta é a melhor arma. ■■ Crise - Neste cenário, tudo saiu do controle e não há nada que satisfaça o cliente. Ele usa a rede social para espalhar a insatisfação. Perceba: é simplesmente impossível apagar um incêndio dessas proporções. Em muitos casos, ele ultrapassará as redes e invadirá blogs, portais, televisão, jornais impressos. E não esconda nada, pois a mentira escorrerá pelos seus dedos, como tudo na Internet. Seja transparente e assuma os erros. Esta é a etapa do aprendizado mais difícil, doída
62 > Sr. Conteúdo
“Nas mídias sociais, assim como nos outros canais, existem seis momentos no contato com o cliente: recepção, dúvida, reclamação, crise, manutenção e fechamento”
e complicada que a realidade das redes trouxe para as marcas no meio digital. Lide com a verdade. Peça ajuda à assessoria de imprensa e espere que o incêndio diminua, apenas. Parte da sua marca estará para sempre queimando, em algum lugar da web, para sempre. É fato. ■■ Manutenção - Você precisa manter contato com o usuário, pois toda relação pressupõe constância. O novo contato pode ser resultado de uma questão tranquila ou de uma crise sem precedentes. Ops! Como assim? Por que você conversaria mais uma vez com alguém que lhe causou problemas? Sejamos sinceros, porque, em muitos dos casos, ele estava certo em reclamar. E, portanto, não pode ser descartado como parte do seu público. ■■ Diferentemente de outros canais, superficiais por natureza, nas mídias sociais não podemos nos dar ao luxo de descartar ou ignorar o que aconteceu. Com exceção de ações de usuários que são explicitamente nocivas e sem fundamento - a menor parte dos casos, a bem da verdade -, é aconselhável chamar o usuário antes insatisfeito para ‘tomar um café’ passada a tormenta. Manter o contato é fato, não opção. ■■ Fechamento - Hoje é quase regra que ações como lançamentos de produtos ou a realização de eventos tenham perfis e fanpages para se aproximar dos públicos, mas poucos se lembram de que, nas mídias sociais, o apoio dos usuários
às marcas acontece espontaneamente, e por isso merece agradecimento. Vamos deixar de lado agências e clientes que mantêm páginas e perfis quando as ações se encerram, dando vida a verdadeiras ‘cidades-fantasma’, mas falemos de quem deseja encerrar com decência e profissionalismo um relacionamento de curto ou médio prazo. Primeiramente, agradeça. Depois, crie posts especiais de despedida. Fale de outros perfis e fanpages que porventura a marca possua nas redes. Dê brindes digitais. Marque uma data especial para a desativação. E, como consequência de tanto trabalho e atenção, receba de lambuja clientes satisfeitos, impressionados e - uau - fiéis. Em tempo: qualquer forma de contato, na vida ou no trabalho, seja presencial ou à distância, pede envolvimento. Tentar trabalhar nessa área sem paixão é como pedir que todo e qualquer esforço vá por água abaixo. E, nesse caso, não há forma de relacionamento ou palavra que console o usuário. </>
Bruno Rodrigues é Consultor de Informação e Comunicação Digital, autor dos livros ‘Webwriting’ (2000, 2006 e nova edição em 2014) e de ‘Padrões Brasil e-Gov: Cartilha de Redação Web (2010), padrão brasileiro de redação online’. Também é instrutor de Webwriting e Arquitetura da Informação no Brasil e no exterior. bruno-rodrigues.blog.br | @brunorodrigues
64 > Opinião
O futuro dos Bitcoins Em 2013, o Bitcoin atingiu o maior valor de mercado em seus cinco anos de existência. Impulsionado por isso, houve um aumento significativo da sua adoção por comerciantes e varejistas. Qual a sua opinião sobre o Bitcoin e outras moedas criptográficas? Que futuro você acredita que essas tecnologias terão nos próximos anos?
André Horta - empreendedor e fundador do site Bitcoin2You, que permite a compra e venda de Bitcoins. Apesar de o Bitcoin ter sido criado em 2009, agente observa que sua adoção ainda está no início sob todos os aspectos. A adoção do Bitcoin pelos varejistas e comerciantes ainda vai aumentar muito, o que pode ser observado pelo movimento que se inicia nos Estados Unidos, em grandes lojas como overstock.com, tigerdirect, entre outras. Transações financeiras utilizando criptomoedas são mais práticas, simples e baratas, já que é possível enviar um Bitcoin do Brasil para a China tão fácil como se envia um e-mail, sem taxas bancárias, impostos ou burocracia. Bitcoin é a moeda global que pode ser utilizada por qualquer pessoa. São essas características que tornam o Bitcoin e outras moedas virtuais uma invenção tão surpreendente quanto o celular e a Internet.
Diego F. Aranha - Professor do Instituto de Computação da Universidade Estadual de Campinas e especialista em Criptografia e Segurança Computacional. Moedas criptográficas representam uma solução promissora para descentralização da infraestrutura financeira internacional e das relações de poder associadas. Além disso, suas realizações concretas atuais agregam uma série de inovações tecnológicas de interesse independente, como a demonstração prática de que é possível manter consenso distribuído, com inúmeras aplicações em potencial. Não sabemos quão realmente disruptiva será essa tecnologia frente a Estados cada vez mais controladores e bisbilhoteiros, mas é certo que não vivemos mais em um mundo onde moedas puramente digitais são impossíveis ou inviáveis de se construir.
Opinião < 65
Marco Gomes - empreendedor, programador e nerd. As criptomoedas resolveram, de maneira muito elegante, um problema clássico. Com a tecnologia do blockchain, é possível confirmar a autenticidade de um documento (moeda, contrato, certidão) sem a centralização em uma entidade verificadora (como uma casa da moeda ou cartório), e a exploração dessa tecnologia está apenas começando, por enquanto focada em transferência de valores (como uma moeda). Com as criptomoedas, já é possível solucionar problemas insolúveis no sistema financeiro tradicional: micropagamentos, transferências internacionais sem taxas, irreversibilidade de transações, e muito mais. Acredito que as criptomoedas serão revolucionárias nas transformações pelas quais a sociedade vai passar nas próximas décadas.
Paulo S. L. M. Barreto - Professor Associado (Engenharia de Computação) da Poli/USP, onde obteve o doutorado em 2003 e a livre-docência em 2011. Bitcoin, bem como outras moedas criptográficas mais aperfeiçoadas com a mesma natureza distribuída e cooperativa (como Zerocoin), devem crescer em popularidade ao longo dos próximos anos, à medida que sua utilização se tornar progressivamente mais amigável e se não for artificialmente bloqueada por iniciativas governamentais. O principal desafio social que essas moedas enfrentarão, quero crer, será estabilizar o comportamento complexo e flutuante do câmbio, ainda típico de processos que não atingiram o equilíbrio. As tecnologias criptográficas mais robustas em desenvolvimento podem favorecer decisivamente essa estabilização, se lograrem inspirar confiança proporcional da parte dos usuários.
Rodrigo Batista - CEO do MercadoBitcoin.com.br. Formado em computação pelo IFSP, em Administração de Empresas pela USP e é pós-graduado em Engenharia Financeira pelo PECE-USP. Por que as moedas virtuais vieram pra ficar? Elas são uma das tecnologias de maior crescimento atualmente. E qual o motivo disso? Acredito que a principal reposta para essa pergunta é estarmos em um mundo em que as pessoas se conhecem, se comunicam, trabalham e até mantêm relacionamentos amorosos umas com as outras, independentemente de em que parte do mundo estejam. Contudo, nesse ambiente global, sempre houve a falta de uma maneira de elas pagarem umas às outras de maneira eficiente, barata e fácil. Assim, se eu tenho aula de inglês com o professor em Dublin por Skype, como pagá-lo? O Bitcoin, ao ser criado em janeiro de 2009, trouxe essa solução simples de transações financeiras, em que não dependemos de intermediários caros para fazer pagamentos presencialmente ou pela Internet. Com a criação das moedas virtuais, não precisamos de empresas de envio de dinheiro, ou de cartão de crédito para pagar o professor de inglês na Irlanda ou quem quer que seja. O pagamento é praticamente instantâneo e vai direto para ele, sem que haja chance de fraude. É essa necessidade simples e básica de mover dinheiro que faz o sucesso do Bitcoin, e que garante que as moedas virtuais chegaram e não vão mais embora.
66 > Servidores
O servidor dedicado morreu? Por Lucas Vanzi, Diretor e Co-fundador da EVEO Cloud.
Comenta-se muito sobre a tecnologia revolucionária chamada cloud computing, a qual utiliza um pool de recursos físicos, distribuídos em servidores virtuais de forma redundante e isolada, denominados no mercado como cloud servers. Sua lista de benefícios é vasta, como a redundância de hardware, a fácil e rápida escalabilidade vertical e horizontal, a redução de custos tanto por sazonalidade como por precisão no dimensionamento e a rapidez no aprovisionamento por uso de templates prontos. E como praticamente ocorre com toda chegada de uma nova tecnologia, é comum o mercado questionar a continuidade das tradicionais. Aconteceu com a televisão ao termos a Internet difundida, aconteceu com o e-mail com a expansão das redes sociais e agora muitas vezes é questionado se o servidor puramente físico, comumente referenciado no mercado como servidor dedicado, ainda tem seu espaço em novos projetos. O fato é que, apesar dos avanços conquistados com a nova tecnologia, assim como os outros exemplos citados, ainda existem características únicas que apenas os tradicionais servidores dedicados podem oferecer, como a alta densidade de recursos, a velocidade de leitura e gravação em dispositivos de armazenamento como discos e SSDs e a resiliência que esse mix oferece. Benefícios que são muito úteis em projetos que envolvem servidores de e-mail, servidores de banco de dados, entre outros que necessitam de uma quantidade maior de recursos. Certamente não se deve desconsiderar o impacto que os cloud servers geraram no mercado, mas este se adaptou, dividindo-se em duas linhas de IaaS (Infraestructure as a Service), seguindo orientações de raciocínio
O servidor dedicado evoluiu bastante e se tornou distinto de servidores virtuais a ponto de atender a seu próprio nicho de negócio de teorias de marketing, como a estratégia do oceano azul, publicada em 2005 por W. Chan Kim e Renée Mauborgne, que diz que em um mercado tão concorrido a melhor estratégia é sempre se especializar em um nicho, de forma que não haja concorrência tão direta a ponto de ela prejudicar os players com redução exagerada de preços.
O que aconteceu, então, com o mercado de servidores dedicados? Grandes fabricantes de servidores enxergaram essa divisão de linhas, e passaram a fabricar servidores com especificações enaltecendo suas características. Temos servidores hoje com mais slots para dispositivos de armazenamento, que podem ser aproveitados para disposições em array (RAID) com latências praticamente nulas na leitura e gravação de dados e com mais espaço para armazenamento. Vemos ainda o aumento na concentração de processadores, com vários cores em cada CPU e pentes de memórias extremamente densos. Tudo isso ocupando o mesmo espaço, consumindo a mesma energia e custando praticamente o mesmo preço de sempre.
O que ganhamos com isso? Ganhamos duas linhas de produtos totalmente distintas e com características únicas que podem ser aproveitadas em cada projeto. Podemos ter aplicações simples, que não teriam recursos financeiros para lançamentos em servidores dedicados, tornando-se viáveis
por usarem cloud servers, bem como campanhas de marketing sazonais lançadas com investimentos condizentes com a realidade e prontas para ser escaladas em caso de um sucesso acima do planejado. Os servidores dedicados de altíssima densidade podem ser utilizados para aglutinar operações em menos servidores com recursos verticais, reduzindo a necessidade de grandes e complexos projetos de balanceamento de carga entre vários e menores cloud servers com recursos horizontais. Podemos, ainda, ter servidores de bancos de dados e e-mails operando de forma mais rápida e dinâmica, dada a capacidade de leitura e gravação característica da linha. Nesse sentido, ainda temos estruturas mistas, nas quais, por exemplo, hospedamos a aplicação em alguns cloud servers e o banco de dados em servidor dedicado, aproveitando assim as principais características de cada arquitetura para melhor atender a cada ponto de um projeto mais elaborado. Então, respondendo à pergunta título, o servidor dedicado não morreu. Longe disso, evoluiu bastante e se tornou distinto de servidores virtuais a ponto de atender a seu próprio nicho de negócio. Ele continuará crescente, principalmente no mercado corporativo, no qual o fator principal na tomada de decisão é a resiliência, e os recursos financeiros necessários para isso são justificáveis. </> Lucas Vanzin é Diretor e Co-fundador da EVEO Cloud. Formado em engenharia elétrica e com MBA em gestão estratégica pela Fundação Getúlio Vargas, é responsável por toda arquitetura tecnológica da empresa, bem como a linha de produtos corporativos e seus nichos de mercado. lucas.vanzin@eveo.com.br | @lucasvanzin
68 > Desenvolvimento
Três maneiras divertidas de desenvolver suas habilidades de programação Por Adam Junqueira, Redator de tecnologia do Grupo Impacta
Se alguma vez você tentou aprender a codificar em um livro, então sabe o quão maçante esse esforço pode se mostrar. Embora esse ainda seja o método abordado em praticamente todas as instituições de ensino do planeta, muitas pessoas não conseguem extrair o melhor de um processo de aprendizado através de livros. Novas opções de metodologia surgem diariamente com o intuito de agradar a diversos tipos de público, principalmente na Internet, onde é possível encontrar cada vez mais cursos práticos, com transmissão e interação ao vivo. No entanto, muitos desses cursos ainda conseguem ser entediantes e cansativos, principalmente para iniciantes ou para quem quer aprender uma função específica da linguagem. Pensando nisso, diversos desenvolvedores têm criado jogos voltados para o ensino de técnicas e para estimular as habilidades de desenvolvimento, uma forma mais divertida e informal de treinamento, que favorece o aprendizado através da prática, frequência de uso, ambientação e familiaridade com ferramentas. Destacamos aqui três opções distintas dentre as tantas disponíveis para apresentar como essa maneira peculiar de apresentar conceitos
de programação pode ser efetiva, graças ao seu tom recreativo e capacidade de manter o usuário sempre voltando para aprender mais.
Code Combat Para quem deseja aprender JavaScript e não tem muita – ou mesmo nenhuma – experiência com a linguagem, o Code Combat é o jogo ideal, por introduzir seus conceitos de forma gradativa, desde os mais simples, como comportamento pré-programado e condicional, até mais avançados, como cálculos.
Desenvolvimento < 69
O jogo é muito bem ambientado em um cenário de fantasia medieval, tornando a sensação de aventura presente em todos os processos de aprendizado. O usuário assume o papel de cavaleiros, magos e outros guerreiros em cenários nos quais deve usar habilidades de codificação para executar diferentes ações a fim de derrotar as hordas de adversários malignos, subir de nível e passar pelas diferentes fases. Um ponto muito interessante desse jogo gratuito é que, como foi lançado em 2013, ele ainda está em desenvolvimento, e o time por trás de sua criação o tornou completamente open source, permitindo que os usuários criem suas próprias fases.
A cereja do bolo é um reconhecimento aos esforços dos jogadores mais habilidosos: quem conseguir vencer o personagem Gridmancer, ganha a ajuda do pessoal do Code Combat para conseguir um emprego em San Francisco, Califórnia, como programador.
www.codecombat.com Open source | Gratuito | Português
Codewars Voltado para usuários de Ruby, JavaScript e Coffeescript, ao Code Wars falta o apelo visual do jogo anterior, mas sobra charme graças à temática voltada às artes marciais e samurais. Mais indicado para desenvolvedores com boa noção das linguagens, o jogo trabalha as habilidades do usuário através de desafios e kata, que uma vez completados garantem ao jogador pontos de honra para que suba para o próximo nível e libere desafios de programação mais complicados.
O ambiente promove a interação entre os jogadores, premiando aqueles que escrevem seus próprios kata, deixam comentários nos kata de outras pessoas e indicam o jogo para amigos com pontos de honra. O Code Wars também possui uma comunidade grande e ativa, o que ajuda bastante na acolhida de novatos, no networking e na colaboração coletiva. Os desafios apresentados são ao mesmo tempo divertidos e úteis, porém o jogo peca por não ser tão intuitivo como o Code Combat, e por ter poucas instruções, forçando o jogador a fazer muitas pesquisas para solucionar problemas. Apesar de ser um processo mais lento, é uma grande experiência para sentir como o trabalho de programação realmente funciona. Lado a lado com o ambiente colaborativo, a grande vantagem do Code Wars é permitir que você teste seus próprios códigos. A variedade de linguagens também conta muito a favor
70 > Desenvolvimento
dele, principalmente se levarmos em conta que já existem planos para a inclusão de outras, como Python, Java, PHP e Objective-C. www.codewars.com Open source | Gratuito | Sem tradução
Code School
Embora tenha menos características que o configurem como um jogo de fato – cada lição consiste em uma apresentação de vídeo seguida por desafios –, o sistema de pontuação, no qual cada questão tem um valor, que é reduzido caso sejam solicitadas dicas, funcionava com recompensas em forma de vouchers de desconto para uso no site. Graças à crescente popularidade do jogo, esse sistema foi derrubado e no momento as pontuações não servem para nada, exceto medalhas no seu perfil, mas a equipe por trás dele já está trabalhando em soluções.
Ao contrário dos outros dois jogos, que podem atrair tanto entusiastas de longa data quanto curiosos, o Code School é indicado somente para quem realmente deseja se dedicar a fundo à codificação. O motivo é claro: o jogo é pago (U$29/mês). O engajamento e a funcionalidade do site, além do vasto portfólio de cursos, tornam o investimento válido, no entanto. Com uma conta, o usuário pode fazer quantos cursos e desafios desejar e trocar de um para o outro à vontade, tendo como opção trabalhar com desenvolvimento em Ruby, HTML/CSS e iOS, além de ferramentas como Chrome DevTools, Google Drive API e Git.
Uma grande vantagem do Code School é o Hall Pass, um voucher que garante dois dias
Desenvolvimento < 71
gratuitos para que os usuários testem o site e os desafios antes de se inscrever. www.codeschool.com Código fechado | Pago | Sem tradução
Codecademy Seguindo a mesma premissa do Code School, o Codecademy é um site voltado para treinamentos completos de habilidades de codificação em uma grande variedade de linguagens como HTML/CSS, jQuery, JavaScript, PHP, Python e Ruby. Os seus maiores diferenciais são o vasto portfólio e o fato de ser gratuito. Mais do que um lugar para praticar e afiar seus conhecimentos através de desafios, o site é uma grande comunidade colaborativa em que programadores e desenvolvedores do mundo todo se reúnem para trocar experiências, solucionar problemas, encontrar parceiros para projetos e até mesmo oportunidades de trabalho. Sendo open source, os usuários podem criar seus próprios cursos e desafios e lançá-los para a comunidade. Desde o seu primeiro passo no site, o usuário se sente em casa. Isso se dá graças à ambientação, ao design e à interatividade, que juntos dão uma pegada familiar à experiência. A tela de apresentação – antes mesmo da tela de inscrição – já trabalha, de forma extremamente simpática, com codificação simples para aquecer os navegantes, dando uma prévia do que encontrarão no Codecademy.
Também similar ao Code School é o sistema de reconhecimento aos feitos dos usuários: o site tem um sistema de medalhas que são
oferecidas a quem completa as tarefas e vence os desafios impostos, o que funciona como um incentivo para que usuários mais avançados passem por todas as etapas dos treinamentos, recapitulando e testando suas habilidades. www.codecademy.com Open source | Gratuito | Sem tradução Mesmo as habilidades mais específicas, que aparentam ser mais difíceis, podem ser desenvolvidas com facilidade em um ambiente com o incentivo correto. Os jogos são uma maneira dinâmica e prazerosa de estimular e absorver novos conhecimentos, principalmente por sua capacidade de tornar possível a mensuração de resultados e o senso de conquista.
Bonus Stage: Ano do Código Para quem deseja se embrenhar participativamente no universo da programação e desenvolvimento, vale a pena dar uma conferida no projeto Ano do Código, uma iniciativa que visa a aproximar a programação das pessoas, mostrando através de um processo colaborativo contínuo que todos podem programar e aprender a pensar e planejar com lógica de programação. www.anodocodigo.org.br </>
Adam Junqueira é redator publicitário na equipe de marketing do Grupo Impacta e também escreve diariamente sobre tecnologia para o blogimpacta.com.br. No twitter, é @adamjunqueira. Colaboraram: Davi Romero (Revisão), André Ribeiro, Lucas Ohara, Wilson Divino (Detalhes Técnicos), Fernando Garcia, Miro Brito (Direção).
72 > iMasters Box
iMasters Box Seleção: João Antônio Mangueira
Envie suas sugestões de ferramentas para redacao@imasters.com.br
IntelliJ IDEA
Android Studio
IntelliJ IDEA é um Java IDE por JetBrains, para computadores que possuem sistema operacional Linux. Oferece suporte para todos os desenvolvedores que querem trabalhar com frameworks, serviços corporativos e dispositivos móveis. Para programação web o IntelliJ IDEA possui várias ferramentas que irão ajudar, usando ferramentas como Spring MVC , Webflow , Reproduzir , Grails , Web Services , JSF , Struts e Flex, além de incluir assistência a códigos de programação HTML5, CSS3, SASS, LESS, JavaScript, CoffeeScript, Node. js e ActionScript.
Android Studio é um ambiente de desenvolvimento integrado (IDE) do Google para quem quer montar aplicações para o Android. Ele está disponível para download para Windows, Mac OS X e Linux. Assim como o Eclipse (com o plugin ADT), oferece uma ferramenta completa para o desenvolvimento e a depuração de aplicações para o SO da Google para dispositivos móveis.
Acesse http://ow.ly/vsTDY
Acesse http://ow.ly/vsTHj
iMasters Box < 73
Lembra aquela vez que você precisou de uma boa ferramenta para ajudar no seu trabalho e não conseguiu nenhuma indicação? Da próxima vez, procure no iMasters Box, um agregador de serviços voltado para desenvolvedores web que reúne ferramentas específicas para esse profissional. Aqui na Revista iMasters trazemos sempre alguns dos destaques do Box. E você pode participar! Indique a sua ferramenta favorita em http://bit.ly/indiqueumaferramenta e torne-se um colaborador do Portal iMasters!
Code::Blocks
Sidr
Code::Blocks é um IDE de código aberto e multiplataforma para as linguagens de programação C, C++ e Fortran. Trata-se de um projeto independente e criado com a colaboração de diversos desenvolvedores ao redor do mundo. Sua arquitetura é orientada a plugin, de forma que suas funcionalidades são definidas pelos plugins fornecidos a ele. Ele é voltado para o desenvolvimento em C/C++, D e agora Fortran. O Code::Blocks está sendo desenvolvido para Windows e Linux, apesar de alguns usuários compilarem com sucesso para FreeBSD e Mac OS X (com alguns problemas na interface). A intenção do projeto Code::Blocks é ser uma solução gratuita e de excelente qualidade, tanto para programadores experientes quando para quem está dando os primeiros passos.
Sidr é um plugin jQuery para a criação de menus secundários. É provavelmente a melhor ferramenta para adicionar facilmente menus laterais para seus projetos web, sem ter que escrever uma única linha de código. Sidr funciona para menus laterais carregados de dispositivos de toque e tem opções para casos de uso esquerda e direita. Não é apenas um menu lateral com links, você pode adicionar conteúdo e outras coisas se você quiser.
Acesse http://ow.ly/vsTOI
Acesse http://ow.ly/vsU29