// NOVEMBRO 2017
R$24,00
1 // POR DENTRO DO W3C
// ANO 06
// EDIÇÃO 24 > ACI - DESEMVOLVIMENTO DE PRÓTESES
Conheça a história do dev que criou uma prótese de braço na própria casa
20
Mobilidade é tudo
Mundo mobile em ebulição React Native e PWA
26
Bioinformática
56
Linguagens
Como fazer para aprender novas linguagens?
iMasters #24 Novembro 2017
Foto: shutterstock - Por ShooLandia
Debugando o código da vida
Hospedagem WordPress
Seu site sem complicação e otimizado
br.bluehost.com/wordpress
// 3
EDITORIAL
C
CHEGAMOS A ÚLTIMA REVISTA DO ANO, e gostaria de dizer que este foi um ano extremamente prazeroso para nós. Poder fomentar os desenvolvedores com o conteúdo de primeira qualidade e receber os feedbacks é algo realmente gratificante. Esse foi um ano tão inspirador para os profissionais do iMasters e para os nossos leitores, que nesta edição nós trazemos uma matéria de capa que tira qualquer desenvolvedor de dentro da sua IDE, ou caixinha, se você preferir. Guilherme Souza traz um artigo sobre o seu projeto de desenvolver o protótipo de uma mão toda desenvolvida em javascript! Chega de desenvolver o próximo framework (só enquanto eu escrevo esse editorial, já foram lançados mais cinco). Pensando em inspiração, vamos para o lado artístico dessa vez. Pintando as telas da renascença, na era do humanismo, temos Fabio Akita falando sobre como aprender novas linguagens de programação, e Kemel Zaidan desenhando sobre aplicações em Go. Vindo desta mesma época, temos Gianluca Major, tecendo sobre bioinformática: debugando o código da vida. Temos também nosso maneirista Ricardo Ogliari encenando sobre o futuro mundo mobile em ebulição - ReactNative e PWA. Assim, alcançamos o iluminismo com Claudio Santos pregando o primado da razão com seu artigo “Criando um bot para games com deep learning”. Como romântico neoclássico, temos este que vos escreve, Alex Lattaro, esculpindo suas sínteses ecléticas com o artigo aplicações práticas de inteligência artificial em games. Mas temos muito mais, com o intuito de inspirar artisticamente nosso querido público desenvolvedor, temos muitas outras cores, telas, sons e esculturas em nosso repertório artístico como, boas práticas de dados na web, comunidades, top 10 OWASP, impressão 3D, feature toggle, design web responsivo e nosso tão famoso 7Masters e por aí. E assim, terminamos nossa apresentação artística. Parla!
Abraços, Alex Lattaro Líder de Conteúdo do Grupo iMasters www.imasters.com.br | redacao@imasters.com.br
iMasters #24 Novembro 2017
4 // EXPEDIENTE
// MAIO 2017
// ANO 06
// EDIÇÃO 22 > W E A R A BL E S
Tiago Baeta Publisher
CORPO EDITORIAL
Mariana Anselmo (MTB 0083858/SP) Jornalista Responsável Alex Lattaro e Mariana Anselmo Editores Nathália Torezani Revisão
Alex Lattaro Editor
Mariana Anselmo Editor
Nathália Torezani Revisão
Caroline Burle, Claudio Santos, Cristiano Mendes, Daniel Wellington, Danilo Tuler, Fabio Akita, Gianluca Major, Guilherme Souza, Kemel Zaidan, Maikol Porras, Rafael Matsuyama, Ricardo Ogliari e Rodrigo “PokemaoBr” Colaboradores Zupi Projeto Gráfico e Diagramação Eskenazi Indústria Gráfica Gráfica
Rua: Oscar Freire, 2379 Cep: 05409-012 Cerqueira Cesar +55 11 3063-5941 www.imasters.com.br/revista redacao@imasters.com.br @iMasters /PortaliMasters Os artigos assinados são de responsabilidade dos autores e não refletem necessariamente a
Grupo iMasters Organização
opinião da revista. É proibida a reprodução total ou parcial de textos, fotos e ilustrações por qualquer meio,
1.800 exemplares ISSN 1981-0288
www.zupidesign.com +55 11 3926 0174
iMasters #24 Novembro 2017
sem prévia autorização dos autores ou dos editores da publicação.
// 5
iMasters #24 Novembro 2017
6 //
SUMÁRIO COLUNAS 20
RicardoOgliari
MOBILIDADE É TUDO Mundo mobile em ebulição - React Native e PWA
50
Caroline Burle Maikol Porras
10
Luiz Fernando Duarte Junior
16
Danilo Tuler DEEP LEARNING
Criando um bot para games com deep learning
SEGURANÇA
O que há de novo no Top 10 OWASP 2017 - e como mitigar riscos
W3C Implementação das boas Práticas de dados na web: o caso da Costa Rica
26
Gianluca Major BIOINFORMÁTICA
Bioinformática: debugando o código da vida
64
Alex Lattaro
INTELIGÊNCIA NADA ARTIFICIAL Aplicações práticas de inteligência artificial em games
62
Kemel Zaidan
CÓDIGO ABERTO Aplicações em Go
iMasters #24 Novembro 2017
ENTREVISTA com Suelen Carvalho e David Robert
8 Kotlin agora é Android
// 7
SEÇÕES
68
COMUNIDADES DevMT
70
7MASTERS Encontro iMasters de especialistas
74
POR AÍ Fazendo a internet do Brasil pelo mundo
46
Daniel Wellington DESENVOLVIMENTO
56
Feature Toggle para além do controle de regras de permissão
Fabio Akita LINGUAGEM
Como fazer para aprender novas linguagens?
36
Guilherme Souza
CAPA Criatividade e inovação podem ajudar a mudar o mundo – como criei uma prótese de braço na minha casa
Cristiano Mendes
42 32
Rafael Matsuyama
Bernard De Luna MAKER DESING WEB
Design web responsivo não é uma tendência, mas uma realidade
Impressão de uma bancada de processos industriais - um novo paradigma de construção de protótipos
iMasters #24 Novembro 2017
8 // ENTREVISTA
Kotlin agora é Android Por Reinaldo Silotto, para Revista iMasters
O
O KOTLIN é uma linguagem JVM com interoperabilidade 100% de acordo com Java, o que torna o aprendizado da linguagem mais fácil. Uma das maiores novidades do ano no mundo do desenvolvimento foi a adoção da linguagem Kotlin por parte do Android. Para falar um pouco sobre isso, convidamos Suelen Carvalho, engenheira de software, e David Robert, CTO do Elo7, para falarem um pouco sobre o que acham dessa adoção, o que essa decisão muda para o desenvolvedor e para o mercado. Revista iMasters: Porque, na opinião de vocês, o Android adotou o Kotlin? Suelen Carvalho e David Robert: Java é uma linguagem de mais de 20 anos e que evolui muito devagar devido a JCP e há prós e contras sobre isso. Além disso, a compra do Java pela Oracle levou o Google a alguns desgastes. O Kotlin começou a ser adotado agora, mas é uma linguagem já razoavelmente madura e que está há vários anos sendo trabalhada. Por ser nova, conseguiu acomodar características bem interessantes vistas em um conjunto de outras linguagens, inclusive Java, conceitos que diversos desenvolvedores têm estudado e usado. Acredito que este conjunto de características e os problemas que o desenvolvimento Android tem enfrentado com Java são fatores que levaram a esta adoção do Kotlin pelo Android. Revista iMasters: Qual o papel da Jetbrains, a criadora do Kotlin na adoção da linguagem? Suelen Carvalho e David Robert: Acreditamos que a Jetbrains tem a visão do que o Kotlin pode se tornar. Acreditamos que o papel deles é principalmente perseguir esta visão de várias formas. iMasters #24 Novembro 2017
Revista iMasters: Quais as principais diferenças entre Java e Kotlin? Suelen Carvalho e David Robert: Kotlin tem quatro características marcantes: uma linguagem concisa, segura, com grande capacidade de interoperabilidade e, por último um conjunto de ferramentas amigáveis bem maduras. Revista iMasters: Sabemos que o Kotlin é muito menos verboso que o Java, mas e quanto a performance? Suelen Carvalho e David Robert: Como Kotlin utiliza gera byte-code da JVM, a performance de execução é a mesma de uma aplicação Java. O único ponto é que a compilação pode, em alguns casos, ser mais lenta do que o equivalente em Java. Revista iMasters: Como está acontecendo a portabilidade de Java para Kotlin? Existem hoje projetos escritos nas duas linguagens? Suelen Carvalho e David Robert: Ainda não conheço nenhum projeto Android que esteja em produção ou já com Kotlin. Mas como vimos no Android Dev Conference, diversas empresas já têm usado, sim! Eu acredito que a interoperabilidade com Java praticamente eli-
// 9
mina os problemas de migração, pois não é necessário criar um novo projeto e descartar completamente o antigo. Qualquer um pode mudar para Kotlin hoje mesmo! Revista iMasters: O que o Dev fazer agora? Largar o Java e focar no Kotlin? Ou continuar trabalhando e aprendendo as duas linguagens? Suelen Carvalho e David Robert: Essa decisão é complexa, pois vale considerar objetivos de carreira dentre outros fatores. Mas pensando no desenvolvimento Android, acredito que vale focar os estudos principalmente no Kotlin, pois depois do Google IO deste ano, temos confiança de que a plataforma Android segue nesta direção, mas na prática, muitas empresas ainda terão seus projetos em Java e o fato é que, pelo menos, precisaremos fazer manutenção ou evoluir estes projetos. Por isso, algum conhecimento de Java ainda é necessário. Vale lembrar que conhecimento apenas das linguagens não basta. Orientação a objetos, boas práticas de software, dentre outros, são essenciais para se criar código de qualidade independente da tecnologia.
Revista iMasters: O Java corre o risco de ser deixado de lado e acabar sendo apenas legado? Suelen Carvalho e David Robert: O Java já existe há muito tempo e uma infinidade de bibliotecas e frameworks existem nessa linguagem. Não acredito que o Java deixará de ser mainstream nos próximos anos. Revista iMasters: Podemos afirmar que os devs Android estão passando pelo mesmo processo que o pessoal do iOS, quando o Swift chegou e deixou o Objective-C de lado? Suelen Carvalho e David Robert: Existem particularidades neste caso, pois o Google oficializou o suporte às duas linguagens. Ou seja, Kotlin não foi apresentado como uma substituição, mas sim como uma alternativa. Revista iMasters: Para um desenvolvedor que queira iniciar a carreira em Android hoje, quais seriam suas dicas? Suelen Carvalho e David Robert: Estudar a plataforma, ciclo de vida das aplicações, Java e Kotlin, além de sempre buscar conhecimento sobre boas práticas de software. iMasters #24 Novembro 2017
10 // DEEP LEARNIG
CRIANDO UM BOT PARA GAMES COM DEEP LEARNING A INTELIGÊNCIA ARTIFICIAL nunca foi tão comentada quanto nos últimos anos. É possível ver nas mais diversas áreas os avanços proporcionados por esses bots inteligentes. Alguns exemplos são programas treinados para detecção de doenças como câncer, com índices de acertos maiores do que os de especialistas da área. Outro bom exemplo é o Watson, da IBM, com alguns feitos marcantes, como vencer os dois melhores participantes no programa Jeopardy, um programa de perguntas e respostas sobre conhecimentos gerais. Todos esses avanços vêm da necessidade da automação de uma área que até pouco tempo atrás era pouco possível de se imaginar ou que seria possível apenas em um futuro muito distante: a inteligência humana. Isso foi possível devido principalmente a dois fatores: o primeiro é a criação de algoritmos computacionais tão bons que se aproximam muito (ou até mesmo superam, em alguns casos) da mente humana. Essa classe de algoritmos é conhecida como Machine Learning, programas que aprendem tarefas de acordo com acertos e erros no período de treinamento, sem serem explicitamente programados para isso. O outro fator que possibilitou essa automatização é o ganho de processamento, possibilitado principalmente pelo uso de GPUs no período de treinamento desses códigos, diminuindo drasticamente o tempo necessário para esses programas aprenderem a abstrair as informações desejadas. iMasters #24 Novembro 2017
Modelos de aprendizagem, até pouco tempo atrás, poderiam ser divididos em basicamente dois modelos: de aprendizagem supervisionada e de aprendizagem não-supervisionada. Os modelos de aprendizagem supervisionada são mais populares em tarefas como classificação e de regressão (dar um “valor” a uma certa entrada) por conterem um rótulo dizendo o que cada entrada significa. Os modelos não-supervisionados são utilizados para encontrar padrões entre os dados e para sistemas de recomendação. Em 2014, uma startup chamada DeepMind apresentou um modelo capaz de aprender a jogar diversos jogos de Atari. Isso chamou a atenção do Google, que comprou essa startup por US$500 milhões! Mas o que poderia chamar tanto a atenção da gigante de computação, já conhecida na época por seus modelos de inteligência artificial, a ponto de gastar tanto dinheiro com uma startup? O modelo criado pela DeepMind tem uma habilidade de generalização que pode ser considerada um dos primeiros passos para a criação de uma inteligência artificial generalizada, capaz de resolver os mais diversos problemas, assim como nós, humanos, fazemos. O artigo produzido pelos responsáveis da startup (“Human-level control through deep reinforcement learning”) foi destaque na revista Nature, uma das mais importantes na área de pesquisa científica, sendo capa da edição de fevereiro de 2015. O modelo de inteligência
Imagens: Divulgação.
Por Claudio Santos , Fundador da The Data
// 11
iMasters #24 Novembro 2017
12 // DEEPLEARNIG
artificial apresentado no artigo podia superar as habilidades de humanos em 50 jogos diferentes de Atari. Esse bot foi chamado de Deep Q-Learner. Aprendizagem por reforço Sistemas de aprendizagem supervisionada dependem de um conjunto de dados rotulados para compreenderem as características desse tipo de dado e fazer a classificação ou a valorização de um dado de entrada. Sistemas de aprendizagem não-supervisionada tentam aprender os rótulos de acordo com uma quantidade predefinida de classes ou aprendem a detectar anomalias em dados. Agora imagine que gostaríamos de implementar um bot que jogasse sozinho um certo jogo. Podemos modelar esse problema da seguinte forma: é possível capturar frames do jogo e determinar qual a melhor direção ou ação que a personagem do jogo deve executar, sendo assim um problema de aprendizagem supervisionada: os dados de entrada são as imagens do jogo, e os rótulos são as ações a serem tomadas de acordo com a cena. O grande problema aqui é criar esse banco de dados contendo muitas horas de jogo e rotular todas essas horas, e isso apenas para um único jogo. Se quiséssemos treinar para outros jogos, seria necessário criar um banco de treinamento diferente para cada jogo, tarefa que pode demorar muito tempo. Além disso, não se parece com a forma como aprendemos a jogar videogame. Humanos aprendem a jogar melhor quando interagem com os jogos do que quando assistem a alguém jogando. Além disso, os ambientes dos jogos são imprevisíveis, pois nunca se sabe quando um inimigo irá aparecer ou quando o oponente vai desferir um golpe. Nesse caso, em vez de modelar esse problema como um “reconhecedor de padrões”, seria melhor moldá-lo como “tentativa e erro”. Durante o jogo, existem alguns “rótulos” disponíveis, mas não imediatamente com a ação, e sim com algum atraso. Nesse caso, vamos chamar esses “rótulos” de “recompensas”. O próximo passo agora é formalizar isso matematicamente. Começamos com um ambiente em que um agente pode executar um número de ações. Como ambientes são imprevisíveis, é necessário iMasters #24 Novembro 2017
rastrear o estado do personagem de acordo com o ambiente e com a ação executada. Esse estado é alterado de acordo com as recompensas ou com o desconto nos pontos do personagem. Com essas informações, é possível definir uma sequência (em uma fase do jogo, por exemplo) que otimiza os pontos desse jogador. Para cada estado do jogo, é executada uma ação. Essa ação pode gerar uma recompensa ou um desconto nos pontos do jogador. Podemos mensurar essa ação como “qualidade” de acordo com os pontos. O “Q” de Deep Q-Learner vem de “qualidade”. A criação do bot será dividida em três partes: observação inicial, experimentos em cima das observações e jogar. A observação inicial serve para que o agente entenda como os movimentos do personagem influenciam a pontuação. Em alguns casos, pode haver algum movimento que gera uma pontuação maior ou menor. A segunda parte traz uma iteração do personagem sobre as cenas do jogo. Certos movimentos juntos com inimigos podem também influenciar a pontuação: acertar um pulo em cima de um inimigo aumenta a sua pontuação, enquanto que encontrar de frente com outro mata a personagem. Com todo o treinamento feito, basta agora deixar o bot jogar sozinho e ver os resultados. Para entender melhor como transformar tudo isso em código, está disponível no GitHub um código-fonte usando Python com o framework Keras em cima do OpenAI Gym, um toolkit criado justamente para comparar algoritmos de aprendizagem por reforço: https://github.com/cfsantos/ atariAgent.
Claudio Santos é, atualmente, pesquisador pela UNESP trabalhando com Deep Learning e outras técnicas para reconhecimento de padrões, classificação de imagens e diversos outros tipos de dados. É fundador da The Data, empresa com foco em uso de técnicas de Machine Learning, Deep Learning e Inteligência Artificial para resolver os mais diversos problemas.
claudio@thedata.com.br
iMasters #24 Novembro 2017
14 // POR DENTRO DO W3C
SEJA UM
CONHEÇA NOSSO PROGRAMA NO SITE PARCEIROS.EMBRATELCLOUD.COM.BR
JÜSSI
PARCEIRO EMBRATEL
Quem contrata os serviços da Embratel Cloud agora pode se tornar um dos nossos parceiros de negócios*. Cadastre a sua empresa, descubra todos os benefícios e venha crescer conosco.
MARKETPLACE DE SOLUÇÕES
TREINAMENTO E CERTIFICAÇÃO
APOIO TÉCNICO E COMERCIAL
Plataforma web com uma página exclusiva para divulgação da sua empresa
Série de treinamentos e certificações relacionadas ao serviço Embratel Cloud
Conte com uma equipe de especialistas em negócios e tenha prioridade nos chamados técnicos.
iMasters #24 Novembro 2017 CLOUD COM PLANOS A PARTIR DE R$100,00/MÊS. ENTRE EM PARCEIROS.EMBRATELCLOUD.COM.BR *DISPONÍVEL PARA CLIENTES EMBRATEL E TENHA MAIS INFORMAÇÕES.
DROPS DO MERCADO
// 15
CONHEÇA AS NOVAS SOLUÇÕES DE WAF DA SITE BLINDADO A Site Blindado, principal empresa de segurança para lojas virtuais e sites da América Latina, lança novas soluções da Web Application Firewall (WAF). O WAF é responsável por identificar e bloquear o tráfego proveniente de fontes maliciosas e fraudulentas, liberando acesso apenas ao tráfego tido como normal. Com o objetivo de tornar a internet mais segura para empresas e pessoas, a Site Blindado passa a oferecer o serviço em três versões: WAF Starter para sites com 500 GB de tráfego, como blogs, e-commerces e empresas de pequeno porte; WAF Pro para sites com tráfego de até 1 Tera, recomendado para e-commerces, empresas de médio porte e sistemas administrativos; e WAF Enterprise, recomendado para e-commerces e empresas de grande porte com diversas aplicações e serviços.
HOSPEDAGEM RECOMENDADA PELA WORDPRESS.ORG A Bluehost, parceira e entusiasta do WordPress.Org, está lançando no Brasil a Hospedagem Otimizada Wordpress. Essa hospedagem em nuvem já é previamente configurada para maximizar o desempenho do Wordpress, além de facilitar ainda mais sua instalação e gerenciamento. Também é possível criar inúmeras contas de email na mesma hospedagem. O pacote também inclui a proteção do Sitelock contra potenciais invasores e malwares e o backup-as-a-service CodeGuard, que cria backups regulares e atualizados na nuvem, permitindo que se restaure o site para qualquer versão anterior a qualquer momento. A Bluehost dá mais um passo para incentivar o desenvolvimento do WordPress no Brasil e se consolidar como uma das maiores especialistas nesse importante CMS.
NOVAS INTEGRAÇÕES MUNDIPAGG A MundiPagg acaba de integrar com 4 novos módulos de plataformas. Magento 2.0, OpenCart 3.0, WooCommerce (Wordpress) e Shopify são os novos parceiros que entram no quadro da Mundi a partir desse mês. A empresa de tecnologia em pagamentos busca sempre oferecer diversas opções para que você possa ter o poder de escolha de acordo com a necessidade do seu e-commerce. “Nosso foco é o cliente. Estamos cada vez mais pensando em estratégias para atender as necessidades do mercado e oferecer as melhores soluções de pagamento para cada loja”, afirma João Barcellos, CEO da MundiPagg.
CONHEÇA O CLICK TO CALL Trata-se de um botão disponível em um website, que convida o cliente à informar seu telefone e aguardar uma ligação da empresa. É uma solução presente no mercado desde a popularização do VOIP no país. Porém, dado às limitações de banda, permanece pouco explorado até hoje. Desta forma, o primeiro aspecto à se esclarecer é a desvinculação com o VOIP: A DirectCall é Operadora licenciada SCM e STFC e entrega alto nível de serviço no Click to Call também em rede fixa. O benefício mais óbvio é o estímulo à compras, pois o atendimento pessoal gratuito por telefone, dá credibilidade à loja e resolve dúvidas enquanto o cliente está no site. Em páginas específicas, o Click to Call pode direcionar o atendimento ao departamento certo, o que representa produtividade. Sem tempo perdido com URA ou filas no atendimento, reduz significativamente o abandono de carrinhos e custa bem menos que um 0800. Para mais informações e testes grátis: http://directcall.com.br/ click-to-call
iMasters #24 Novembro 2017
O QUE HÁ DE NOVO NO TOP 10 OWASP 2017 - E COMO MITIGAR RISCOS Por Danilo Tuler, CTO na Site Blindado
iMasters #24 Novembro 2017
O OWASP (Open Web Application Security Project), ou Projeto Aberto de Segurança em Aplicações Web, é uma comunidade online, sem fins lucrativos, focada na troca de artigos, documentações, ferramentas, metodologias e novas tecnologias que ajudam a melhorar a segurança das aplicações web. O Top 10 OWASP já se popularizou como o maior parâmetro sobre as vulnerabilidades mais críticas e importantes do momento. Essa lista é realizada em amplo consenso com especialistas do ramo e, após ser elaborada, é submetida a um período de análise e comentários públicos e, só então, é lançada oficialmente. A nova versão, de 2017, OWASP Top 10-2017 Release Candidate, substitui a anterior, de 2013. O Top 10 de 2017 traz as seguintes vulnerabilidades: A1-Injeção de código; A2-Quebra de Autenticação e Gerenciamento de Sessão; A3-Cross-Site Scripting (XSS); A4-Broken Access Control; A5-Security Misconfiguration; A6-Exposição de Dados Sensíveis; A7-Insufficient Attack Protection; A8-Cross-Site Request Forgery (CSRF); A9-Utilização de Componentes Vulneráveis Conhecidos e A10-Underprotected APIs. Em comparação com a lista de 2013, o OWASP apresenta agora duas novas categorias: “Insufficient Attack Protection”, que aparece na sétima posição, e “Underprotected APIs”, na décima. O OWASP realizou ainda uma combinação entre as categorias “Referência Insegura e Direta a Objetos” (Insecure Direct Object References), que estava na quarta posição em 2013, e “Falta de Função para Controle do Nível de Acesso” (Missing Function Level Access Control), que estava em sétimo em 2013. A junção virou a categoria “Broken Access Control”, que aparece na quarta posição das maiores vulnerabilidades de 2017. Outra mudança foi a retirada da categoria “Redirecionamentos e Encaminhamentos Inválidos” (Invalidated Redirects and Forwards). Segundo o OWASP, ela havia sido incluída em 2010 com o objetivo de aumentar a conscientização sobre essa vulnerabilidade, mas sua incidência não se mostrou tão comum quanto o esperado e, após os dois últimos lançamentos do Top 10, a comunidade optou por cortá-la da lista.
Ilustração: shutterstock - bluebay
16 // SEGURANÇA
// 17
iMasters #24 Novembro 2017
O que o OWASP tem a dizer sobre as novas vulnerabilidades? Insufficient Attack Protection é um ataque de prevalência comum, de grau médio de dificuldade de detecção, de fácil exploração e que pode causar impactos técnicos moderados. Um exemplo seria um e-commerce com falta de proteção WAF que sofresse um ataque DDoS e saísse do ar. Outra situação possível seria quando um atacante rodasse um SQL Map no site-alvo e conseguisse acesso à tabela de usuários e senhas do banco. Sobre a vulnerabilidade “Insufficient Attack Protection”, o OWASP explica que a maioria das aplicações e APIs não possuem capacidade alguma para detectar, prevenir e responder a ataques manuais e automatizados. Fora isso, ressalta que a proteção contra ataques vai muito além da validação de entradas e envolve a detecção, o registro, a resposta e até mesmo o bloqueio de tentativas de invasão. Segundo ele, os proprietários de aplicativos também precisam ser capazes de implantar correções rapidamente para se proteger contra ataques. iMasters #24 Novembro 2017
Underprotected APIs (APIs sem dados de proteção) também é um ataque de prevalência comum, mas de difícil detecção, com dificuldade média de exploração e que causa impactos técnicos moderados. Exemplo: loja virtual com falha nos processos de autenticação e sem criptografia. Os dados entre a aplicação e a API ficam desprotegidos, facilitando o acesso a dados sensíveis em caso de ataque. Sobre a categoria “Underprotected APIs”, o OWASP afirma que as aplicações atuais geralmente envolvem APIs e aplicações rich client - como JavaScript no navegador e aplicativos móveis - que se conectam a algum tipo de API (SOAP/XML, REST/ JSON, RPC, GWT etc.). No entanto, essas APIs frequentemente estão desprotegidas e contêm inúmeras vulnerabilidades. Como proteger sua aplicação? No caso do Insufficient Attack Protection (A7), lembre-se de que, ao rodar uma aplicação web, é necessário contar com sistemas que ajudem a detectar uma possível intrusão e evitar danos. Uma medida
Ilustração: shutterstock - bluebay
18 // SEGURANÇA
// 19
fundamental é manter um monitor de rede, pois ele irá acompanhar toda a infraestrutura da máquina e os pacotes transmitidos pelas placas de rede ou de modem, identificando conexões suspeitas. Outro sistema essencial é a proteção web por meio do WAF (Web Appplication Firewall), que poderá identificar ataques comuns e defender a aplicação. Ele garante que todas as requisições que passarem pelo site serão filtradas, e bloqueia os acessos suspeitos e protege, entre outros, contra XSS, SQL Injection e bots rodados na aplicação. Algumas empresas oferecem essa solução como MSS (Managed Security Service), inclusive disponibilizando assistência técnica durante toda a configuração da ferramenta e período contratual. Outro apontamento do OWASP é sobre a necessidade de manter o sistema sempre atualizado. Portanto, para que versões mais recentes sejam rapidamente identificadas e aplicadas, é possível apostar em soluções como a Blindagem de Site. A correção do Underprotected APIs (A10) tem relação com outras categorias da lista do OWASP, como
falha de controle de acesso e broken authentication, sendo necessário analisar problemas na comunicação entre a aplicação e a API, além da autenticação dos usuários. Uma forma de fazer essa análise é por meio da realização de um teste de invasão (Pentest) para identificar e corrigir essas falhas. Eventualmente, o WAF também poderá contribuir na prevenção de ataques específicos à API, como SQL Injection e XSS, mas ele não dispensa a necessidade do Pentest. Essas medidas podem ajudar a identificar as novas vulnerabilidades apontadas pelo OWASP e evitar maiores danos às aplicações e à reputação de empresas.
Danilo Tuler é CTO da Site Blindado, empresa líder em segurança online na América Latina. Mestre em Engenharia de Computação pela PUC-Rio, possui mais de 20 anos de experiência em TI e desenvolvimento de software. A Site Blindado faz parte da B2W Services, grupo de empresas “best in class” em soluções de tecnologia e logística.
danilo.tuler@b2wdigital.com
iMasters #24 Novembro 2017
20 // MOBILIDADE É TUDO
Mundo mobile em ebulição - React Native e PWA Por Ricardo Ogliari, Engenheiro Android no BTCjam
É
É INEGÁVEL que o desenvolvimento para dispositivos móveis é uma das principais vertentes do mundo do software. A importância desses equipamentos não precisa mais ser comprovada, seus números falam por si. Consequentemente, a programação evoluiu levando em conta os novos anseios de usuários e clientes. Até bem pouco tempo, o desenvolvimento mobile podia ser explicado dividindo-o em três abordagens principais: Desenvolvimento Nativo: a aplicação é criada especificamente para uma plataforma, usando seu SDK (Standart Development Kit), sua loja virtual e as especificidades da linguagem adotada. Por exemplo: desenvolver em Java/ Kotlin para Android ou desenvolver em Swift/ Objective-C para iOS. WebApp: conceitualmente não poderia ser chamado de aplicativo. É uma customização de uma página web para o ambiente móvel. Uma das abordagens usadas é verificar o header user-agent para saber a origem da requisição, entregando uma resposta especializada. Aplicativos Híbridos: desenvolvimento com as principais linguagens/tecnologias do mundo web (JavaScript, CSS e HTML). Uma camada adicional, normalmente PhoneGap/Cordova, insere essa “aplicação
iMasters #24 Novembro 2017
web” dentro de um componente visual que encapsula o comportamento de um browser, como o WebView, no Android. Porém, recentemente, surgiram tecnologias que não se encaixam em nenhum dos padrões listados anteriormente. Cito aqui três delas, que vêm ganhando mercado e a atenção de todos os desenvolvedores mobile: Xamarim, Progressive Web App e React Native. Neste pequeno artigo, vou focar nas duas últimas. O PWA é uma página web que pode, progressivamente, assumir um comportamento de aplicativo e residir no desktop do seu aparelho móvel ou do Chrome. Seu principal chamariz é o custo de desenvolvimento, visto que uma página web já construída pode ser aproveitada, e a criação de uma aplicação nativa não é necessária. O PWA não exige o download de nenhum SDK, de nenhuma IDE específica, nem de configuração na máquina cliente ou servidor. Tudo o que a aplicação precisa é de uma configuração que define seu comportamento visual no desktop do usuário. Já o React Native é uma especialização do já conhecido React para uso no mundo mobile. Os adeptos dessa tecnologia destacam dois pontos que o diferem de qualquer solução similar atual. O primeiro é o uso do Virtual DOM, herdado do React
// 21
App
para web, e o segundo é a construção de elemento de interface gráfica nativas do dispositivo - diferentemente de soluções como o Ionic, que usa estilos para aproximar o máximo possível o elemento HTML do componente Nativo. O Virtual DOM, como mostra a Figura 1, é uma cópia fidedigna do DOM original da página. As mudanças são percebidas apenas nos pontos onde elementos foram alterados. A atualização do DOM original ocorre somente nesses pontos, otimizando o tempo de processamento. Essa camada que reside entre a aplicação e o motor de renderização do browser é, para muitos, a grande ideia por trás do React. Ok, mas estamos falando de mobile, não estamos? Sim, e o React Native utiliza exatamente o mesmo conceito. A diferença é que os componentes codificados na aplicação são mapeados para elementos de interface da aplicação, sendo que ela é atualizada sob demanda e fora da sua thread principal. Novamente, o ganho de performance é o grande fator resultante. Para o leitor ter o primeiro contato com o React Native, e para elucidar melhor o conceito acima apresentado, veja na listagem abaixo o trecho de um componente básico codificado no JSX (trecho retirado da documentação oficial do React Native):
delivers events
builds/ modifies
React Virtual DOM delivers events
builds/ modifies
DOM ∏ Virtual DOM (https://goo.gl/F9RbXt)
iMasters #24 Novembro 2017
22 // MOBILIDADE É TUDO
import React, { Component } from ‘react’; import { Text, View } from ‘react-native’; class WhyReactNativeIsSoGreat extends Component { render() { return ( <View> <Text> If you like React on the web, you’ll like React Native. </Text> <Text> You just use native components like ‘View’ and ‘Text’, instead of web components like ‘div’ and ‘span’. </Text> </View> ); } }
Desculpe a falta de educação e a informalidade. Não apresentei ao leitor o JSX, o JavaScript com XML. A classe WhyReactNativeIsSoGreat é um componente que, ao ser requisitado pelo motor de renderização do dispositivo adjacente, pede à função render que especifique o que deve ser mostrado na interface. Essa descrição pode ser feita com XML e com iMasters #24 Novembro 2017
as tags que serão mapeadas para os elementos nativos do dispositivo. Posteriormente, qualquer mudança no estado ou propriedades do componente automaticamente requisitará ao Virtual DOM que atualize o DOM (no caso, a UI do mobile). É importante ressaltar que o React Native fornece algumas tags que são uma associação de-para com componentes específicos de uma plataforma ou outra - como um DatePicker específico para iOS. Claro que o React Native é muito mais que o Virtual DOM, o JSX e os elementos de UI nativos. Porém, no entendimento do autor, esses são os principais pontos de discordância e evolução em relação às opções tradicionais, como o Ionic. Independentemente da escolha do desenvolvedor, o que mais importa é percebermos a importância do mobile no mundo. Perceber o quanto a linguagem JavaScript avança terreno também no mobile e, por fim, perceber que estamos cada vez mais servidos de tecnologias/frameworks/ plataformas que nos permitem criar grandes aplicativos cross-platform.
Ricardo Ogliari é coautor do livro “Android: do básico ao avançado” e de mais de 300 publicações. Especialista em Web, estratégia de inovação e tecnologia, tem MBA em Desenvolvimento de Aplicações e Jogos Móveis. É fundador do Things Hacker Team e foi eleito um dos 10 nomes de open hardware em 2013.
rogliariping@gmail.com
// 23
iMasters #23 Agosto 2017
O MELHOR PARA O SEU SITE E CLIENTES ESTร NA
24 // POR DENTRO DO W3C
Faรงa mais com Wordpress usando as ferramentas gratuitas da GoDaddy que o ajudam a gerenciar sites e clientes.
Inclui descontos, recompensas e suporte especializado.
Clientes Pro Pro Sites Recompensas Pro
iMasters #24 Novembro 2017
Cadastre-se gratuitamente em godaddy.com/pro
DROPS DO MERCADO UMBLER LANÇA NODE.JS E ARQUITETURA EM DOCKER A Umbler, startup de Cloud Hosting para agências e desenvolvedores, lançou em junho a hospedagem para Node.JS. O projeto marca um novo momento para a startup, já que passa a operar em uma arquitetura baseada em Docker. A novidade é parte de um processo que envolveu meses de pesquisa e desenvolvimento e, em muitos casos, a recriação de algumas partes da plataforma. Para quem quiser hospedar projetos em Node.JS na Umbler, poderá escolher a estrutura de contêiner para sites e aplicações. A Umbler planeja lançar outras linguagens na nova arquitetura, iniciando com o PHP, ainda no segundo semestre de 2017.
// 25
API DE GERAÇÃO DE BOLETOS PAGSEGURO: FÁCIL DE INTEGRAR E IDEAL PARA TODOS OS TIPOS DE NEGÓCIO Os desenvolvedores que atuam na integração de soluções de pagamento para lojas online acabam de ganhar mais um instrumento para facilitar o dia a dia. O PagSeguro lançou a API de geração de boletos, uma solução eficaz para o negócio do seu cliente. Os profissionais agora podem utilizar essa nova API para: oferecer boletos registrados, individuais ou no modelo carnê, e além disso é possível personalizar a data de vencimento de acordo com a necessidade de cada negócio. A nova API ainda oferece a possibilidade de disponibilização de códigos de barras por push, e-mail ou SMS, utilizando os canais mais aderentes às redes de contato do cliente. Aproveite para conhecer essa novidade e ganhe tempo.
RADIX LANÇA CONCURSO F3.SPACE A Radix entende a extrema importância de estimular o espírito de inovação nas áreas de desenvolvimento e web design. Desde o seu lançamento em 2012, a Radix tem amplamente apoiado e se engajado com desenvolvedores e designers em todo o mundo. Apresenta, agora, o Concurso F3.SPACE! Baseado em Forma, Função e Estilo - os três pilares eminentes do processo de design web, o F3.SPACE é um concurso mundial de design web e plataforma de exibição. O concurso terá vencedores semanais e mensais, escolhidos com base em voto público, bem como pela avaliação dos juízes. Está aberto a freelancers apaixonados, web designers, bem como pequenas e médias agências. Além disso, qualquer pessoa que tenha um site em qualquer uma das 9 extensões de domínio da Radix também pode submeter seu site para participar. Os projetos vencedores serão exibidos para uma comunidade internacional de designers, desenvolvedores e criativos. Os participantes podem enviar seus projetos até 31 de março de 2018. www.f3.space.
NOVO CURSO DA UDACITY PREPARA O ESTUDANTE PARA CARREIRA EM DATA SCIENCE Python já se tornou a linguagem de programação mais popular dentro do mercado de data science. Fácil e versátil, é utilizada por empresas como Google, Spotify e Netflix para gerar produtos, insights e novos negócios. A Udacity - conhecida como a Universidade do Vale do Silício - recentemente lançou o Nanodegree Fundamentos de Data Science I, curso online que ensina como utilizar Python para realizar análises mais complexas e precisas. Manipulação, processamento e limpeza de dados são alguns dos temas abordados. Este curso tem duração de quatro semanas. Após as quatro semanas de curso, o estudante aplicará os conhecimentos adquiridos em um projeto, e receberá feedback de especialistas sobre o seu aprendizado. Mais informações e matrícula pelo site br.udacity.com
iMasters #24 Novembro 2017
26 // BIOINFORMÁTICA
BIOINFORMÁTICA: DEBUGANDO O CÓDIGO DA VIDA
TODOS OS SERES VIVOS são codificados por um conjunto de bases nitrogenadas: A (adenina), C (citosina), T (timina) e G (guanina). Dependendo da dedicação do leitor(a) à matéria de biologia na escola, será fácil lembrar que essas são as unidades formadoras do DNA, também conhecido como código da vida. A grosso modo, podemos dizer que o DNA é chamado de código da vida pois é uma espécie de repositório de informações, utilizado para implementar as funções biológicas de um organismo vivo. Diga-se de passagem, é um repositório descentralizado, tendo em vista que, para organismos multicelulares, cada célula tem sua própria cópia do DNA. iMasters #24 Novembro 2017
Para conseguir implementar as mais diversas funções biológicas, o DNA precisa passar pelos processos de transcrição e tradução, e esses mecanismos fazem parte do dogma central da biologia molecular. De forma bastante simplificada, podemos resumir os processos de transcrição e tradução da seguinte forma: inicialmente, ocorre o processo de transcrição, no qual o DNA é convertido em RNA. Para os “computeiros” - como são chamados os profissionais de computação quando estão no grupo de biólogos -, o processo de transcrição pode ser entendido como uma espécie de compilação do código-fonte (DNA) em código objeto (RNA). Na sequência, ocorre o processo
Ilustração: shutterstock - vectorfusionart
Por Gianluca Major, Engenheiro de Software
// 27 de tradução, em que cada três bases de RNA (códon) serão utilizadas para codificar um aminoácido. No fim do processo, teremos uma cadeia de aminoácidos que formará uma proteína. Se quisermos dar seguimento à analogia anterior, o processo de tradução poderia ser entendido como a transformação do código objeto (RNA) em executável (proteína). Dentro de um sistema biológico, a grande maioria das funções é executada por proteínas. Entretanto, o código-fonte que produz cada proteína é o DNA e, assim como em um programa de computador, podemos olhar o código-fonte para tentar entender como as funções estão sendo produzidas. Portanto, se quisermos entender como a vida funciona, precisamos inicialmente ler o código, nesse caso, o código de DNA. Em um segundo momento, temos que interpretar a função de cada trecho do código e como essa função afeta o sistema como um todo. Por fim, a
ro de sequências geradas. Além disso, o custo de sequenciamento vem caindo em um ritmo maior que a famosa lei de Moore. Atualmente, estamos gerando mais dados que a nossa capacidade de analisar. Na tentativa de ajudar a resolver esse problema, há um grande esforço na evolução de algoritmos, heurísticas e ferramentas empregadas na análise desses dados.
missão mais complicada, alterar o código e, por consequência, a função.
gramas buscadores de gene (GENSCAN) e programas para inferência filogenética (PHYLIP), além de outros, também utilizam o algoritmo de programação dinâmica ou uma aproximação que seja mais rápida. Portanto, embora existam diversos algoritmos na bioinformática, neste artigo, abordaremos como o algoritmo de programação dinâmica é empregado na busca por similaridade entre sequências de DNA ou proteínas. Aviso aos navegantes: não espere código de implementação nem grande formalismo matemático, já que abordaremos os conceitos da programação dinâmica de uma maneira mais leve. Além disso, a
Sequenciamento: a leitura do código da vida O processo de sequenciamento consiste em ler as bases (A, C, T, G) formadoras do DNA de uma amostra. O primeiro método de sequenciamento foi criado por Frederick Sanger, ainda na década de 70, e era totalmente manual. Embora o método de Sanger tenha sido mecanizado algum tempo depois, sequenciar genomas por esse método era muito demorado e caro. Com o surgimento dos sequenciadores de nova geração (NGS), houve uma explosão no núme-
Interpretando o código Na bioinformática, é comum a utilização de diversos algoritmos e heurísticas na busca de significados biológicos das sequências de DNA e proteínas. Certamente, um dos algoritmos mais utilizados é o de programação dinâmica. Diferentes tipos de programas, tais como buscadores de sequências (BLAST), programas para alinhamento múltiplo de sequências (CLUSTALW), buscadores de perfil (HMMER), pro-
iMasters #24 Novembro 2017
28 // BIOINFORMÁTICA
Alinhamento de sequências com algoritmo de programação dinâmica Quando temos duas sequências de DNA ou proteínas, é comum o desejo de saber se elas são descendentes do mesmo organismo e/ou se têm as mesmas funções biológicas. Para ajudar nessa tarefa, nós vamos calcular um score que reflita o quanto essas sequências são similares. É importante dizer que as sequências podem ser diferentes não apenas por um processo de substituição simples (ex. A por T), mas também podem ocorrer processos de inserção e deleção em ambas as sequências e, dessa forma, uma base qualquer pode simplesmente sumir ou ser adicionada na sequência. Dessa forma, nós queremos otimizar o alinhamento dessas duas sequências para maximizar a similaridade. Então parece simples, porque basta calcular o score de alinhamento para todas as possibilidades de alinhamento e escolher o melhor, certo? Sim, certo. A questão é que calcular todas as possibilidades de alinhamento é impraticável, pois existem por volta de 22N/√2πN diferentes alinhamentos para duas sequências de tamanho N. Para se ter uma ideia, existem por volta de 10179 alinhamentos possíveis entre duas sequências com 300 bases. Portanto, precisamos de um algoritmo mais sofisticado para encontrar alinhamentos ótimos - esses alinhamentos são aqueles de pontuação (score) máxima - e, nesse caso, utilizaremos programação dinâmica para encontrá-los. O algoritmo de programação dinâmica utiliza o paradigma da divisão e conquista. Nesse paradigma, o objetivo é quebrar o problema em subproblemas que são similares ao problema original - recursivamente resolvem-se os subproblemas, e finalmente combinam-se as soluções para resolver o problema original. O paradigma de divisão e conquista resolve subproblemas recursivamente, onde cada subproblema deve ser menor que o problema original. A seguir, demonstraremos a utilização da programação dinâmica para encontrar alinhamentos ótimos entre duas sequências. Vamos definir duas sequências, X e Y. Inicialmente, é preciso encontrar as soluções dos subproblemas e armazená-las em uma tabela (matriz). No cenário do alinhamento de duas sequências X e Y, iMasters #24 Novembro 2017
Ilustração: shutterstock - vectorfusionart
implementação desse algoritmo em diferentes linguagens pode ser facilmente encontrada em uma busca rápida na Internet.
// 29
um subproblema é qualquer alinhamento entre X’ e Y’ tal que: X’ = um prefixo de X e Y’ = um prefixo de Y. Então, para encontrar a solução ótima, deve-se ir achando as soluções dos subproblemas menores para os maiores. O último elemento da tabela a ser preenchido conterá a solução “completa” do problema. Não se preocupe em entender tudo nesse momento, isso deve ficar um pouco mais claro quando analisarmos o preenchimento da matriz de programação dinâmica. Tipos de alinhamentos Considere que para as sequências X=TTCATA e Y=TGCTCGTA existem três possibilidades de alinhamento entre as bases da sequência X e Y. 1. x alinhado com y - match (igual) ou mismatch (desigual). 2. x alinhado com gap - O gap (espaço) representa os eventos de inserção ou deleção nas sequências. 3. y alinhado com gap. Sistema de pontuação Também precisamos definir uma pontuação para cada alinhamento. Quando x for alinhando com y, se x=y (match), então o valor do alinhamento será 5. Caso contrário, se x≠y (mismatch), o valor do alinhamento será -2. Quando x=gap ou y=gap, o alinhamento será penalizado com o valor de -6. Esse sistema de pontuação pode variar, e os softwares que implementam esse algoritmo costumam informar os valores do seu sistema de pontuação. Inicializando a matriz de programação dinâmica Agora que temos as possibilidades de alinhamentos e um sistema de pontuação, podemos inicializar a matriz de programação dinâmica, figura 1. Primeiro, devemos alinhar a sequência X (x1..xm) e Y (y1..yn) com uma cadeia vazia. Esse alinhamento está representado em nossa matriz pela coluna 1 (esquerda) e linha 1 (superior), respectivamente. Além disso, a primeira célula da matriz (superior esquerda) está alinhando x0..y0, ou seja, nada com nada e, portanto, deve ser inicializada com o valor 0 (zero). Definição do algoritmo recursivo Vamos escrever uma definição recursiva geral para todos os nossos resultados (escores) de alinhamento ótimo parcial S(i,j): iMasters #24 Novembro 2017
30 // BIOINFORMÁTICA
S(i,j) = max [S(i-1, j-1) + matriz(i,j), S(i-1, j) + penalidadeDoGap(), S(i, j-1) + penalidadeDoGap()] se i=j, então matriz(i,j) = 5 se i!=j, então matriz(i,j) = -2 penalidadeDoGap() = -6
Com a matriz inicializada, ou seja, a linha superior e a coluna esquerda preenchidas, é possível completar o resto da matriz usando a definição recursiva S(i,j). Dessa maneira, podemos calcular o valor de qualquer célula para a qual saibamos os valores das três células adjacentes, para a parte superior esquerda (i-1, j-1), acima (i-1, j) e para a esquerda (i, j-1). Existem várias maneiras diferentes de fazer isso: uma delas é iterar dois loops aninhados, i = 1 para M e j = 1 para N. Assim, estaremos preenchendo a matriz da esquerda para a direita, de cima para baixo.
∏ Matriz de programação dinâmica preenchida por duas sequências de DNA, X=TTCATA e Y=TGCTCGTA e sistema de pontuação de +5 para cada match, -2
(i-1, j-1), acima (i-1, j) ou para a esquerda (i, j-1)) usamos para chegar aqui - por exemplo, podemos repetir os mesmos três cálculos e registrar essa escolha como parte do alinhamento e, em seguida, seguir o caminho apropriado; nesse caso, de volta à célula anterior no caminho ideal. Temos que fazer isso em uma célula no caminho ótimo por vez, até atingirmos a célula(0,0), altura em que o alinhamento ótimo é totalmente reconstruído. Podemos observar o traceback do caminho ótimo do nosso alinhamento em vermelho e com as setas indicativas na figura 1. O alinhamento ótimo pode ser visto na figura 2.
para cada mismatch e -6 para cada inserção ou deleção. - Fonte: Eddy, Sean R.
Enfim, o alinhamento ótimo Uma vez que terminamos de preencher a matriz, a pontuação do alinhamento ótimo das sequências completas é a última pontuação que calculamos, S(i,j). De qualquer forma, ainda não conhecemos o alinhamento ótimo. Para descobri-lo, podemos fazer um rastreamento (traceback) recursivo na matriz. Começamos na célula(m, n), para qual temos que determinar quais dos três casos (superior esquerda iMasters #24 Novembro 2017
∏ Alinhamento ótimo obtido através do rastreamento (traceback) recursivo na matriz. - Fonte: Eddy, Sean R. “What is dynamic programming?.” Nature biotechnology 22.7 (2004): 909-910.
Ilustração: shutterstock - vectorfusionart
“What is dynamic programming?.” Nature biotechnology 22.7 (2004): 909-910.
// 31
Considerações finais O algoritmo de programação dinâmica não é trivial e seu tempo de execução para duas sequências é quadrático, θn2. Em outras palavras, para sequências suficientemente grandes, ele também pode ser impraticável. Entretanto, esse algoritmo garante matematicamente o melhor alinhamento (de pontuação mais alta). Embora isso não signifique que o alinhamento ótimo corresponda a um alinhamento biologicamente correto, esse é um problema para o sistema de pontuação, não para o algoritmo. De forma similar, o algoritmo de programação dinâmica é capaz de alinhar com sucesso sequências não relacionadas. Por exemplo, as duas sequências aqui apresentadas, X e Y, podem parecer bem alinhadas, contudo elas não são relacionadas. São sequências de DNA geradas aleatoriamente! A questão de quando uma pontuação é estatisticamente significativa também é um problema separado, que requer uma dose considerável de estatística. Referências: 1. J.C. Setubal Chapter A05 Similarity Search https://goo.gl/q3ow3v.
2. Eddy, Sean R. “What is dynamic programming?.” Nature biotechnology 22.7 (2004): 909-910. Site com implementação do algoritmo de programação dinâmica: https://goo.gl/5YfWta. A bioinformática é uma área multidisciplinar formada principalmente por biologia, computação e estatística. O Instituto de Matemática e Estatística da USP oferece cursos de mestrado e doutorado em bioinformática. https://www.ime.usp.br/bioinfo/pos
Gianluca Major é formado em Processamento de Dados e tem especialização em Engenharia de Software e mestrado em Bioinformática. Um profissional multidisciplinar que, ao longo dos últimos dez anos, tem trabalhado principalmente com a plataforma Java no desenvolvimento de aplicações em diferentes segmentos, tais como financeiro, telecom e bioinformática. Apaixonado por tecnologia, churrasco e cervejas com os amigos.
gianlucamajor@gmail.com
iMasters #24 Novembro 2017
32 // DESIGN WEB
DESIGN WEB RESPONSIVO NÃO É UMA TENDÊNCIA, MAS UMA REALIDADE Por Cristiano Mendes, Diretor de produtos para a GoDaddy na América Latina Por Bernard de Luna, CEO da Bunee.io e evangelista web da GoDaddy PRO
ATUALMENTE, as pessoas fazem tudo pelo celular. Nossos smartphones são mais do que aparelhos para fazer ligação (inclusive, muitas vezes, ligações é o que menos fazemos com eles), mandamos mensagens, gravação vídeos, tiramos fotos e, claro, navegamos pela Internet. Em 2015, o telefone celular se consolidou como o principal meio de acesso à Internet no Brasil, com 92,1% dos domicílios brasileiros acessando a rede pela plataforma mobile, segundo o Suplemento de Tecnologias de Informação e Comunicação (TIC) da Pesquisa Nacional por Amostra de Domicílios (Pnad), divulgado pelo Instituto Brasileiro de Geografia e Estatística (IBGE). É muito inconveniente quando um site que não carrega no celular. Por isso, não é de hoje que a demanda por desenvolvimento de sites responsivos aumenta, e os desenvolvedores e designers web devem se preparar cada vez mais para isso. De acordo com um levantamento da GoDaddy, realizado em 2017, aproximadamente 37% dos profissionais web brasileiros entrevistados disseram que mais da metade de seu trabalho com desenvolvimento web é focado em entregar produtos e serviços para dispositivos móveis. iMasters #24 Novembro 2017
O design responsivo O design web responsivo cria um sistema para um único site para reconhecer e reagir ao tamanho do dispositivo de um usuário - com uma URL e uma fonte de conteúdo. Um layout flexível ajusta-se de acordo com o tamanho da tela, oferecendo uma experiência de navegação otimizada. Ou seja, um conjunto de códigos HTML serve para uma página, independentemente do dispositivo. A diferença é a apresentação da página, que muda com base em CSS Media Queries. Essas consultas aplicam regras sobre como o navegador deve exibir elementos, com base no tamanho, ratio e até orientação de um dispositivo. No início das implementações das queries, era considerada apenas a largura da página, sendo 320px para mobile e mais de 1000px para um desktop. Porém, a resolução dos dispositivos móveis cresceu agressivamente, sendo 1080x1920 a resolução mais usada na Alemanha e 750x1334, nos Estados Unidos. Por isso, hoje é necessário um pouco mais do que valores fixos para controlar as variações de layouts da sua página web.
// 33
Existem três elementos importantes para o design de sites responsivos para que possam ser visualizados em diferentes dispositivos: uma grid fluida, textos e imagens flexíveis e queries de mídia. Uma grid fluida ajuda a garantir que um design web responsivo seja flexível e escalável. Uma página é dividida em colunas iguais. Os elementos de design terão espaçamento e proporção consistentes e ajustarão a largura da tela com base nas porcentagens. Claro que grids não são novidade, mas antes elas vinham com largura fixa, usando pixels absolutos, o que causava restrição na visualização em telas menores. Para criar uma grid responsiva, você pode trabalhar com tamanhos relativos (%, em, vh, vw), Flexbox (a mais usada atualmente) e o CSS Grid que já é suportado na maioria dos browsers (http://caniuse.com/#feat=css-grid). Transformar textos em elementos responsivos ainda envolve um pouco mais de trabalho em websites. Você pode recorrer a bibliotecas JavaScript para alterar o tamanho de acordo com seus containers, mas o método mais usado ainda é trabalhar com tamanhos relativos (em %) e controlar a unidade absoluta (px) no primeiro container pai, relativando todos os textos a ele. Imagens flexíveis podem ser mais desafiadoras devido ao tempo de carregamento em navegadores de dispositivos menores. Mas tenha em mente que essas imagens podem ser dimensionadas, cortadas ou removidas dependendo do conteúdo que seja absolutamente essencial para a experiência. O tamanho da página como um todo também precisa ser considerado ao se pensar em design responsivo. De acordo com o site mobiforge, o peso médio de uma página na web já é maior que o primeiro arquivo de instalação do jogo DOOM, lançado em 1993. Ainda de acordo com a empresa Kissmetrics, a maioria dos usuários mobile espera de 6 a 10 segundos antes de abandonarem um website. De tendência a realidade Um levantamento feito pela empresa de redes sociais Hootsuite no início de 2017 revelou que existem
2.789 bilhões de usuários de redes sociais e são feitos 4.917 bilhões de acessos únicos via smartphones. Mas ele foi além disso: em apenas um minuto, são criados 1.8 milhão de vídeos no Snapchat, 46.200 de fotos/vídeos são postados no Instagram e são enviadas 16 milhões de mensagens de texto. A tecnologia web tem evoluído mês a mês para permitir que o design responsivo esteja bem além do que apenas tamanhos e ordenações. Para isso, ele já possui rascunhos técnicos sobre leitura de bateria do celular, contraste de luz e até banda de Internet, para permitir que o website possa se ajustar 100% à realidade do usuário. Com dados como esses, pode-se perceber a importância do design responsivo para o dia a dia dos usuários, sejam eles consumidores pretendendo finalizar uma compra pelo smartphone ou um pequeno empreendedor buscando ter uma identidade digital que pode ser criada e acessada pelos seus clientes a qualquer hora e de qualquer lugar. Cristiano Mendes é diretor de produtos da GoDaddy para América Latina desde março de 2014. Com mais de 12 anos de experiência em empresas como Bunge, TIM, Dell, Research In Motion e Oi, domina temas relacionados ao mercado de telecomunicações e tecnologia. Antes de juntar-se à GoDaddy, Cristiano ocupou o cargo de Head de Marketing na KingHost, uma das empresas líderes em hosting no Brasil. Além disso, tem sólida experiência em desenvolvimento de clientes e expansão de mercado.
cristiano@godaddy.com
Bernard De Luna atua em projetos digitais desde 1999, já participou de diversos projetos do Brasil, EUA, Inglaterra, França e Austrália. Tem mais de 15 anos de experiência na área de produtos e inovação, tendo passado por empresas como Jornal do Brasil, Petrobras, Melt DSP, Videolog.tv, Estante Virtual e iMasters. Atualmente, é evangelista da GoDaddy PRO e CEO da Bunee.io.
deluna@gmail.com
iMasters #24 Novembro 2017
34 //
DROPS DO MERCADO GERENCIE SEUS CLIENTES EM UM SÓ LUGAR COM O PROGRAMA GODADDY PRO IBM LANÇA PORTAL FOCADO EM CÓDIGO
O principal objetivo do portal é que o desenvolvedor encontre tudo o que precisa para resolver seus problemas. Simples assim! Estão disponíveis jornadas de aprendizado que envolvem: diagramas de arquitetura, códigos disponíveis no GitHub e extensa documentação. São mais de 40 jornadas que ajudarão aos devs a trabalhar em soluções de AI, Blockchain, Data Science, Containers, Microserviços e muito mais. Além disso, é possível entrar em contato com diversos especialistas de todo mundo para tirar dúvidas, navegar em tecnologias Open Source apoiadas pela IBM e parceiros e também ficar por dentro de eventos on-line e presenciais. Become an IBM Coder! Acesse: https://developer. ibm.com/code/ - As jornadas em português estarão disponíveis em breve.
FIAP LANÇA DOIS CURSOS DE GRADUAÇÃO A FIAP é tecnologia, inovação e empreendedorismo. Apresenta os seus dois novos cursos de Graduação: Defesa Cibernética e Marketing – Digital & Data Science. Os novos cursos têm duração de 2 anos e se integram a um portfólio com 15 cursos de Graduação, presenciais e on-line. Uma oportunidade para pensar o novo e começar a transformar o mundo. Para mais informações, acesse www.fiap.com. br/graduação.
iMasters #24 Novembro 2017
Criado pela GoDaddy, maior plataforma de cloud dedicada a pequenos negócios e empreendimentos independentes, o Programa GoDaddy Pro é um programa gratuito de serviços desenhada para ajudar a dar apoio a designers e desenvolvedores web que precisam gerenciar seus clientes e sites. O programa oferece um único dashboard e um conjunto de ferramentas integradas para ajudar a gerenciar os produtos dos clientes a partir de um lugar só, utilizando apenas um login para gerenciar o DNS, criar um e-mail e configurar a hospedagem. Os recursos incluem o Pro Sites, para gerenciamento de sites em WordPress em apenas um clique; o Clientes Pro, que permite que o professional gerencie todos os produtos de seus clientes de uma vez só, em um só lugar; o Recompensas Pro, para descontos e promoções; e o Diretório ProConnect, que conecta profissionais web a clientes. Para saber mais, acesse a página do programa: https://br.godaddy.com/pro.
SPLIT PAYMENT: A SOLUÇÃO PARA A DIVISÃO DE SEUS PAGAMENTOS Com o objetivo principal de ajudar o lojista online em seu planejamento, a Stone desenvolveu uma excelente solução para quem busca facilidade e flexibilidade na hora da liquidação de recebíveis. O produto é ideal para marketplaces e apps em geral porque além da distribuição de valores fixos, é possível fazer a personalização de comissões em números porcentuais. Não exige complexidade e já está de acordo com as novas regras estipuladas pela Câmera Interbancária de Pagamentos (CIP). Tudo isso com o total controle dos pagamentos necessários para seus sellers através do portal conciliador. Fácil, rápido e em tempo real.
// 35
iMasters #24 Novembro 2017
36 // CAPA
Criatividade e inovação podem ajudar a mudar o mundo – como criei uma prótese de braço na minha casa
foto: shutterstock - ShooLandia
Por Guilherme Souza, para Redação iMasters
iMasters #24 Novembro 2017
// 37
NO FINAL DE 2015, comecei a trabalhar em um projeto que tinha como ambição encontrar uma forma melhor de explicar para desenvolvedores do que tratava o primeiro D na sigla DDD (Domain Driven Design). Em 2017, o projeto está pronto, e parece ter outra responsabilidade no mundo. Além de ainda ser um grande facilitador para explicar DDD, o projeto me fez questionar a minha missão no mundo como desenvolvedor. Nessa época, eu já havia passado por diversas agências de publicidade, tinha falido algumas startups e trabalhava na multinacional Sprinklr, que havia recentemente adquirido a startup brasileira SCUP, que na época trabalhava em um novo projeto. Por saber trabalhar com NODE, eu havia saído da área de projetos internos, na qual desenvolvia coisas como site, alguns sistemas internos de gestão de contas e projetos especiais, e tinha começado a trabalhar no time de engenharia, responsável pelo back-end do novo projeto. Após algum tempo trabalhando nesse novo projeto, a empresa decidiu mudar o foco para um produto completamente diferente, bem como o approach utilizado para desenvolver o MVP. A área de produto passava a possuir um braço de inovação, e, além de desenharmos o produto, nós desenvolvíamos alguns protótipos e, aos poucos, também o novo produto.
N
A partir daí, eu pertencia não mais à área de engenharia, mas à área de produto, sob a gestão do Renato Shirakashi, na época Diretor de Produto e co-founder SCUP (hoje AVP Product Sprinklr). Tinha chegado, então, a um dos momentos mais criativos e excitantes da minha carreira, e era realmente “legal” e arrogante andar pelo escritório com um crachá escrito “INNOVATION” embaixo do meu nome. Lá nós fazíamos produto como sempre tínhamos sonhado em fazer, fazíamos benchmarks, desenvolvíamos todo o tipo de documentação, experimentos de interface e também de engenharia. O “Shira”, então meu chefe, como costuma ser chamado, havia comprado no Kickstarter um dispositivo chamado Myo, uma pulseira que mede o nível da contração muscular no antebraço, e usa esses sinais para controlar “coisas”. A pulseira havia passado por algumas pessoas do escritório, que a usavam basicamente para passar slides à distância, até que um dia essa pulseira acabou parando na minha mesa. Eu vivia um dos momentos mais criativos da minha vida e tinha acabado de colocar meu novo produto (minha quinta ou sexta startup) no mercado, o LearningHub (https:// learninghub.us), uma ferramenta de educação corporativa a distância que acabava de assinar um contrato com a gigante Porto Seguro. Tudo era motivo para pensar em criar alguma coisa. A pulseira ficou comigo durante alguns dias, e comecei a fazer al-
iMasters #24 Novembro 2017
guns testes com ela. Eu colocava a pulseira no braço, começava a programar usando o SDK da Myo em JavaScript e ficava por horas manipulando os sinais que chegavam através de um websocket, fazia uma imagem na tela ampliar ou reduzir seu tamanho de acordo com a contração dos músculos no meu braço, e todo o tipo de experimento inútil. A bateria do dispositivo acabava, e eu plugava o cabo USB na pulseira para poder continuar brincando - eu me sentia criando algo MUITO incrível quando plugava um cabo USB “no meu braço”, minha cabeça chegava a doer tentando encontrar possibilidades para usar aquilo em algum projeto. Desenvolvedores e suas manias É claro, não se desenvolve algo a partir de uma possibilidade, mas a partir de uma necessidade - ter uma câmera digital me dá a possibilidade de processar uma imagem do mundo real digitalmente, mas para isso ser útil é necessário antes atender a uma necessidade. Não importa se você é capaz de desenvolver algoritmos que per-
iMasters #24 Novembro 2017
cebem em uma imagem a presença de uma árvore, por exemplo, mas isso passa a importar caso alguém necessite descobrir focos de desmatamento a partir de imagens de satélite. A coisa muda quando a necessidade aparece nessa hora, quem tem o maior repertório de ferramentas tem mais chances de desenvolver a melhor solução. E eu via aquela pulseira como uma ferramenta MUITO interessante, eu só não sabia que problemas ela poderia ajudar a resolver. A pulseira era (e ainda é) vendida como um tipo de mouse, um dispositivo para controlar o computador, porém, depois de algum tempo, percebe-se que ela não é tão simples de usar, e você acaba voltando para o mouse de verdade. O Shira uma vez me disse que por mais “legal” que o produto seja, ele não dura muito tempo se não for realmente útil, e eu via a pulseira Myo só como algo MUITO LEGAL, mas não era realmente útil. Um bom tempo havia passado, a Sprinklr havia finalmente adquirido a SCUP, e de acordo com as novas diretrizes da global, a gente não podia ter engenharia dentro de um time de produto, e eu tinha passado a
ser um Product Owner - a única coisa que desenvolvia de vez em quando era um protótipo de interface, para a gente poder experimentar; na época, cheguei a pensar que não iria nunca mais desenvolver algo profissionalmente, e comecei a dar palestras que não tinham a ver com tecnologia, mas sim com processo criativo (https://goo.gl/vv7QmP). O desenvolvimento de fato ficava com a área de engenharia, que estava precisando muito de um desenvolvedor NODE. E a convite do então CTO LATAM David Lojudice, eu voltei para a área de engenharia. A área havia contratado alguns desenvolvedores bem novos e com pouco tempo de experiência, e eu parecia ir para lá com a missão de, junto de outros desenvolvedores seniores, passar um pouco de conhecimento para esses caras. Voltei programando feito um louco, e desenvolvemos as fundações do que até pouco tempo atrás era a base para qualquer projeto dentro do Sprinklr, e eu voltei a palestrar sobre tecnologia - nessa fase, eu falava basicamente sobre padrões de arquitetura, DDD e separação entre componentes de software que representam business dos componentes que simbolizam infraestrutura. Salvas algumas palestras em faculdades, nessas eu sempre palestro um replay modificado da
foto: shutterstock - ShooLandia
38 // CAPA
// 39 minha talk sobre “Conselhos de um programador que já se deu muito mal na vida”. Explicar DDD para um designer que tentava ser um desenvolvedor front-end se mostrava cada vez mais difícil. Procrastinador nato que sou, gasto 90% do tempo necessário para fazer algum trabalho que realmente importa assistindo ao YouTube ou fazendo qualquer outra coisa na Internet, e termino o que tenho que fazer nos 10% do tempo que sobraram, foi então que, enquanto procurava alguma coisa rara sobre Metal Gear no Mercado Livre, me deparei com um brinquedo antigo, uma espécie de mão biônica, na qual cada dedo é controlado através de uma linha que quando puxada faz com que o dedo feche - o mecanismo é bem simples, mas funciona. Naquele momento, foi como se eu tivesse tomado uma dose grande até demais de uma droga MUITO BOA, e tudo veio na minha cabeça de uma só vez e parecia se encaixar de uma maneira MUITO excitante. Para puxar cada uma das linhas, eu poderia usar um Servo Motor, e para controlar o quanto cada um dos servos se movimentava, eu poderia usar a pulseira Myo, e eu ia construir uma mão que, inocentemente, a princípio parecia ser a forma perfeita de explicar a separação entre business e infra. Não
queria que business se relacionasse diretamente com “NEGÓCIO”, mas sim com propósito. Era tudo muito claro: os dedos eram business, e os servos eram infra, a Myo era infra, e a intensidade da contração muscular era business. Depois de rascunhar algum código bem nojento e usar algumas divs para representar cada um dos dedos, eu tinha feito uma mão biônica, em HTML, mas ainda assim era uma mão biônica. Se eu conseguia mover as divs, não seria muito difícil mexer uma mão “de verdade”. Nem havia dormido e fui para o escritório contar para as pessoas sobre o que eu planejava fazer - de cada 10 pessoas que ficaram sabendo da ideia, contrariando as leis da matemática, 11 simplesmente riam ou diziam ser impossível, incluindo até o próprio Shira, uma das pessoas mais inteligentes com quem tive o prazer de trabalhar. Se ele dizia que algo era impossível, eu deveria ouvir isso pelo menos um pouco. A coisa mudou quando contei a história para um dos fronts novos, o Eduardo Henrique, que viu naquilo a real possibilidade de desenvolver uma PRÓTESE para quem não tem um braço. Era ainda mais assustador para as pessoas quando eu dizia que
estaria trabalhando em criar uma prótese, e nos meses seguintes eu quase desisti por diversas vezes. Encontrar material na Internet sobre o assunto era praticamente impossível, e eu comecei a questionar as minhas capacidades de fazer aquilo acontecer, quando de repente algumas referências começaram a surgir, e até aqui no Brasil já havia pessoas trabalhando em próteses passivas impressas em 3D. Foi então que eu conheci o projeto inMoov, um projeto francês de um robô open source - o braço do robô parecia ser a infra perfeita para os dedos, mão e braço da prótese. Tinha entrado em contato com o Jaydson, organizador da BrazilJS, um evento que respeito MUITO, ao qual devo a minha carreira e no qual sempre sonhei em palestrar. Tinha falado sobre o projeto e disse que acreditava dar tempo de terminar até o evento, praticamente implorando para palestrar lá, e ele topou. Eu já estava tranquilo, sabia que quando quisesse o projeto poderia ser finalizado, mas estava focado trabalhando em outras coisas, e tinha descoberto o meu fascínio por VR - nessa descoberta,
iMasters #24 Novembro 2017
foto: shutterstock - ShooLandia
40 // CAPA
acabei comprando meu set de VR (optei pelo dispositivo da Sony, por já possuir um PS4), o que basicamente tirou a minha necessidade de sair de casa para alguma coisa, e comecei a trabalhar em uma interface gráfica para sistemas operacionais em VR. Já tinha até um protótipo funcionando, quando o Tiago Baeta, CEO do iMasters, entrou em contato comigo para falar de um novo evento de JavaScript no qual a iMasters estava trabalhando e queria saber se eu tinha algo interessante para mostrar lá. Falei sobre o projeto do sistema operacional para VR, mas quando eu disse que tinha um projeto não finalizado de uma prótese, o cara cegou - ele não queria saber de mais nada, queria ver a prótese funcionando. Eu tinha muito medo de não conseguir finalizar o projeto até o evento e acabei cometendo o erro de aceitar apresentar a prótese. Nos dois meses seguintes, eu não fiz outra coisa que não fosse trabalhar naquele projeto. No meio desse processo, acabei saindo do Sprinklr, e agora sou CTO da Revmob, a maior AdNetwork da América Latina e uma das maiores do mundo. A minha startup, o LearningHub, agora tem no portfolio clientes como Caixa Econômica Federal e Postos Ipiranga. A JSExperience aconteceu, a hora da minha palestra chegou, e não consigo esquecer até agora o momento quando apresentei a prótese funcionando no palco. As pessoas se emocionaram, e ali eu descobri que o projeto era MUITO inspirador e conseguia devolver aos desenvolvedores a missão de resolver proiMasters #24 Novembro 2017
// 41
blemas do mundo real. Boa parte, senão a GRANDE maioria dos projetos open source, é feita POR desenvolvedores PARA desenvolvedores resolvendo problemas DE desenvolvedores, como performance de código ou ferramentas que de alguma forma facilitam o processo de desenvolvimento. A partir desse momento, eu vi que nós poderíamos transformar a comunidade JavaScript na maior comunidade Maker do mundo. A BrazilJS chegou e eu mudei a minha apresentação - a palestra conta como é bom ser um eterno aprendiz (“Um Bosta”) e estar aberto para aprender novas coisas. Conto sobre coisas incríveis que já foram feitas usando somente JavaScritp, sobre como o desenvolvedor fica limitado só usando-o para escrever um framework ou uma nova biblioteca de código e como essa limitação pode fazer um enorme mal para o mundo. Você tem o poder de criar e de resolver os problemas do mundo, não se limite.
Na edição de Fortaleza do BrazilJS, eu abri o projeto publicamente, e espero que a comunidade ajude a evoluí-lo de alguma forma, e que ele possa um dia realmente ajudar pessoas a superar uma deficiência. Isso tudo só foi possível por estar sempre aberto ao novo, curioso e por dar pouca importância para as pessoas que me julgaram incapaz. A única pessoa que pode te parar é você. Vivemos em 2017, a melhor época para se viver até então, eu posso construir uma prótese ativa, dentro da minha casa, o que VOCÊ pode fazer? As pessoas que viveram antes de nós nos deixaram ferramentas incríveis para que a gente pudesse continuar o trabalho. É a nossa vez de contribuir com o mundo. O século passado nos abençoou com a Teoria da Relatividade Geral, os Computadores, A Internet, O Avião, a Clonagem de Mamíferos, a Penicilina, a Televisão, o Transistor, a Pílula Anticoncepcional, entre outros, o que NÓS vamos fazer? O ano 2000
já chegou e, digo mais, já se passaram 17 anos desde então. As pessoas que entraram na faculdade agora já não entendem por que é que a gente assiste a Formula 1 no Brasil. O mundo está mudando MUITO, e a gente está perdendo a capacidade de reparar nisso. A pior coisa que pode te acontecer é acreditar que já sabe demais ou que pode “de menos” enquanto tiver plena consciência de que ainda é um completo idiota, estará pronto para aprender coisas incríveis. Enquanto VOCÊ acreditar que é capaz de fazer alguma coisa, não pode dizer que NINGUÉM acredita em você; se mais ninguém acreditar, tente continuar sendo o único que acredita - no fim das contas, é o que realmente importa.
Guilherme Souza é CTO at Revmob.
gui_souza@me.com
iMasters #24 Novembro 2017
42 // MAKER
IMPRESSÃO DE UMA BANCADA DE PROCESSOS INDUSTRIAIS UM NOVO PARADIGMA DE CONSTRUÇÃO DE PROTÓTIPOS Por Rafael Matsuyama, CEO & Founder at RM Consultants
iMasters #24 Novembro 2017
pressora 3D levantou a seguinte proposta: “Por que não imprimir a bancada?”. A partir dessa nova perspectiva, pesquisadores da área de estruturas, materiais, química, mecânica, elétrica e computação começaram a elaborar os primeiros esboços de uma bancada que pudesse ser imprimida, sendo que apenas as partes de atuadores, microcontroladores e fiação seriam acrescentadas ao molde impresso. Entre os requisitos primordiais para esse projeto está a modularidade dos blocos que constituirão a bancada, visando a permitir a expansão e a criação de arranjos complexos com base nos blocos simples de conexão (como tanques, válvulas de pressão, encanamento modular etc.). É importante ressaltar que a utilização de materiais de fácil impressão e de baixo custo mantiveram características mínimas de resistência (química, térmica e/ou mecânica), espessura e transparência, para que o custo de manutenção ao longo do ciclo de vida do produto fosse minimizado. O projeto foi dividido em quatro etapas: 1. Estudo dos materiais. 2. Produção da estrutura da bancada. 3. Posicionamento dos componentes eletrônicos e de controle. 4. Desenvolvimento de uma interface amigável para programação.
Imagens: Divulgação.
NESTE ARTIGO, será apresentado o projeto Bankada, uma proposta multidisciplinar que objetiva a impressão de uma bancada de processos industriais para uso como recurso didático ou aplicação em treinamentos laboratoriais envolvendo controle de processos químicos e industriais. O início desse projeto se deu através de um docente que se deparou com dificuldades para encontrar uma bancada para fazer controle de estoque e vazão de água, e ainda permitisse o ajuste e a análise dos parâmetros de vazão, temperatura e volumetria para demonstração aos alunos sobre o comportamento de um sistema industrial simples. Identificada a necessidade, alternativas foram mapeadas, desde encontrar bancadas de processos industriais similares a de laboratórios de grandes empresas (cujo preço variou entre US$ 10 mil e US$ 50 mil a unidade, o que se tornou inviável economicamente para uso acadêmico), a construção de maquetes em escala reduzida (com o revés de ser uma solução com acabamento de baixa qualidade) ou a aquisição de bancadas industriais usadas (com o problema de encontrar bancadas semelhantes para construir um laboratório didático). Visto que alternativas tradicionais não atenderiam às necessidades para montar um laboratório didático, a solução da impressão 3D veio à mente de um dos participantes da equipe, que ao ver uma im-
// 43
∏ Diagrama esquemático dos componentes da bancada protótipo
No momento, o projeto se encontra entre as fases 1 e 2, nas quais foram definidas grande parte dos materiais que irão compor a estrutura da bancada, assim como os primeiros protótipos dos tanques de água. Na Figura 1, encontra-se um diagrama esquemático da disposição e ligação de alto nível entre os componentes eletrônicos na estrutura da bancada, já visando à modularidade e à possibilidade de expansão da planta. Durante a definição dos componentes eletrônicos a serem usados, os projetistas tiveram de escolher entre a utilização de componentes para uso industrial e componentes COTS (commercial off-the-shelf) de uso comercial ou particular. Na situação, optou-se pela utilização de componentes comerciais pelo fato de serem mais acessíveis e inicialmente voltados para uso acadêmico e aprendizagem, e não para instalações industriais. A utilização de uma estrutura impressa junto de componentes comerciais possibilitou uma redução
drástica no custo de fabricação de uma bancada, situando-se entre R$ 2 mil e R$ 5 mil a unidade, sem necessitar de um parque industrial para a sua fabricação, permitindo a construção dela de forma caseira. Por fim, na última fase está previsto o desenvolvimento de uma interface amigável para a programação da lógica de controle (via código, diagrama de blocos ou equação de controle). Caso seja levado em consideração que o público-alvo não necessariamente tem conhecimentos avançados de programação, ter uma interface gráfica para a construção da lógica de controle torna-se fundamental. Na Figura 2, é apresentado um diagrama estrutural de um dos tanques, com um nível de detalhamento maior que o da Figura 1. Durante o detalhamento da estrutura do tanque, os projetistas receberam uma série de contribuições de colegas e especialistas, o que levou a uma segunda decisão: tornar o projeto Bankada open source, com disponibilização gratuita de todos os códigos e plantas na Internet. iMasters #24 Novembro 2017
44 // MAKER
30cm
3/4” 3,5cm
3,5cm
3,5cm
1/4”
3,5c
m
Inferior ∏ Diagrama estrutural detalhado de um tanque
iMasters #24 Novembro 2017
Rafael Matsuyama é Mestre e Engenheiro da Computação formado pela Escola Politécnica da USP (Poli-USP), e doutorando pela FEA-USP. Partner na W/R Partners, Sócio-Fundador da RM Consultants e da RM Ventures, Cofundador da KognaWorks e da Maki Design & Co., é também Consultor de TI e de Reestruturação de Empresas, com nove anos de experiência no mercado, tendo passagens pelo Banco Santander, Itaú-Unibanco, PromonLogicalis e Petrobras. É pesquisador independente em assuntos de Big Data, Financial Analytics e NeuroScience.
rafael.matsuyama@gmail.com
Imagens: Divulgação.
10cm
A equipe do projeto acredita que uma colaboração maior será obtida através do compartilhamento de ideias, e a monetização do projeto será obtida a partir de consultoria e implantação das bancadas para os usuários finais. O projeto teve um progresso considerável por meio de parceiros que gerenciam fases específicas do projeto, dentre eles: pesquisadores da Universidade Estadual Paulista - Campus Ilha Solteira (UNESP Ilha Solteira), Universidade Estadual de Londrina (UEL) e Escola Politécnica da Universidade de São Paulo (Poli-USP), assim como especialistas das empresas KognaWorks e 3D Criar. Existia uma previsão inicial para o lançamento do primeiro protótipo em agosto de 2016, porém, devido a imprevistos e atrasos para a prototipação dos tanques e da lógica de controle, esse prazo foi adiado para setembro/outubro de 2016. O escopo inicial do projeto, que consistia em construir bancadas para laboratórios didáticos, já foi ampliado para a utilização delas em laboratórios de treinamento em indústrias químicas e alimentícias, com o objetivo de capacitar futuros laboratoristas e funcionários em suas funções. Algumas empresas industriais nos consultaram sobre a possibilidade de construir partes das plantas industriais utilizando prototipação rápida via impressão 3D, criando uma linha interessante de requisitos e funcionalidades a se pesquisar, testar e prototipar para uso industrial. Toda ajuda é bem-vinda para o nosso projeto, a equipe até definiu o seguinte slogan: “Para que comprar tudo pronto se você pode customizar e imprimir?”.
_
// 45
API de boletos PagSeguro A solução ideal para o seu negócio
Fácil de usar e integrar: uma solução simples e segura para os seus clientes.
Veja as vantagens: Data de vencimento parametrizável Boletos registrados Geração de boletos individuais ou em lote, modelo carnê Possibilidade de envio do código de barras por e-mail, SMS ou Push
Conheça essa e outras soluções
dev.pagseguro.uol
iMasters #24 Novembro 2017
46 // DESENVOLVIMENTO
FEATURE TOGGLE PARA ALÉM DO CONTROLE DE REGRAS DE PERMISSÃO Por Daniel Wellington, Analista de hospedagem na Locaweb
iMasters #24 Novembro 2017
gerenciá-las. É possível utilizar constantes dentro do próprio código, arquivos de configurações ou variáveis de ambiente.
Nos casos em que é preciso alterar o comportamento do toggle em tempo de execução, é possível utilizar um sistema automatizado para centralizar o gerenciamento das regras. Tudo vai depender da finalidade para a qual está utilizando o toggle.
Imagens: Divulgação.
QUANDO FALAMOS sobre o processo de desenvolvimento e, principalmente, quando estamos no contexto da Web, o release de uma nova feature ou o deploy de uma nova implementação são um dos pontos mais críticos desse processo. Por mais que o código esteja assegurado por testes automatizados e o projeto tenha sido bem planejado e executado, sempre existem incertezas a respeito dos impactos que a implementação trará para o sistema em produção. Questões referentes à performance e aceitação da base de usuários são difíceis de serem antecipadas com um nível alto de assertividade. Em ocasiões em que o time não possui métricas suficientes para basear suas decisões, a camada de negócios ou a infraestrutura física é complexa, o grau de incertezas do time cresce proporcionalmente. Uma prática que pode ajudar os times de desenvolvimento a diminuir incertezas é o uso de Feature Toggle. E uma forma simples de definir Feature Toggle é entendê-lo como uma técnica utilizada para controlar o comportamento de uma aplicação. Trata-se de um condicional binário, no qual baseado em determinadas regras você executa ação A ou B. As regras que vão determinar o comportamento do sistema podem ser das mais variadas. Há regras baseadas em usuário, há regras baseadas na arquitetura do sistema e existem algumas estratégias comuns para
// 47
O Feature Toggle pode ser aplicado a cenários variados. Como se trata de uma condicional, muitos sistemas utilizam estratégias que lembram ou são exatamente iguais ao conceito de Feature Toggle, mesmo que os desenvolvedores não tivessem isso em mente na concepção do código. Um uso comum para toggles é o controle de regras de permissão. Dessa forma, uma determinada feature pode ser exibida só para uma determinada classe de usuários. Toggles também são utilizados para controlar comportamentos relacionados à operação do sistema - quando a aplicação está passando por um uso acima do comum (um e-commerce durante a Black Friday, por exemplo), uma feature não essencial, mas que onera a performance, ela pode ser temporariamente desligada. Dentre todas as aplicações do conceito de Feature Toggle, é no processo de deploy que acontece a de maior relevância. Utilizar toggle permite que o time faça o deploy da feature e libere a funcionalidade apenas para um determinado range de usuários, fazendo um teste A/B, por exemplo. Outra possibilidade é o deploy gradual da feature. Trechos de código que compõem a funcionalidade são levados para produção e colocados fora do alcance dos usuários. Esses trechos podem ser
validados pelo time em um ambiente mais hostil do que o encontrado em um ambiente de homologação. Isso possibilita ter uma visão melhor dos impactos gerados pela implementação. Certa vez, usei o toggle em um produto de hospedagem para implementar uma funcionalidade que exibia determinadas informações sobre o servidor no Painel de Controle do produto. Para obter essas informações, foi necessário passar por diversas camadas da infraestrutura dos servidores. Como a arquitetura se mostrou um tanto quanto complexa, alguns pontos referentes à performance e ao comportamento foram difíceis de ser mensurados. Como o uso de Feature Toggle já era algo bem maduro para o time de desenvolvimento, logo foi estabelecida uma estratégia para abordar o problema. Basicamente, identificamos os cenários principais que compunham a feature. Esses cenários eram relativos a aspectos da infraestrutura. Então, o objetivo traçado foi desenvolver um cenário por vez e ir validando cada entrega. Uma vez que tivéssemos um cenário coberto, o código era levado para produção protegido por um toggle. Nós possuímos um sistema centralizado para gerenciar as regras de toggles. Dessa forma, iMasters #24 Novembro 2017
foi possível manipulá-las em tempo de execução. Sendo assim, após o deploy, o primeiro passo foi liberar o toggle apenas para os usuários da equipe de desenvolvimento. A funcionalidade foi testada e algumas questões técnicas sobre comportamento e performance foram validadas. Em seguida, o toggle foi aberto para um grupo de usuários que se encaixavam no cenário coberto. O uso da feature por esse grupo de usuários gerava dados para as métricas estabelecidas pelo time. Essas métricas eram acompanhadas diariamente.
O objetivo do time era analisar por mais tempo o comportamento do sistema. No momento em que todas as questões do time foram respondidas, os toggles foram removidos do código. Toggles trazem uma complexidade extra na hora de testar e manter seu código. Portanto, é preciso ter um processo sólido e maduro para gerenciar o seu ciclo de vida. Durante o desenvolvimento, algumas boas práticas precisam ser levadas em consideração. Toggles mal implementados podem onerar a performance do sistema e levar a comportamentos inespe-
Caso houvesse algum comportamento não desejado, era possível, dependendo da gravidade, fechar o toggle novamente para minimizar o impacto. Se o erro não fosse crítico, era possível analisar de uma forma mais precisa o ponto onde ele era gerado. Se a abordagem inicial fosse desenvolver todos os cenários e levá-los ao mesmo tempo para produção, identificar esses pontos seria muito mais custoso. Seguindo esse processo, o time conseguiu ir entregando as etapas da feature, corrigindo alguns pontos e validando as questões pertinentes. Quando a feature já estava completamente entregue, alguns pontos do código permaneceram com toggle apesar de aberto a todos os usuários.
rados. No quesito segurança, um ponto relevante é a forma como as regras de toggles são aplicadas. Uma regra baseada, por exemplo, em um cookie abre uma interface para ataques à aplicação. Com um processo maduro, o uso de Feature Toggles se torna um recurso interessante para o processo de desenvolvimento.
iMasters #24 Novembro 2017
Daniel Wellington é formado em Ciência da Computação. É desenvolvedor web há quatro anos. Atualmente, trabalha como analista no time de Hospedagem da Locaweb.
daniel.wellington@locaweb.com.br
Imagens: Divulgação.
48 // DESENVOLVIMENTO
// 49
Relevante
.STORE
Fรกcil de Lembrar
Marcante
SEARCH
iMasters #24 Novembro 2017
50 //POR DENTRO DO W3C
Implementação das boas práticas de dados na web: o caso da Costa Rica Por Caroline Burle, Responsável pelas Relações Institucionais do Ceweb.br e do W3C Brasil Por Maikol Porras, Presidente da Associação Ciudadana de Estudos para a Sociedade Abierta
A
A EQUIPE DO CEWEB.BR foi convidada pela Fundação The Trust for the Americas para ministrar um curso sobre as Boas Práticas de Dados na Web, com base no padrão do W3C lançado em janeiro deste ano, Data on the Web Best Practices DWBP (https://www.w3.org/TR/dwbp/). A capacitação desenvolvida pelos editores do DWBP ocorreu em San José da Costa Rica, de 6 a 8 de fevereiro de 2017, e foi ministrada por Newton Calegari. Participaram 20 funcionários públicos do Governo da Costa Rica, além do coordenador do projeto, Maikol Porras, e do responsável pelo financiamento da Fundação The Trust for the Americas, Rodrigo Iriani. A dinâmica das atividades e os exercícios práticos que os funcionários realizaram permitiram que a Costa Rica fosse um dos pioneiros na aplicação das Boas Práticas de Dados na Web. O caso da Justicia Abierta, do Judiciário da Costa Rica (https://goo.gl/E6sqmt) Esse caso mostra como é possível aplicar a maioria das boas práticas (BPs) para dados na Web de maneira fácil e simples. Mesmo sem orçamento destinado à implementação das BPs, devido ao fato de que a situação fiscal na Costa Rica apre-
iMasters #24 Novembro 2017
senta restrições orçamentárias, foi possível alterar o site de Dados Abertos e aplicar o padrão DWBP. Para tanto, criou-se um grupo interdisciplinar no departamento de Justicia Abierta, o qual, segundo Carlos Morales - que liderou o processo de implementação das BPs naquele departamento -, foi de extrema importância para agregar conhecimento sobre o assunto. Com esse grupo criado, Carlos teve a oportunidade de replicar o aprendizado obtido durante a capacitação de fevereiro e receber apoio político para colocar em prática esse padrão do W3C. Recentemente, durante o evento Condatos, Carlos fez uma apresentação sobre o processo de implementação do DWBP e os desafios que tiveram. Inicialmente, analisaram os dados que tinham para disponibilizar. Depois de realizar essa análise, fizeram uma consulta pública em parceria com a iniciativa Abriendo Datos para saber junto à sociedade costarriquenha quais dados deveriam priorizar. Em seguida, fizeram a coleta, a limpeza e a verificação daqueles dados. Finalmente, publicaram-nos no site Datos Abiertos del Poder Judicial de Costa Rica.
// 51
A grande dificuldade relatada por Carlos foi o desconhecimento por parte de funcionários públicos envolvidos na curadoria daqueles dados e também certa resistência por parte de alguns guardiões dos dados. Segundo ele, essas dificuldades foram superadas por meio de conversas e capacitações ocorridas junto ao grupo interdisciplinar. Com o processo interno estabelecido, das 35 boas práticas para dados na Web,
Best Practice (BP)
Aplicada
BP1 Provide metadata
Sim
BP2 Provide descriptive metadata
Sim
BP3 Provide structural metadata
Sim
BP4 Provide data license information
Sim
BP5 Provide data provenance information
Sim
BP6 Provide data quality information
Sim
BP7 Provide a version indicator
Sim
BP8 Provide version history
Sim
BP9 Use persistent URIs as identifiers of datasets
Parcial
BP10 Use persistent URIs as identifiers within datasets
Não
BP11 Assign URIs to dataset versions and series
Parcial
BP12 Use machine-readable standardized data formats
Sim
BP13 Use locale-neutral data representations
Sim
BP14 Provide data in multiple formats
Sim
o departamento de Justicia Abierta da Costa Rica aplicou - até agosto deste ano - 17 BPs. Das 18 que ainda não aplicaram, cinco foram parcialmente aplicadas e serão totalmente aplicadas até 2018. Destaca-se que, antes da capacitação feita pela equipe do Ceweb.br, apenas três BPs eram aplicadas pelo departamento de Justiça da Costa Rica. Veja abaixo o checklist de implementação das BPs do DWBP.
Data prevista
Observações
2018
Está previsto para 2018.
2018
Está previsto para 2018.
iMasters #24 Novembro 2017
52 // POR DENTRO DO W3C
BP15 Reuse vocabularies, preferably standardized ones
Sim
BP16 Choose the right formalization level
Parcial
BP17 Provide bulk download
Sim
BP18 Provide Subsets for Large Datasets
Parcial
2018
BP19 Use content negotiation for serving data available in multiple formats
Não
2018
BP20 Provide real-time access
Não
BP21 Provide data up to date
Sim
BP22 Provide an explanation for data that is not available
Não
BP23 Make data available through an API
Não
2018
BP24 Use Web Standards as the foundation of APIs
Não
2018
BP25 Provide complete documentation for your API
Não
2018
BP26 Avoid Breaking Changes to Your API
Não
2018
BP27 Preserve identifiers
Parcial
BP28 Assess dataset coverage
Sim
BP29 Gather feedback from data consumers
Sim
BP30 Make feedback available
Não
BP31 Enrich data by generating new data
Não
BP32 Provide Complementary Presentations
Sim
BP33 Provide Feedback to the Original Publisher
Não
Ainda não se utilizam os dados.
BP34 Follow Licensing Terms
Não
Ainda não se utilizam os dados.
BP35 Cite the Original Publication
Não
Ainda não se utilizam os dados.
iMasters #24 Novembro 2017
2018
Nem em todos os casos se identifica uma ontologia específica para o conjunto de datos.
Nem em todos os casos se identifica uma ontologia específica para o conjunto de datos. Porque não tem dados em tempo real. Se existissem, essa BP poderia ser implementada.
Não há caso ainda.
Os conjuntos de dados se mantêm, mas a BP ainda não foi colocada em prática.
// 53
Verifica-se que todas as boas práticas relacionadas a metadados foram aplicadas integralmente. Além disso, aplicaram as BPs de licença, proveniência, qualidade de dados, versionamento, formatos, vocabulários e preservação dos dados. Algumas de identificadores e acesso aos dados foram aplicadas parcialmente, e outras desse grupo não serão implementadas. Das boas práticas de enriquecimento de dados, apenas a BP 31 “Enriquecer dados por meio da geração de novos dados” foi implementada. Já a de Feedback e as de Republicação não foram implementadas. Atualmente, o processo de implementação das BPs pelo Judiciário da Costa Rica continua com a constante solicitação dos conjuntos de dados, a análise das fontes de dados, assim como a coleta, a limpeza e a verificação daqueles dados. Ainda há dificuldade no processamento dos dados estruturados, no processo de criação dos dados e nos obstáculos para colocar em prática a normativa para publicação de dados abertos. Além disso, é de interesse do Governo da Costa Rica e da sociedade civil que as boas práticas de publicação de dados na Web sejam implementadas em mais instituições, incluindo municípios, com o apoio da Fundação The Trust for the Americas. Desde 2012, a Costa Rica já trabalhava com a temática de Dados Abertos. Na ocasião, eles participaram de um curso organizado pelo escritório do W3C Brasil por meio do projeto OD4D, e consultoria feita pela professora Bernadette Farias Lóscio. No entanto, a aplicação das Boas Práticas para Dados na Web é um grande avanço na disponibilização de dados abertos governamentais.
Caroline Burle é responsável pelas Relações Institucionais do Centro de Estudos sobre Tecnologias Web (Ceweb.br) e do W3C Brasil. É especialista em Negociação pela Fundação Getúlio Vargas e Mestre em Relações Internacionais pelo San Tiago Dantas. É integrante do Núcleo de Estudos e Análises Internacionais e Fellow do Programa da OEA de Governo Aberto nas Américas. É uma das editoras do documento do W3C Data on the Web Best Practices. Pesquisa sobre governo aberto, relações internacionais e política externa, com experiência na atuação de governos subnacionais, na área de Web, dados abertos e governança da Internet.
cburle@nic.br
Maikol Porras Morales é Presidente da Associação Ciudadana de Estudos para a Sociedade Abierta (ACCESA) e consultor em políticas e projetos em governo aberto, dados abertos, fortalecimento da sociedade civil, inovação tecnológica. Bacharel em administração pública na Universidade da Costa Rica. É Fellow do Programa da OEA de Governo Aberto nas Américas.
maikol.porras@accesa.org
iMasters #24 Novembro 2017
54 //
DROPS DO MERCADO GRUPO IMPACTA LANÇA PLANO DE ASSINATURA EAD PARA TREINAR EMPRESAS
DIALHOST TRAZ NOVAS VERSÕES DE AUTOINSTALADORES DE E-COMMERCE EM EU PAINEL DE HOSPEDAGEM No mês de junho a DialHost lançou funcionalidade de auto instalação para seus planos de hospedagem compartilhada. Mas ela não parou por aí. Com o intuito de facilitar e melhorar a configuração das plataformas de e-commerce para os desenvolvedores, a empresa lançou novos pacotes de atualizações com instaladores do PrestaShop 1.7, Magento 2.1 e OpenCart 3.0. Alinhada com seu posicionamento de trazer atendimento simples e eficiente. A proposta destas atualizações é que os clientes de hospedagem percam menos tempo com as configurações padrões destes sistemas e consigam focar mais em evoluir seus projetos.
iMasters #24 Novembro 2017
Uma das maiores dificuldades de empresas que precisam capacitar suas equipes em novas tecnologias ou programas é a de encaixar esses treinamentos na rotina do colaborador e da companhia. Afinal, nem sempre é possível parar toda uma operação para treinar a sua equipe. Para resolver isso, o Grupo Impacta criou o Plano de Assinatura EAD para o mundo corporativo. A empresa assina o plano mais adequado, ou personalizado para suas necessidades, e disponibiliza cursos online com a qualidade Impacta para capacitar seus times e profissionais. E o melhor, tudo de onde e quando você quiser! O responsável da empresa ainda acompanha a evolução do aprendizado através da plataforma LMS, podendo ver como cada colaborador está se saindo. No Plano de Assinatura EAD já estão disponíveis mais de 80 treinamentos online em áreas como design, desenvolvimento, TI, gestão e marketing digital. Acesse o site da Impacta e conheça os planos!
56 // LINGUAGEM
COMO FAZER PARA APRENDER NOVAS LINGUAGENS? A CARREIRA de desenvolvimento de software é complicada. Tanto em saber como começar ou como continuar crescendo. E uma das dúvidas mais frequentes, tanto de novatos quanto de profissionais experientes, é sobre qual linguagem ou plataforma escolher. A motivação para essa questão é que quem faz faculdade ou tem um emprego se encontra na posição de ter “pouco tempo” para aprender alguma coisa nova. E quando você é continuamente bombardeado com coisas novas, fica com a sensação de que está ficando para trás. E a ansiedade só aumenta à medida que você fica paralisado escolhendo o que aprender agora. Antes de mais nada, respire fundo. O maior problema não é o que escolher. O problema é dar o primeiro passo. A grande maioria que passou por uma educação iMasters #24 Novembro 2017
formal e depois entra num emprego fica com a impressão de que a faculdade já deveria ter ensinado o que precisava e que qualquer coisa nova que o empregador precise é responsabilidade da empresa pagar o treinamento. Errado. Esse modelo ficou para trás. Desenvolvimento de software é uma carreira que sempre esteve em constante evolução e vai continuar sendo assim pelas próximas décadas. Durante sua carreira, você verá dezenas de linguagens, plataformas e produtos nascendo e morrendo. E muito do que você aprender nesse caminho vai se tornar obsoleto antes de você se aposentar. Portanto, você precisa se manter em constante movimento. E o único responsável pela sua própria evolução é você mesmo. Isso dito, ainda fica a questão: “mas onde vou arranjar tempo
para aprender tanta coisa?”. Você não vai. É impossível aprender tudo sobre tudo. Quando alguma coisa é impossível, você não desiste nem fica parado. Você muda a estratégica. Então reformule. Não imagine tentar aprender 100% de alguma coisa. Coloque como meta aprender 10% ou 5% de tudo que for novo. É para isso que servem os inúmeros blogs de tutoriais, screencasts ou cursos online disponíveis hoje. Não pegue um tema e ache que você precisa ler os livros de capa a
Ilustração: shutterstock - whiteMocca
Por Fabio Akita Co-fundador da Codeminer 42
// 57
capa. Em vez disso, familiarize-se com tudo. Quando achar um tema que chame sua atenção, seja por gosto pessoal, seja por que entendeu que pode ajudar no seu dia a dia, então aprofunde-se. Esse é o caminho para otimizar seu tempo, mas não fique parado, o importante é tornar isso uma rotina. Todo dia aprendendo algo novo, fora do que você usa no dia a dia. Embora toda linguagem sirva para fazer basicamente tudo que outras linguagens fazem, elas normalmente têm alguns
casos de uso principais, nos quais mostram melhor suas forças. Por exemplo, embora seja possível fazer um website com C++ puro (em vez de PHP ou Ruby), acho que ninguém faria isso no dia a dia. Isso dito, vamos entender alguns casos especiais das novas linguagens que apareceram nos últimos anos para ter um pequeno contexto desses casos de uso. Rust – foi criado e é mantido pela Mozilla (mesma do Firefox). É uma linguagem que se aproxima
mais do metal (o que costumamos chamar de “baixo-nível”). Não chega a ser um C, mas está próximo de um C++. Idealmente, você poderia usá-lo para criar bibliotecas que precisam de performance de execução e gerenciamento fino de memória sem comprometer a segurança. Quanto mais uma linguagem gerencia automaticamente a memória, teoricamente tem mais meios de apertar a segurança; por outro lado, no geral, precisa consumir mais memória total e pode ter períodos de pausa para fazer a iMasters #24 Novembro 2017
58 // LINGUAGEM limpeza. São aspectos inadequados para bibliotecas de sistemas ou programas que precisam rodar em baixo-nível. Por isso uma linguagem como Rust pode ser uma boa alternativa nesses casos.
Elixir – é uma nova linguagem sobre uma antiga, o Erlang. A sintaxe de Erlang é derivada de Prolog e, para a maioria de nós, parecerá muito exótica. Mas Elixir “moderniza” essa sintaxe e cria uma biblioteca padrão mais rica e mais parecida com o que estamos acostumados em Ruby ou Python. Enquanto linguagens como Go trazem uma pequena infraestrutura para executar milhares de pequenas tarefas em paralelo, há muito pouco controle. Erlang/Elixir, ao contrário, é como se fosse um pequeno “sistema operacional” a mais do que só uma linguagem. Somente conseguir ter concorrência (como Go) não é suficiente se você não conseguir controlar essa concorrência. Esse controle não é simples e não é triiMasters #24 Novembro 2017
Ilustração: shutterstock - whiteMocca
Go – foi criado e é mantido pelo Google, inicialmente pensado para aumentar a produtividade do desenvolvimento de seus próprios sistemas em vez de usar Java ou C++. Em termos simples, é uma linguagem para aplicações. Ele encontrou seu “killer-app” no ecossistema Docker e devops. Muitas novas ferramentas de linha de comando, daemons, estão sendo feitos em Go. Se você já programou em Java, C++, C# ou similares, a sintaxe de Go não vai ser tão mais complicada, e seu chamariz é ter um garbage collector para facilitar o gerenciamento de memória e executar tarefas em paralelo (as famosas `gofunc`). No geral, ele é mais “pesado” em uso de recursos do que Rust, por exemplo.
// 59 vial. Seu caso de uso principal são sistemas altamente distribuídos que querem atingir máximo grau de confiabilidade (um erro, um bug não corrompe o sistema e não exige reiniciar tudo). Se você planeja algo como um novo WhatsApp, Waze, Discord, ou mesmo criar coisas como um banco de dados distribuído (por exemplo, Riak), essa é a melhor escolha. Clojure – tem parte do seu apelo em ter primitivas de concorrência como Go, permite atingir níveis de confiabilidade como Erlang/Elixir, mas exige que você abandone paradigmas de sintaxe derivadas de C++ (Java, C#, Go, mesmo Elixir) e debruce totalmente em sintaxe derivada de Lisp. Portanto, você precisa gostar de programar com muitos parênteses. Ele não chega a ser “puramente” funcional como Haskell, mas é o mais próximo que você vai chegar do Haskell, com a vantagem de integrar com o ecossistema existente de Java. No Brasil, o principal case é o Nubank, que usa Clojure e Clojurescript (que compila em JavaScript) ostensivamente. Scala – é outra nova linguagem que visa a substituir a sintaxe clássica de Java, mantendo a compatibilidade com o bytecode Java (para ter acesso ao ecossistema) e ir um pouco além. Ele tem uma origem mais “acadêmica”, e isso aparece no ecossistema e na evolução da linguagem. Até hoje, ele não tem compatibilidade binária entre versões diferentes de Scala. Isso porque ele cria bytecodes extras que não existem no Java (para coisas que ele quer ter como “traits”, que funcionam meio como interfaces). Ele não é tão novo assim, tendo aparecido em 2004, e a principal novidade foi ter trazido a infraestrutura de
“Actors” (como no framework Akka), que é derivado da infraestrutura que Erlang oferece. Portanto, ele é muito bom para casos parecidos do Elixir. Kotlin – também não é novo, tendo sido criado pela JetBrains (que faz a famosa IDE IntelliJ, que também vem gratuitamente como Android Studio no SDK do Android). Atualmente, seu foco tem sido mais para ser um Java mais moderno que compila para o mesmo bytecode. Diferente de Clojure ou Scala, ele tem “zero” overhead. Uma classe Kotlin é um-para-um uma classe de Java, e você pode misturar código-fonte em Kotlin e Java no mesmo projeto, o que garante uma migração bem mais suave. Sua sintaxe é muito mais moderna e mais prazerosa de desenvolver no dia a dia do que Java clássico. Elm – é uma das linguagens da enorme família de “transpilers” para JavaScript. Linguagens como Elm mudam completamente o paradigma de programação (no caso, indo para uma linha mais “Haskell” puramente funcional) e também oferecem uma plataforma completa (em vez de você escolher quais bibliotecas/frameworks usar). Ele é feito especificamente para desenvolver front-ends Web com código-fonte mais confiável, mais estruturado, seguindo as mesmas convenções para aplicações web ricas e performáticas. É uma excelente opção, mas representa um nicho, e você não tem a opção de entrar aos poucos: é meio “tudo ou nada”. Swift – é obrigatório se você quer desenvolver aplicações nativas para iOS. Ele representa a culminação de uma tecnologia chamada LLVM (também utilizada por Rust e Kotlin). LLVM, de forma simplificada, é um framework
para compiladores que separa a compilação de diversas linguagens numa linguagem intermediária única que pode gerar binários para diferentes arquiteturas (ARM, Intel, e até mesmo outras linguagens como JavaScript com emscripten). Sendo Swift e Objective-C compilados usando LLVM e gerando binários compatíveis, isso garante que você possa misturar as duas linguagens e obter um binário que rode em Macs, iPhones e iPads. Existem ainda diversas outras novas linguagens. No mundo .NET, por exemplo, você pode ir além de C# e escolher F#. Cada uma das linguagens acima representa todo um ecossistema de ferramentas, bibliotecas e serviços. Mas o importante é que você não precisa escolher apenas uma e ignorar as outras. Você pode – e deve – estudar o máximo possível. Mas comece pequeno, um screencast de cada uma. Saiba configurar o ambiente de desenvolvimento de cada uma. Compile binários, faça deploys em produção. Comece a se sentir confortável com o ambiente de cada uma. Só então comece a ir mais fundo em conceitos e técnicas mais avançadas.
Fabio Akita é cofundador da boutique de software Codeminer 42. Desde 2008, também foi co-organizador da Rubyconf Brasil junto com a Locaweb. Ativista de Ruby on Rails desde 2006, publicou o primeiro livro do assunto. Já realizou quase 200 palestras pelo Brasil e pelo mundo. Trabalha como programador desde o começo dos anos 90 e passou por todas as principais tecnologias do mercado nesse período. Publica artigos no blog akitaonrails.com desde 2006.
fabio.akita@codeminer42.com
iMasters #24 Novembro 2017
60 //
DROPS DO MERCADO MAIS ECONOMIA E SEGURANÇA NA HOSPEDAGEM DE SITE
Agora os desenvolvedores podem contratar o mesmo ambiente estável e seguro utilizado por grandes companhias. A Embratel está oferecendo a esse público um serviço de hospedagem mais econômico, seguro e confiável. A oferta conta com três opções de planos de hospedagem (pessoal, profissional e empresarial), sendo que o mais básico sai por apenas R$ 19,90 por mês, com 20 GB de espaço na web. Os serviços são compatíveis com as principais linguagens de programação como HTML, PHP e ASP. As plataformas também suportam os bancos de dados mais utilizados como SQL Server e MySQL. O desenvolvedor tem acesso à ferramenta Painel de Controle para administrar seu ambiente. Soluções para realizar a manutenção de um site e aplicativos para gerenciar arquivos e configuração de segurança estão disponíveis. A plataforma permite ainda personalização com a criação de contas de e-mail com domínio próprio e compatíveis com diversos protocolos.
CONCRETE É UMA EMPRESA DA ACCENTURE Concrete inicia agora uma nova fase: a empresa agora é parte da Accenture, líder global em consultoria, serviços e tecnologia para o mundo digital. A Concrete está há 16 anos no mercado e se especializou na utilização de Lean e Agile para a criação de soluções móveis e aplicativos web baseados em cloud computing. Hoje, a empresa conta com mais de 450 funcionários em São Paulo, Rio de Janeiro e Belo Horizonte. “Desde a sua criação, a Concrete oferece soluções e serviços inovadores concentrados na experiência digital para algumas das empresas mais relevantes do mercado”, afirma Ansano Baccelli, líder da Accenture Technology no Brasil e América Latina. “Seu domínio no desenvolvimento de aplicativos usando Agile e DevOps expande nossa capacidade de oferecer tecnologias de ponta”. Com a união das competências das duas empresas, os clientes terão acesso a soluções de negócios ainda mais inovadoras, com impacto muito positivo em seus resultados.
iMasters #24 Novembro 2017
CIELO INAUGURA PROGRAMA DE RELACIONAMENTO COM DESENVOLVEDORES A Cielo, empresa de tecnologia e serviços para o varejo, líder em pagamentos eletrônicos na América Latina, promoveu em agosto o primeiro de uma série de encontros para estreitar seu relacionamento com a comunidade de desenvolvedores de todo o Brasil. No evento, os desenvolvedores puderam tirar dúvidas sobre integrações e parcerias com a Cielo. O objetivo é tornar a iniciativa recorrente e fornecer conhecimento sobre as plataformas abertas da companhia, com destaque para a Cielo Store, loja de aplicativos pagos e gratuitos para a Cielo LIO. “Esse ambiente de parceria promove networking, estreita o relacionamento com a Cielo e permite ao desenvolvedor acompanhar as nossas novidades para esse ecossistema”, explica Diego Feldberg, diretor de Produtos Digitais da Cielo. Por meio de suas plataformas abertas, a Cielo possibilita que os desenvolvedores façam uso da capilaridade da empresa, suficiente para dar distribuição e escala a suas criações. Fique de olho nos canais da Cielo para informações sobre os próximos encontros.
HOSPEDAGEM DE SITES GRÁTIS PARA COMUNIDADES E ONGS A KingHost está selecionando projetos ligados ao bemestar social e ao desenvolvimento tecnológico para hospedar nos seus servidores gratuitamente durante um ano. As comunidades e ONGs selecionadas terão apoio prático e institucional da empresa às suas causas. Quem participa de grupos ou instituições que precisam de um site para aumentar o alcance da sua voz pode candidatar seu projeto no site: http://kingho.st/apoio-comunidades. O produto oferecido é a Hospedagem II, que conta com 512 MB de memória, 15 GB de espaço para seus sites, contas ilimitadas de e-mail e bancos MySQL ilimitados. Além dessas características, a hospedagem inclui um criador de site intuitivo que pode auxiliar quem ainda não criou um site para transmitir a sua mensagem, mas precisa dar força a ela. A cada mês um novo projeto será abraçado pela empresa e poderá contar com o benefício por doze meses, com possibilidade de renovação do auxílio após esse período.
62 // CÓDIGO ABERTO
Aplicações em Go Por Kemel Zaidan, Gerente de Desenvolvimento na Nuveo
J
JÁ FAZ QUASE 10 ANOS desde que o Google lançou a linguagem de programação Go em outubro de 2009. Porém, foi apenas nos últimos dois ou três anos que ela tem ganhado enorme popularidade e crescido consideravelmente. Abaixo, podemos ver algumas aplicações que são escritas utilizando essa tecnologia, que tem como principais características a tipagem estática, a performance concorrente e o fato de ser compilada. Goby: trata-se de uma nova linguagem de programação dinâmica, cuja sintaxe é fortemente inspirada no Ruby, apesar de ser implementada em Go. Embora esteja em estágio bastante inicial de desenvolvimento, o objetivo dos autores é a criação de microsserviços de forma simples e a interoperabilidade com bibliotecas e código escrito em Go. https://github.com/goby-lang/goby Streamlist: o que fazer com aquela sua enorme coleção de MP3 acumulada ao longo dos anos? Com este programa, você pode ter acesso a ela de qualquer lugar do mundo. O Streamlist é um servidor de streaming de música que você pode rodar em sua própria máquina para compartilhar as suas músicas e ouvi-las de onde estiver. https://github.com/streamlist/streamlist Restic: backup é sempre um item importante em qualquer sistema de informações. Por isso mesmo, o fato de o Go gerar um bi-
iMasters #24 Novembro 2017
nário único ajuda bastante a descomplicar a tarefa de instalar e usar o programa que pode salvar as suas cópias de segurança remotamente utilizando diversas alternativas, como sftp, AWS S3, OpenStack Swift, BackBlaze B2, Azure Blob Storage, Google Cloud Storage e rest-server. https://github.com/restic/restic pRest: baseado no PostgREST que, por sua vez, é escrito em Haskell, o pRest é um projeto brasileiro cujo software é capaz de criar uma API RESTfull completa a partir de um banco de dados PostgreSQL existente, o que torna fácil a extração e a inserção de dados nesse SGBD. https://github.com/prest/prest Terraform: muitos profissionais de devops já conhecem esta versátil ferramenta. Com ela, é possível criar, modificar e versionar infraestrutura em inúmeros provedores de cloud. Simples de usar e muito poderosa, é extensível através de plugins que podem dar acesso a diferentes serviços e soluções, mesmo aqueles criados para uso restrito ou interno. Kemel Zaidan é um pseudo-programador, metido a jornalista, com alma deartista e Gerente de Desenvolvimento na Nuveo.
kemelzaidan@ gmail.com
// 63
64 // INTELIGÊNCIA NADA ARTIFICIAL
APLICAÇÕES PRÁTICAS DE INTELIGÊNCIA ARTIFICIAL EM GAMES Por Alex Lattaro, Analista de sistemas
Menu inicial Primeiro, temos que ter em mente a seguinte ideia: o objetivo da IA que venho apresentando em minha coluna (IA acadêmica) é diferente da IA apresentada nos games (Game AI). A principal diferença entre essas IAs é justamente o seu objetivo. A acadêmica tem como objetivo resolver algum problema complexo, como copiar algum tipo de comportamento humano. No caso da IA aplicada aos games, o objetivo é puramente lúdico. Aqui, não importa como o sistema “pensa”, o que importa é como o sistema age. O campo de aplicação da IA nos games é um tanto quanto confuso, na verdade. Alguns acreditam que a interação do jogo com o usuário é um tipo de IA; por outro lado, existem desenvolvedores que acreditam que algoritmos de ações como colisão e movimentos são considerados IA. Mas essa é uma discussão em iMasters #24 Novembro 2017
cujo mérito não vamos entrar, pois ela é mais abrangente do que o espaço que tenho para esta coluna. Stage 1- Utilização e evolução O primeiro jogo eletrônico interativo construído foi desenvolvido por um estudante do MIT chamado Steve Russel, em 1961. Esse jogo se chamava Spacewar, no qual duas pessoas controlavam uma nave cada uma e tinham que combater entre si. De 1961 para cá, são muitos anos, e não vou passar por essa história como um todo, embora ela seja bem interessante. O intuito era apenas esclarecer onde tudo se iniciou.
Para termos a ideia de como a IA foi sendo utilizada em alguns jogos de lá para cá, vamos dar uma olhada na tabela abaixo.
Imagens: Divulgação.
NESTA COLUNA, meu intuito é sempre explicar o funcionamento de algum algoritmo de inteligência artificial. Juntamente com a explicação, eu apresento alguns exemplos práticos de aplicação, mas confesso que, por mais práticos e aplicáveis que sejam, às vezes eles estão um pouco longe do nosso cotidiano. Sendo assim, nesta edição, eu gostaria de apresentar algumas aplicações práticas e mais palpáveis desses algoritmos. E de quebra vou falar de algo pelo qual eu realmente tenho paixão: games!
// 65
Ano
Descrição
IA
1961
Spacewar
Nenhuma
1972
Pong
Nenhuma
1974
Pursuit
Padrões de movimento
1975
Gun Fight
Padrões de movimento
1978
Space Invaders
Padrões de movimento
1980
Pac-man
Padrões de movimento
1990
Herzog Wei
Máquina de estados
1993
Doom
Máquina de estados
1996
BattleCuiser: 3000AD
Redes Neurais
2001
Black & White
Redes Neurais /reinfocmente/ observation learning/ Árvores de decisão
∏ Linha do tempo da IA em jogos, fonte: SCHWAB, 2004
Óbvio que essa tabela está defasada em relação aos dias atuais, porém ela é didática para mostrar a evolução através do tempo. A tabela seguinte é divi-
dida em IA utilizada e jogos em que foi aplicada, trazendo alguns exemplos mais próximos da nossa contemporaneidade.
IA
Jogo
Máquinas de estado finito
Age of Empires, Half Life, Doom, Quake
Scripting
Black & White, Unreal, Dark Reign, Baldur´s Gate
Fuzzy
Swat 2, Call to Power, Close Combat, Petz, The Sims
Flocking
Half Life, Unreal, Enemy Nationsi
Flocking
Black & White
Árvores de decisão
Padrões de movimento
Redes Neurais
Black & White, BC3K, Creatures, Heavy Gear
Algoritmos Evolutivos
Cloack, Dagger & DNA, Creatures, Return to Fire II
iMasters #24 Novembro 2017
66 // INTELIGÊNCIA NADA ARTIFICIAL
ações programáveis manualmente - leia-se if-then-else. Essa lógica permite criar regras em cima de condições imprecisas. Basicamente, a fuzzy é uma lógica baseada no princípio da incerteza. Outro tipo de algoritmo de extrema importância são os algoritmos de busca. Eles são responsáveis pela fluidez dos personagens dentro do jogo. Imagine que você está em um jogo em que os seus oponentes passam por você e não te enxergam, ou são incapazes de desviar de obstáculos. Isso além de tornar o jogo burro, o torna bem chato, dada a facilidade que ele propõe. Em games, temos alguns algoritmos de busca utilizados. O mais comum é o A*, mas muito se vê a aplicação do Dijkstra (você achou que este só servia para passar na faculdade, não é?) e waypoints. Outro algoritmo que já vimos nesta coluna são os algoritmos genéticos (AG). Nos jogos, esse tipo de algoritmo pode ser utilizado para o desenvolvimento de populações - se você está em uma cidade virtual, como no GTA. Os pedestres, motoristas etc.
Imagens: Divulgação.
Stage 2 - Algoritmos de IA e suas aplicações Um dos primeiros algoritmos utilizados foram os determinísticos e padrões de movimentos. São basicamente algoritmos que permitem ao sistema aplicar uma ideia de perseguição, evasão ou aleatoriedade de movimento de uma entidade. Em seguida, tivemos a utilização das máquinas de estado. A máquina finita define os estados em que um personagem está e quando ele deve mudar, assim como qual o comportamento esperado para cada estado. Esse é um algoritmo bem simples, de fácil implementação e depuração. Um exemplo clássico é sua utilização no jogo Pac Man, no qual o estado define o comportamento padrão dos fantasmas conforme o estado é alterado pelas ações do jogador. Por outro lado, temos também a lógica fuzzy que, como o próprio nome indica, é um tanto quanto confusa de se entender. Entretanto, ela é bastante utilizada nas próprias máquinas de estado. Aplicando-se a fuzzy nessas máquinas, é possível diminuir o número de
iMasters #24 Novembro 2017
// 67
não são personagens fixos. Caso contrário, existiria um momento do jogo em que só o seu personagem perambularia pela cidade (eu sei que você sai dando tiro em todo mundo quando está entediado). Então, como a população da cidade é revitalizada? Um DNA virtual é criado, e ele é representado por um vetor de valores no qual cada valor é um parâmetro da espécie a ser modelada. Outra utilização dos AGs é a evolução dos personagens. Como vimos em edições anteriores da revista, o AG é responsável pela mutação e consequentemente, mas não obrigatoriamente, pela evolução. As redes neurais são utilizadas quando o sistema precisa aprender a interagir com o jogador de maneira inteligente. Aqui, começamos a falar de uma IA acadêmica sendo implementada em um jogo. A ideia das redes neurais é fazer com que o sistema possa imitar o pensamento do humano e, assim, tornar o jogo mais desafiador, dado que o jogo passa de um patamar passivo para um patamar ativo, no qual ele aprende sobre o usuário. Outro algoritmo capaz de mudar o comportamento de um NPC (Non Player Character) são os scripts ou extensible AI. Esse algoritmo faz com que cada NPC mude seu comportamento de acordo com o comportamento do usuário atual - é basicamente como um sistema de regras.
Boss Nas edições anteriores, nós vimos como é desenvolvido um algoritmo de IA, como os problemas são matematicamente modelados. Vimos também que os algoritmos surgem da observação de comportamentos biológicos, e vimos que toda essa observação é modelada matematicamente por meio de cálculos integrais e teorias de grafos. Mas eu acredito que ainda faltava alguma coisa para desenvolvermos um pouco mais de paixão pela IA, e aqui pudemos ver a IA de uma maneira um pouco mais divertida - sem muitos cálculos integrais, treinamentos, camadas etc. Afinal, se você não é matemático, muitas dessas coisas acabam não sendo muito divertidas, e o único objetivo dos games foi e sempre será a diversão! E aí, bora jogar um Fifa?
Alex Lattaro é formado em Análise e Desenvolvimento de Sistemas pelo IFSP. É desenvolvedor júnior de jogos, estuda e tem grande interesse nas áreas: Interação Humano Computador, Inteligência Artificial e Design. Também é músico, apaixonado por música, física, anime, séries e filmes.
alex.lattaro@gmail.com
iMasters #24 Novembro 2017
68 //
COMUNIDADES
Por dentro da Comunidade DevMT A DEVMT surgiu após a realização da primeira edição do FrontIn Cuiabá, em 2015. O evento foi organizado pelos desenvolvedores da região que tinham participado das edições de outros estados. Para o espanto da organização, o evento contou com um número expressivo de participantes (até mesmo do interior do estado). E foi assim que nasceu a vontade de alguns participantes de continuarem interagindo e de realizarem encontros para continuarem com a atmosfera de troca de conhecimentos, que aconteceu durante o evento. O principal objetivo era realizar encontros para compartilhar conhecimento na área de tecnologia, principalmente com assuntos mais técnicos sobre desenvolvimento. Mas também já foram abordados temas acerca de outras áreas, como qualidade de software, testes automatizados, machine learning, Internet das Coisas... A comunidade também sempre apoia eventos acadêmicos, levando conteúdo para quem está apenas começando na área. Entre as atividades da comunidade está o “DevBeers”, quando os participantes se reúnem para bater papo e se conhecer. Os meetups e os coding
iMasters #24 Novembro 2017
dojos (quando os participantes se reúnem para resolver um problema usando programação) acontecem com maior frequência. E eles já organizaram eventos maiores, como o Google I/O Extended 2017 e o Hackathon GovHack 2016. A ideia é que os encontros sejam mensais, com periodicidade de um por mês. “Mas já teve meses em que ocorreram uns três”, informou Felipe Fontana, um dos fundadores da comunidade. Uma das peculiaridades da DevMT é que nela não existe exigência de formação. Qualquer pessoa com vontade de compartilhar e adquirir conhecimento é bem-vinda: aluno, profissional, entusiasta da área... Como a maior parte dos eventos é feita por e para membros da comunidade DevMT, a maioria deles não é cobrada, contando com parcerias para utilização de espaço, como universidades, empresas, órgãos públicos. Os eventos cobrados são aqueles que necessitam de uma infraestrutura maior, palestrantes de outras cidades etc. Sempre ocorre a colaboração da comunidade com lanchinhos e bebidas para acompanhar as atividades.
Imagens: Divulgação.
Por Rodrigo Pokemão, Community Manager no iMasters
// 69
Para manter a curiosidade viva, os participantes estão sempre em contato com outras comunidades do Brasil e já levaram palestrantes de outros estados para seus eventos por conta desse tipo de parceria. “Já tivemos pessoas de Recife, Maceió, São Paulo e Campinas aqui na nossa região para trazer esse conteúdo e experiência para a galera local”, contou Fontana. “É de suma importância as comunidades se unirem, até porque, independentemente da região, todos geralmente temos os mesmo problemas e desafios, por exemplo, como engajar a comunidade? Como nos comunicar melhor com os participantes? Quais assuntos que a galera mais busca atualmente? Essa troca de experiência com outras comunidades no ajuda a sempre nos manter de pé na tarefa de levar conteúdo de qualidade e motivar a comunidade local a continuar participando”. O DevMT proporciona a troca de conhecimento, o networking entre profissionais e estudantes da região, fomentando a inovação em tecnologia em todo o estado, tendo muitas ações sendo realizadas até mesmo no interior.
iMasters #24 Novembro 2017
O 7Masters é nosso encontro mensal de especialistas. Toda última quarta-feira do mês, reunimos 7 mestres de um determinado tema que, durante 7 minutos, expõem para os participantes sua experiência e vivência com o assunto da vez. Os temas são definidos pela equipe de conteúdo do iMasters, liderada pelo Alex Lattaro. Se quiser dar alguma sugestão, escreva para setemasters@imasters.com.br. Confira o que rolou nas edições passadas e quais ainda estão por vir em setemasters.imasters.com.br.
As edições de maio, junho e julho superaram as expectativas de público, de debate e de nível dos nossos mestres. Não quer perder o próximo? Fique atento à nossa agenda e se inscreva: setemasters.imasters.com.br. Confira o que aconteceu:
Spring Felipe Adorno é engenheiro de software na Monkey Exchange, onde trabalha fortemente com Spring Cloud e possui mais de 10 anos de experiência no mundo da tecnologia. Neste 7Masters, ele fala de suas experiências com Spring Cloud Contract. https://goo.gl/v2CaMf
Breno de Oliveira é diretor de tecnologia da Estante Virtual e ganhador do prêmio White Camel 2012. Quando não está se divertindo escrevendo código aberto, pode ser encontrado jogando videogame. Neste vídeo, ele fala sobre Spring e Eureka Service Discovery. https://goo.gl/sKaYxR
iMasters #24 Novembro 2017
Alberto Souza é desenvolvedor, coordenador dos treinamentos da Caelum São Paulo e investe parte do seu tempo livre criando projetos pessoais, como o SetupMyProject.com. Neste 7Masters, ele fala de suas experiências com Spring Reactive. https://goo.gl/6RqMWe
Felipe Oliveira é desenvolvedor apaixonado com mais de 7 anos de experiência em diversas tecnologias aplicadas a sistemas financeiros e comércio eletrônico com foco em Java. Neste vídeo, ele fala sobre Telemetria de MicroServiços no 7Masters de spring. https://goo.gl/P3EPhJ
// 71
Reconhecimento óptico Claudio Filipi Gonçalves dos Santos é formado em Ciência da Computação pela UNESP e trabalha com Mobile desde 2007. Atualmente, é pesquisador pela UNESP. Em sua palestra, ele falou sobre reconhecimento óptico com Deep Learning. https://goo.gl/rvb8Dx
Em sua talk, Vitor Meriat, Cloud Architect na ESX, falou sobre o uso de reconhecimento óptico com Microsoft Cognitive Services. Ele demonstrou um pouco da ferramenta e do projeto em que trabalhou, relacionando reconhecimento óptico com a feature da Microsoft. https://goo.gl/WuhvfL
David Jonas é desenvolvedor web na Leroy Merlin e acredita em aprendizado contínuo. Em sua palestra no 7Masters, falou sobre a criação de bots usando processamento de imagem. David demonstrou como criou um bot para o game Rucoy Online. https://goo.gl/NwwkuU
Rodrigo PokemaoBr é programador PHP desde 2002 e evangelista PHPSP. Atualmente, é Community Manager no iMasters. Em sua palestra no 7Masters, falou sobre reconhecimento óptico e visão computacional com o uso da API Google Vision, que permite que desenvolvedores entendam o conteúdo de uma imagem ao encapsular modelos que utilizam machine learning. https://goo.gl/A4x1Jb
Gabriel Rodrigues, mais conhecido como Bob, é apaixonado por open source e Chefe de Arquitetura na Memed. Neste vídeo gravado no 7Masters, ele compartilha sua experiência com reconhecimento de objetos com HOG. https:// goo.gl/CRAoLB
Ravan Scafi é desenvolvedor backend na Leroy Merlin Brasil e começou a “brincar” com desenvolvimento 11 anos atrás. Neste 7Masters, ele fala de sua experiência com processamento de imagens no mundo da medicina. https://goo.gl/gNYS2m
iMasters #24 Novembro 2017
72 // 7MASTERS
Vue Testes unitários em apps Vue.js foi o tema da palestra de Caio Incau no 7Masters Vue. Ele explicou o que são os testes unitários e como eles funcionam em Vue. Caio trabalha como desenvolvedor de software desde os 18 anos, começou como full-stack, mas há dois anos foca exclusivamente em front-end. https://goo.gl/eVz7oH
Uma das palestras do 7Masters Veu trouxe como tema “Vue.js visto pela comunidade”. O palestrante foi Juscilan Moreto, que é desenvolvedor Full-Stack e trabalha na Accenture, utilizando tecnologias JavaScript components e Node.js. https://goo.gl/eFB7Pf
Luís Felipe Souza falou sobre tratamento de erros no Vue.js. Luís Felipe é desenvolvedor Front-end desde 2010, hoje trabalha na Magnetis utilizando Vue.js no dia-a-dia. https://goo.gl/deCbss
Victor Marques é desenvolvedor full-stack, especializado em Ruby on Rails e Vue.js. No 7Masters Vue, ele falou sobre arquitetura de componentes com Vue.js.https://goo.gl/vEzUCN
Igor Luiz Carneiro de Oliveira tratou sobre Nuxt.js. “Server side rendering com Vue. js” foi sua abordagem neste 7Masters. Igor é Full Stack Developer, apesar da criança interior ainda permanecer no Front-end. É um entusiasta de javascript, gosta de compartilhar o que sabe e contribuir com software livre. https://goo.gl/53sFEh
Fernando Guisso fechou o evento falando sobre VueX (o que é, como funciona e os benefícios de usá-lo). Fernando é fullstack em um projeto com Node e Vue. Também é membro do Garoa Hacker Clube. https://goo.gl/fsVVHN
Validações e Viewer com VeeValidate foi o tema da talk de Denisson Felipe Fernandes. Ele trabalha com desenvolvimento de softwares há 5 anos. https://goo.gl/5VjdKw
iMasters #24 Novembro 2017
DROPS DO MERCADO INTEGRAÇÃO PARA SOLUÇÕES DE PAGAMENTOS O curso EAD Gerencianet, que traz vídeoaulas com o objetivo de explicar melhor como integrar seu sistema ou aplicação à API, chegou a importante marca de mil alunos. O curso está disponível gratuitamente no Youtube e na plataforma Udemy e é composto por 20 vídeos com duração total estimada de 1h30. Entre os assuntos tratados, estão a API, instalação do Composer via Windows e Linux, exploração do Playground (sandbox), assinaturas (cobrança recorrente), marketplace e muito mais. A Gerencianet oferece SDKs em PHP, .NET, Node JS, Ruby, Phyton, Java e Delphi. O sistema também disponibiliza módulos prontos para diversas plataformas. O sistema possibilita a emissão de cobranças únicas ou recorrentes por boleto registrado sem tarifa de registro e cartão de crédito. As tarifas e prazos de disponibilização de saldo são personalizados. Para saber mais, acesse udemy.com/eadgerencianet.
LAMBDA3 RECEBE PRÊMIO DE DEVOPS PARTNER DA MICROSOFT A Lambda3 é uma consultoria de software que preza pela qualidade da entrega técnica que faz aos seus clientes. Nesse ano, a empresa foi premiada com o DevOps Partner Award na premiação Microsoft Partner Of The Year 2017, consolidando todo esforço dedicado à excelência técnica dos seus projetos, capacitação e qualificação dos times que compõem a equipe da Lambda3. Anualmente, a Microsoft organiza o Microsoft Partner Of The Year, um evento focado em reconhecer os principais parceiros que demonstraram excelência em inovação e implementação de soluções baseadas em suas tecnologias. Em 2017, foram 34 categorias que celebraram as principais competências das empresas parceiras em diversas categorias, com mais de 2800 indicações enviadas de 115 países. A Lambda3 tem o prazer de ser uma das empresas reconhecidas como parceira da Microsoft, pois isso reafirma o compromisso da equipe em fazer entregas de ponta-a-ponta que transformam negócios.
// 73
INTELIGÊNCIA ARTIFICIAL APLICADA AO PROCESSO DE PARTICIPAÇÃO SOCIAL A criação de um projeto de lei pode passar por um processo de participação social que envolve chamada para contribuições. Este processo resulta em bases de dados com milhares de comentários para serem analisados e posteriormente terem suas sugestões incorporadas ao projeto de lei. Percebendo esta demanda, o Ceweb.br (Centro de Estudos sobre Tecnologias Web do NIC.br) desenvolveu uma aplicação de análise de comentários em consultas públicas. A aplicação chamada Cooper (do inglês, Characterization and Outlining of Popular Participation for Enhancing Regulation), desenvolvida em conjunto com o InWeb, da UFMG (Universidade Federal de Minas Gerais), aplica técnicas de inteligência artificial, processamento de linguagem natural e visualização de dados para ajudar a equipe de analistas trabalhando no processo. A ferramenta está disponível em cooper.ceweb.br e pode ser utilizada tanto por grupos de usuários específicos, que desejam incluir uma base de dados nova, quanto por aqueles que desejam consultar o material disponível, como jornalistas e o público geral.
TAYLOR MADE, PORQUE SEU NEGÓCIO É ÚNICO Diariamente consomem-se produtos e serviços pensados em termos da maioria ou no máximo de alguns nichos, também majoritários. Mas e se você precisa de algo mais? Para responder esta pergunta, que a HostMídia criou planos personalizados de hospedagem! Por esta abordagem, você não vai mais precisar ajustar o seu negócio de acordo com os limites existentes. O conceito é simples! Você precisa um pouco mais de processamento para um site mais sofisticado? A programação da sua aplicação exige mais memória? A empresa cresceu e precisa mais contas de e-mail? As suas ações de Marketing estão trazendo mais visitas e consequentemente um tráfego maior? Para qualquer destas ou outras perguntas mais específicas, a HostMídia tem uma solução individualizada! Não limite mais sua participação na Web, porque as opções do mercado são sempre as mesmas. Fale com a HostMídia (https://www.hostmidia.com.br/contato/), informe suas necessidades e tenha um plano sob medida.
iMasters #24 Novembro 2017
74 //
POR AÍ “Tudo o que signifique ser um desenvolvedor para você, cabe aqui” Que os brasileiros têm feito muita coisa, a gente sabe. Mas quem está fazendo o quê e onde, nem sempre fica bem claro. A ideia aqui é que você apareça, com a sua equipe, sua turma, seus amigos, mostrando um trabalho, a participação num hackaton, palestra etc. Tudo o que signifique “ser um desenvolvedor” para você, cabe aqui! Quer participar? Envie uma foto e descrição para redacao@imasters.com.br
EMPRESAS BRASILEIRAS FECHAM U$S 18 MI NO BIG FESTIVAL Aconteceu em agosto a 5ª edição do BIG Festival, o maior evento de jogos independentes da América Latina. O evento é uma das ações do Brazilian Games Developers (BGD), projeto setorial que tem como parceiros a Agência Brasileira de Promoção de Exportações e Investimentos (Apex-Brasil) e a Associação Brasileira das Desenvolvedoras de Jogos Digitais (Abragames) e que busca fortalecer a indústria brasileira de jogos digitais. Nesta edição, foram gerados US$ 19.819.000 em negócios, sendo que US$ 719.000 foram finalizados durante o evento, e os outros US$ 17.3 milhões serão concretizados ao longo dos próximos 12 meses. No total foram contabilizadas 1681 reuniões, realizadas entre 273 empresas e 3200 profissionais participantes nas rodadas de negócios. Parte oficial do calendário de eventos da cidade de São Paulo, o BIG Festival acontece anualmente entre junho e julho, no Centro Cultural São Paulo, na capital paulista, com entrada franca.
iMasters #24 Novembro 2017
A PLATAFORMA OPENSTACK DO UOL HOST É TÃO INOVADORA QUE FEZ O REAL VALER MAIS A PENA QUE O DÓLAR. Pagamento em reais Sistema pré-pago com recarga automática Suporte técnico 24 horas em português
UOL HOST é pioneiro na implantação de nuvem pública em Openstack no Brasil. SAIBA MAIS EM:
UOLHOST.COM.BR/OPENSTACK OU LIGUE:
4003 5973
76 // POR DENTRO DO W3C
UM PROJETO PATROCINADO POR