Page 1

R$24,00 // FEVEREIRO 2018

// ANO 07

// EDIÇÃO 25 > B L O C K C H A I N

A revolução do blockchain conheça a história dessa tecnologia e como ela promete mudar o mundo

01

Comunidades

Senhoras e senhores, com vocês, a CaquiCoders!

02

Inteligência nada artificial

Veja como o machine learning pode ser aplicado à indústria 4

03

W3C

O que a nova recomendação do W3C traz de novidade para o desenvolvimento Web?


REALIZE SEU EVENTO AQUI! LOCALIZADO NO CORAÇÃO DE SÃO PAULO, O DEVELOPER & E-COMMERCE HUB É O LUGAR PERFEITO PARA A REALIZAÇÃO DO SEU EVENTO. São 3 espaços com design moderno e estrutura completa para eventos de todos os portes.

AUDITÓRIO

ROOFTOP

WORKSHOP

140 pessoas 20 mesas | 169m² equipamento áudio visual segurança | limpeza

INTERIOR | 30 pessoas | 66m² EXTERIOR | 200 pessoas | 110m² equipamento áudio visual cozinha | segurança | limpeza

69m² | 40 pessoas (escolar) | 60 pessoas (auditório) | equipamento áudio visual | segurança | café limpeza | auditório principal

Venha tomar um café com a gente e conheça nossos espaços..

Então, vamos conversar? hub@imasters.com.br

R. Oscar Freire, 2379 - Pinheiros - São Paulo - SP | Tel: 11 3063-5941 | 200m do Metrô Sumaré


EDITORIAL

Q

QUEM DIRIA... 25ª EDIÇÃO DA REVISTA IMASTERS. Quando a gente começou, lá em 2012, não imaginávamos que o tempo ia passar tão rápido e que, quando piscássemos, estaríamos aqui, 25 edições depois. Nesse tempo a gente já falou de muita coisa. Novidades, linguagens que nem existem mais, outras que foram chegando, tendências, práticas, novas tecnologias...O interessante desse mundo de desenvolvimento e TI é o quão ele é mutável; pois sempre tem mais coisa para se falar! Seja sobre novos assuntos, ou novas abordagens sobre assuntos já velhos conhecidos. E é o que tentamos fazer nessa edição. Governança de dados, DevOps, ASP .Net... Coisas que você, dev, já deve estar cansado de ouvir. Mas tentamos, com a ajuda de Danielle Monteiro, Lucas Santos, Gabriela Dias e Renato Haddad, respectivamente, trazer com uma nova roupagem, com um novo olhar. Albert Tanure fez uma introdução detalhada ao conceito de app center, a ferramenta que centraliza e auxilia na geração de builds automáticos, testes na nuvem e muito mais para que desenvolve aplicativos móveis. Henrique Leite, numa grata surpresa, complementou perfeitamente nossa matéria de capa sobre blockchain. Agora, o que não falta é material para você entender essa estrutura de dados que está tão em alta. Você vai conhecer também a CaquiCoders, a comunidade da região do Alto Tietê, em São Paulo. E na seção de entrevistas, temos Michelle Ribeiro falando sobre cybersegurança. Aproveite a leitura e se aventure, você também, a estar nas nossas páginas nas próximas edições. Vai ser uma grata parceria!

Abraços, Mariana Anselmo Editora da Revista iMasters www.imasters.com.br | redacao@imasters.com.br


4 // EXPEDIENTE

// FEVEREIRO 2018

// ANO 07

// EDIÇÃO 25 > B L O C K C H A I N

Tiago Baeta Publisher

CORPO EDITORIAL

Mariana Anselmo (MTB 0083858/SP) Jornalista Responsável Mariana Anselmo Editor

Mariana Anselmo Editor Nathália Torezani Revisão Diego Pinho Conteúdo

Nathália Torezani Revisão Albert Tanure, Alex Lattaro, Danielle Monteiro, Diego Pinho, Gabriela Dias, Henrique Leite, Kemel Zaidan, Lucas Santos, Rafael Sarres, Reinaldo Ferraz, Renato Haddad e Ricardo Ogliari Colaboradores Zupi Projeto Gráfico e Diagramação Eskenazi Indústria Gráfica Gráfica Grupo iMasters Organização

Reinaldo Silotto Conteúdo Rodrigo PokemãoBr Conteúdo 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

1.800 exemplares ISSN 1981-0288

dos autores e não refletem necessariamente a opinião da revista. É proibida a reprodução total ou parcial de textos, fotos e ilustrações por qualquer meio, sem prévia autorização dos autores ou dos editores da publicação.

www.zupidesign.com +55 11 3926 0174

iMasters #25 Fevereiro 2018


DROPS DO MERCADO

// 5

SDK EM GO PARA COBRANÇAS A Gerencianet disponibilizou uma nova SDK, desta vez em GO (linguagem criada pelo Google). A integração permite a emissão de boletos e carnês registrados sem a tarifa de registro e cobranças parceladas em até 12x no cartão de crédito. Para isso, não é necessário ser pessoa jurídica ou possuir negociação bancária. É utilizado OAuth para fornecer acesso autorizado à API, que é RESTful e responde em JSON. A SDK foi testada na versão 1.8 e está preparada para realizar a autenticação automaticamente. Além da linguagem GO, a Gerencianet ainda disponibiliza SDKs em outras linguagens, como PHP, .NET, Node. JS, Ruby, Python, Java e Delphi e módulos prontos para diversas plataformas, como Wordpress (Woocommerce), Magento, Prestashop, OpenCart, WHMCS e outros. Para conhecer a documentação completa, acesse gerencianet.com.br/api.

UOL HOST APRESENTA O WORDPRESS DEDICADO O UOL HOST, unidade de hospedagem, serviços web e cloud computing, traz o WordPress dedicado para empresas, desenvolvedores e agências. Você poderá criar e gerenciar sites em WordPress de forma fácil, com muito mais segurança e melhor desempenho. O UOL HOST oferece um ambiente seguro para testes e experimentações, gerenciamento em massa de instâncias do WordPress, modos de manutenção e depuração além de uma completa plataforma para revendedores. Com ele também é possível migrar facilmente o seu site e e-mails com segurança utilizando o Migration Manager, adicionar mais de 200 extensões e plug-ins e proteção 24 horas contra ataques de hackers com o ServerShield by CloudFlare, entre outras ferramentas. Acesse para mais informações: uolhost.com.br/wpdedicado

PLATAFORMA ABERTA ATENDE DIFERENTES DEMANDAS DO E-COMMERCE A API Cielo E-commerce, concebida pela Cielo com base nas premissas de conversão, segurança e integração, é uma plataforma modular que se adequa às diferentes necessidades dos lojistas. Entre suas funcionalidades estão a viabilização de pagamentos in-app ou a partir de dispositivos conectados da Internet das Coisas e integração entre as vendas no varejo físico e online, proporcionando uma experiência omnichannel. Outras possibilidades que a plataforma traz são a automatização de pagamentos recorrentes, a consulta de BINs, que identifica a bandeira do cartão, o tipo e a nacionalidade durante o preenchimento do número no checkout, tornando a experiência de compra muito mais rápida para o consumidor, e ainda gerenciamento de transações de forma objetiva: o lojista tem acesso no site da Cielo para configurar opções de pagamento e acompanhar vendas em tempo real. A Cielo ainda oferece suporte para que o lojista escolha as features mais adequadas às demandas do seu negócio e é líder em volume capturado no eCommerce Brasileiro.v

iMasters #25 Fevereiro 2018


6 //

SUMÁRIO COLUNAS 32

20

RicardoOgliari

Lucas Santos

MOBILIDADE É TUDO Evolução da persistência de dados para aplicativos móveis

48

Reinaldo Ferraz

W3C HTML 5.2 - O que a nova recomendação do W3C traz de novidade para o desenvolvimento Web?

DEVOPS

CI com microsserviços

12

Albert Tanure APP CENTER

Uma breve introdução ao App Center

Governança de dados e bancos de dados NoSQL

Alex Lattaro

INTELIGÊNCIA NADA ARTIFICIAL Machine Learning aplicado à indústria 4.0

ENTREVISTA

68

8

CÓDIGO ABERTO 5 bibliotecas JS para conhecer em 2018

Quando a cibersegurança deixa de ser tendência para se tornar necessidade

iMasters #25 Fevereiro 2018

Danielle Monteiro GOVERNANÇA DE DADOS

54

Kemel Zaidan

36

com Michelle Ribeiro


// 7

SEÇÕES

28

COMUNIDADES CaquiCoders

70

7MASTERS Encontro iMasters de especialistas

58

Gabriela Dias

74

POR AÍ Conheça o Developer Commerce Hub, o mais novo espaço de co-working para desenvolvedores

DEVOPS

A tendência DevOps e como ela se relaciona com o profissional de TI

62

Henrique Leite BLOCKCHAIN

O que é Ethereum?

40

Rafael Sarres

CAPA A revolução do Blockchain

50

Renato Haddad ASP .NET

ASP.NET Core 2 – Autenticação de usuário via redes sociais

iMasters #25 Fevereiro 2018


8 // ENTREVISTA

Quando a cibersegurança deixa de ser tendência para se tornar necessidade Por Diego Pinho, para Revista iMasters

D

DURANTE O ANO DE 2017 vimos muitos ataques cibernéticos. Foram milhões de computadores infectados e um número sem fim de informações roubadas. Os ransomware se popularizaram e se tornaram um receio mundial. Para falar mais sobre esse novo cenário, como se precaver e se proteger, além de dar dicas para quem quer entrar na área, chamamos Michelle Ribeiro, a brasileira que vem se destacando mundialmente na área de segurança digital. Reconhecida pela Harvard University e pela revista Foreign Policy, uma das maiores publicações da área, Michelle trouxe um pouco de sua experiência e conhecimento para tratar de um assunto que, se antes era tendência, agora é uma realidade na vida das empresas e pessoas físicas.

Revista iMasters: Você estudou em escolas públicas no Brasil, muito conhecidas entre a população por oferecerem um ensino precário. Muita coisa aconteceu desde então e você foi reconhecida por Harvard, uma das mais prestigiadas universidades americanas, e pela revista Foreign Policy como uma das 25 líderes no campo de segurança cibernética. O que você fez para superar as adversidades e se firmar como uma profissional reconhecida? Michelle Ribeiro: Dedicação. Sempre estudei por conta própria; tanto tecnologia, como inglês, usando os recursos que estavam disponíveis no momento, como letras de música e legendas de filmes. O surgimento da Internet facilitou ainda mais as possibilidades de iMasters #25 Fevereiro 2018

aprendizado e o vencimento das barreiras impostas pelo nosso ensino. Há alguns anos, já formada e com uma carreira estabelecida em tecnologia, descobri a existência do programa externo da Universidade de Londres, que desde 1858 permite que estudantes que não estejam no Reino Unido, por qualquer razão, possam realizar suas provas em centros especializados ou no Consulado Britânico. Foi assim que muitos soldados continuaram seus estudos universitários durante a Primeira e a Segunda Guerra. O mesmo ocorreu com Nelson Mandela, que se especializou em direito enquanto estava preso por lutar pelo fim do apartheid na África do Sul. Finalmente pude, então, seguir meu sonho de infância e estudar


// 9 em uma instituição no exterior, mesmo sem sair do Brasil. Decidi, no entanto, estudar política internacional, antecipando o impacto que a tecnologia teria nesta área. Esta segunda graduação trouxe novas grandes oportunidades, como a bolsa para especialização no Instituto de Tecnologia de Massachussets (MIT) e o mestrado em Londres, patrocinado pelo programa Chevening, do governo britânico, que identifica e apoia futuros líderes em seus campos de pesquisa. Revista iMasters: Outro ponto relevante na história da sua carreira é que você se destacou em uma área predominada pelo sexo masculino. Ainda hoje, o número de mulheres que atuam no mercado de tecnologia é pequeno não só no Brasil, mas no mundo todo. Durante a sua jornada, você enfrentou (ou continua enfrentando) muitas dificuldades pelo fato de ser mulher? Michelle Ribeiro: Infelizmente, sim. Nosso país ainda é extremamente patriarcal e muitas vezes apenas a presença feminina em uma sala de reunião de decisores incomoda. Acredito, no entanto, que a melhor estratégia para superar isso continua sendo a simpatia e o conhecimento. Nada fala mais alto que seu know-how, já que é muito difícil ignorar um especialista. Precisamos, é claro, resolver esta questão para que nenhuma de nós passe por tais dificuldades. Fora do país, já existe o reconhecimento do problema e o desenvolvimento de muitas ações para corrigi-lo. Admiro principalmente o trabalho da UIT, agência de Telecomunicações da ONU, que promove a educação em tecnologia de mulheres de países em desenvolvimento, através da campanha Iguais (Equals) também o desenvolvimento de políticas corporativas especificas para mulheres, como é feito por grandes empresas, como Google e Facebook. É necessário que iniciativas assim

se tornem comuns no Brasil, com o apoio do governo e outras entidades. Mas podemos fazer também a nossa parte, criando uma comunidade como a PrograMaria em cada uma de nossas cidades. Revista iMasters: Dado seu trabalho relevante em segurança cibernética, em novembro do ano passado (2017), você também foi convidada a participar do Peace Game, em Abu Dhabi, para buscar soluções comuns entre os países para ameaças digitais. Pode compartilhar conosco como foi o evento e quais foram os resultados obtidos? Michelle Ribeiro: A revista Foreign Policy (Política Externa), referência para assuntos de política internacional, junto com o Centro Belfer, de Harvard, reuniu especialistas na área de segurança cibernética para simular um ataque digital que, apesar de ter como alvo inicial os mercados financeiros do Oriente Médio, rapidamente teve impactos globais, como o aumento de preços do gás e outras commodities; iMasters #25 Fevereiro 2018


10 // POR DENTRO DO W3C reversão de investimentos na África e uma crise de confiança entre as potências mundiais. Inicialmente, como não era possível identificar o ator que realizou os ataques, muitos países logo acusaram a Coreia do Norte e a Rússia e ameaçaram utilizar armas físicas e inclusive nucleares, para punir esses Estados. Embora na simulação tenhamos conseguido identificar caminhos para uma melhor comunicação sobre segurança cibernética, vimos também um reflexo do que se vê no cenário político atual: existe uma grande dificuldade para encontrar um consenso entre os líderes mundiais sobre como agir em caso de conflitos digitais. Enquanto os países do Ocidente defendem que as leis internacionais se aplicam também ao espaço digital, incluindo o direito de defesa usando poder militar físico, outros países querem uma negociação específica para o ambiente cibernético. Ainda temos muito a caminhar nesta área. Revista iMasters: Apesar de todos problemas na economia e na política, o Brasil ainda é o maior país da América Latina e, consequentemente, é o maior alvo de ataques cibernéticos, em relação aos países vizinhos. Como você enxerga o Brasil na questão de segurança cibernética? As empresas e as pessoas estão tomando medidas para se proteger? O que precisamos fazer? Michelle Ribeiro: A segurança cibernética do Brasil e da América Latina sofre por estar extremamente concentrada nas mãos das forças armadas. Embora haja, no papel, a separação entre defesa e segurança cibernética, esta última a cargo do poder civil por meio do Gabinete de Segurança Institucional da Presidência da República, pouco se faz para educar e envolver a população e outros atores privados, que são os principais alvos de ataques cibernéticos. Precisamos proteger nossa infraestrutura crítica nacional, que envolve, obviamente, instituições governameniMasters #25 Fevereiro 2018

tais e empresas públicas de óleo, gás e energia elétrica, mas também os grandes bancos e empresas privadas, por exemplo. Além disto, o Brasil é um dos maiores alvos, mas também é uma das maiores origens de tais ataques cibernéticos, o que nos deixa expostos a contra-ataques. Precisamos que o Centro de Defesa Cibernética saia do papel e que seu comando entenda a natureza do conflito moderno, que invariavelmente envolve a população. É necessário que o Centro seja a pedra fundamental de onde tenha origem campanhas de conscientização sobre a importância de um ambiente digital seguro, com políticas voltadas desde a educação de nossas crianças, que já nascem com as mãos na tecnologia, até as empresas, que são o centro de nossa economia, mas que consideram os custos da segurança cibernética desnecessários. Revista iMasters: As ameaças digitais têm sido centrais em debates políticos desde as últimas eleições americanas, já que pesquisadores acreditam que outros países tenham influenciado os resultados das votações, através de notícias falsas no Facebook e outras atividades do gênero. Recentemente, tivemos episódios semelhantes por aqui. Foram encontradas falhas na urna eletrônica e investigações apontam para manipulação política. Você enxerga o mesmo risco para o Brasil nas eleições de 2018? Michelle Ribeiro: O uso de urnas eletrônicas em todo o mundo é bastante debatido, já que várias falhas foram encontradas no passado. Alguns países, como a Holanda, chegaram a desistir do voto eletrônico e voltaram a usar o voto em papel. O ideal seria a impressão dos votos, ficando uma via com o eleitor e outra com os mesários, além do registro eletrônico, para permitir uma tripla auditoria. No entanto, a manipulação política vai além da alteração de votos, como vimos nos Estados Unidos. O Brasil é pioneiro na criação de leis que governam o uso do espaço digital por candidatos, impedindo-os que


// 11 apareçam online nos três meses que antecedem a eleição. Isso, no entanto, estimula o uso das chamadas “fake news” ou notícias falsas, distribuídas nas redes sociais, principalmente por terceiros que, alegadamente, não teriam relações com o candidato beneficiado e assim, não poderiam ser punidos. Esta é a mesma estratégia usada há pelo menos dez anos nas eleições americanas, embora com mais sofisticação. Em 2008, hackers chineses infiltraram as campanhas do então candidato Barack Obama e roubaram grandes quantidades de informações. Em 2012, novas tentativas de infiltração ocorreram e, em 2016, grupos de hackers, que se acredita serem patrocinadores pela Russia, vazaram milhares de e-mails e documentos do partido Democrata. Diante disso, a Universidade de Harvard publicou recentemente um guia para campanhas eleitorais na era da segurança cibernética e recomenda que, em um cenário ideal, profissionais de segurança da informação sejam envolvidos no planejamento. Assim, este é um ano relevante para a segurança cibernética no Brasil, já que em breve teremos uma nova eleição, que será especialmente controversa. Candidatos, gerentes de campanhas eleitorais e membros da equipe, bem como seus familiares, devem considerar que serão alvos em potencial. Revista iMasters: Em 2017 fomos surpreendidos por muitos ataques cibernéticos no mundo todo. Um ataque que ganhou bastante destaque foi o ransomware WannaCry. Foram mais de 200 mil vítimas e mais de 300 mil computadores infectados. Quais recomendações você daria para evitar cair em golpes digitais deste tipo? Michelle Ribeiro: No campo de segurança existe uma série de práticas que podem ser seguidas, que chamamos de “higiene digital”. Podemos começar por estas cinco: a dica mais simples de seguir é manter os sistemas atualizados e isso vale pa-

ra celulares, computadores pessoais e servidores. O uso de tecnologias da nuvem reduz muitos riscos e se você ainda não pode ou não quer migrar, pode pelo menos se beneficiar do backup remoto, o que evitaria os danos de um possível sequestro de dados. Se possível, criptografe seu HD e outros dispositivos de armazenamento. Use senhas fortes e únicas para cada sistema. Finalmente, habilite a autenticação dupla. Revista iMasters: Com a crescente onda de ataques digitais, a área de segurança cibernética ganha mais relevância a cada dia. Muita gente que trabalha/estuda com tecnologia tem interesse em se especializar nesta área. Qual o caminho você recomenda para ser bem-sucedido? Quais os passos a seguir? Michelle Ribeiro: A tecnologia é apenas parte do conhecimento necessário para um especialista em segurança cibernética. Também é preciso conhecer teorias de defesa nacional, além de política e direito internacional. É preciso compreender a natureza dos conflitos modernos, os diferentes grupos de atores existentes no cenário político, que vai além dos países e incluí grupos como o já conhecido Estado Islâmico e outros que são menos explorados na Rússia, China, Coreia do Norte, Israel e Iran. Ao procurar uma graduação ou pós-graduação nesta área, certifique-se de que o currículo acadêmico cobre também estes assuntos. Revista iMasters: O que podemos esperar para os próximos anos no que se diz respeito à segurança cibernética? Michelle Ribeiro: Nossa sociedade está cada vez mais dependente de dispositivos eletrônicos e a Internet das coisas, junto com o uso de pagamentos digitais, só eleva nossos riscos de exposição. O que mais me chama atenção, no entanto, é a popularização do uso de beacons, que impactará definitivamente nossa privacidade. iMasters #25 Fevereiro 2018


12 // APP CENTER

UMA BREVE INTRODUÇÃO AO APP CENTER Por Albert Tanure, Arquiteto de Soluções na Meep

O DESENVOLVIMENTO de aplicativos móveis encontra-se em alta no mercado, e a entrega de valor constantemente é um dos grandes fatores de sucesso. Aplicativos mais complexos, com ótima usabilidade e qualidade, são cada vez mais requisitados. Possuir o apoio de uma ferramenta que centraliza e nos auxilia na geração de builds automáticos, testes na nuvem, coleta de informações analíticas, crashs e muito mais poderá ser um grande diferencial. Essa ferramenta existe, chama-se App Center, e aqui será apresentada uma pequena amostra do seu poder. O App Center O App Center é uma nova geração do HockeyApp, que contém mais ferramentas. Um dos grandes iMasters #25 Fevereiro 2018

diferenciais é que a ferramenta não se resume, apenas, à plataforma Microsoft. É possível usar todo o seu potencial para as principais tecnologias do mercado, como: Android (Java e Kotlin); iOS (Objective-C e Swift); Xamarin (iOS e Android); React Native (iOS e Android); EWindows Apps (UWP); EWindows Apps (UWP); Em breve, para MacOs, Cordova (já em Preview) e TvOs.

Dentre as principais características ou pilares do App Center, encontram-se: Build - Gerar builds, automatizados ou manualmente, de suas aplicações, associadas a um re-

positório (Visual Studio Online, GitHub ou Bitbucket); Distribute - Distribuição de releases de seus aplicativos para grupos de usuários pré-determinados através do envio automático de e-mails; Test - teste sua aplicação em dispositivos reais, executando na nuvem. Existem muitas outras ferramentas no App Center, como coleta de informações analíticas, crash, push notifications e várias outras opções, como a integração com o Azure. Além disso, possui uma ótima documentação e o seu blog sempre traz grandes novidades em primeira mão. Escopo: O APP Center possui muitas ferramentas interessantes. Mas, para ser prático, vamos


// 13 configurar as builds para Android e iOS e aprender a distribuí-las. Será utilizada uma aplicação desenvolvida em Xamarin.Forms, exclusivamente para este artigo, como projeto base para a geração das builds. Os passos a serem executados poderão ser replicados para outras tecnologias. Acessando a ferramenta: Para acessar o App Center, acesse o link http://appcenter.ms. Nesse site, você terá várias outras informações sobre a ferramenta além da documentação.

∂ Tela principal do App Center

Clique no botão “Get Started”, localizado no canto superior direito, para acessar a tela de criação de uma conta ou efetuar o login, caso já possua cadastro. Assim como vários outros serviços disponíveis na web, você poderá se conectar utilizando uma conta do Facebook, Google, GitHub, Microsoft ou até criar uma conta, de forma simples, informando seu e-mail, nome e senha.

∂ Tela de Login/criar usuário

Escolha a melhor opção para acesso à ferramenta. Após efetuar o login ou criar um novo usuário, temos acesso ao Dashboard do App Center. iMasters #25 Fevereiro 2018


14 // APP CENTER

∂ Tela principal do App Center

Podemos notar que existem duas opções básicas: “Add new organization” e “Add new app”. A primeira opção, add new organization, é para agrupar suas soluções. Imagine que você possua um cliente que solicitou o desenvolvimento de um app para as plataformas Android e iOS. Sendo assim, serão dois apps no mobile center, cada um para uma plataforma. Entretanto, você poderá agrupar tais apps em uma organização, organizando melhor o seu Dashboard. A opção “add new app” é, de fato, a adição de um app, no qual será definida, além de um nome Android

e uma descrição, qual tecnologia será utilizada. Configurando o projeto Agora que conhecemos de forma básica a ferramenta, vamos iniciar a configuração do nosso projeto. Se desejar reproduzir, exatamente, os mesmos passos deste artigo, os fontes do projeto e outras informações encontram-se no link https:// github.com/codefc/XFAppCenter Imasters. Primeiramente, devemos criar uma nova organização para agrupar nossos aplicativos que serão compilados para Android e iOS.

Clique em “Add new organization” e informe o nome “Imasters” no formulário que será exibido. Após criada a organização, podemos prosseguir para a criação dos apps. Criando os apps A criação dos apps para Android e iOS é bastante similar, variando apenas as tecnologias a serem utilizadas, é claro. A criação dos apps deverá ser feita clicando no botão “Add new app”. Configure os respectivos aplicativos de acordo com a tabela abaixo:

iOS

Name Android App

iOS App

Description Aplicação Android em Xamarin.Android

Aplicação Android em Xamarin.IOS

OS Android

iOS

Platform Xamarin iMasters #25 Fevereiro 2018

Xamarin


// 15

∂ Criação de um aplicativo

Você perceberá que logo após criar um aplicativo, o App Center irá direcioná-lo para a tela principal da aplicação. Nessa tela, haverá um tutorial, de acordo com a plataforma, que demonstra como integrar nossas aplicações com o App Center para coleta de informações analíticas ou crashes. Acessando o controle de versão Antes de criar as builds dos nossos aplicativos, devemos,

primeiramente, configurar o controle de versão onde se encontra nosso projeto. As seguintes configurações deverão ser feitas para os aplicativos Android e iOS. Atualmente, estão disponíveis as integrações com o Visual Studio Team Service, o GitHub e o BitBucket. Em nosso caso, vamos efetuar a integração com o GitHub. O processo é simples. Basta escolher o repositório, efetuar o login e autorizar o App Center acessar as informações de projetos. Após as confirmações, serão exibidos os seus repositórios. Selecione o projeto desejado e pronto! Sua aplicação está associada a um repositório. Uma dica para acompanhar esse exemplo melhor: você poderá fazer o “Fork” do projeto no GitHub e selecioná-lo conforme os passos descritos acima. Observe que ao selecionar o projeto, serão exibidas as branches, caso exista mais de uma. Para cada branch, podemos configurar builds com propósitos diferentes. Podemos possuir uma build “develop” onde estão sendo desenvolvidas as novas implementações e seu propósito é distribuir releases para sua equipe de testes interna. E na branch “master”, podemos configurar

uma build com uma versão estável para um time de homologação. Build Android A configuração de builds para aplicativos Android é bastante simples. Porém, como pré-requisito, devemos criar um certificado para assinar nossa aplicação para permitir a instalação bem-sucedida nos dispositivos dos usuários que receberão as versões. Para criar um certificado para aplicações Android, podemos contar com o auxílio da ferramenta “keytool.exe”, localizada no PATH do Java SDK - C:\Program Files (x86)\Java\jdkVERSION\ bin\keytool.exe. Acesse o diretório do Java JDK, caso ele não esteja configurado no PATH, para digitar o comando para a geração do certificado. O comando utilizado para criar o arquivo “keystore”, que é o certificado que irá assinar a aplicação, é:

keytool.exe -genkeypair -v -keystore c:\ keystores\MeuKeyStore. keystore -alias ArtigoImastersAppCenter -keyalg RSA -keysize 2048 -validity 10000 <ENTER>

iMasters #25 Fevereiro 2018


16 // APP CENTER

O comando acima gera uma keystore com o nome “MeyKeyStore.keystore” no diretório “C:\ keystores”, com um alias denominado “ArtigoImastersAppCenter” definido com um algoritmo RSA e uma validade de 10.000 dias. Após digitar o comando e pressionar enter, algumas perguntas serão feitas. A primeira delas será uma senha. Preencha com

uma senha de sua preferência. Para prosseguir com o exemplo, vou preencher a senha com o valor “artigoimasters.2018”. As informações seguintes são bem intuitivas. Quando solicitada outra senha, defina um valor de sua preferência. Vou manter o padrão e prosseguir com a mesma senha definida anteriormente, “artigoimasters.2018”.

Abaixo os detalhes de cada configuração: Project Selecione o projeto Android do seu repositório. O App Center tentará identificar o projeto automaticamente. Mono Version Mono Version Selecione a opção mais atual. No meu caso, 5.4.1. Configuration Release. Caso possua outro perfil de configuração que represente um RELEASE, selecione este. Build Frequency

∂ Print do certificado criado

Lembre-se: os dados informados na geração do certificado deverão ser guardados, juntamente com o keystore, em um local seguro. Vamos precisar dessas informações na definição da build. De posse do certificado, acesse, no App Center, o aplicativo Android e, em seguida, clique no menu Build. Clique na branch develop e, em seguida, no botão “Configure build”. Vamos nos concentrar, apenas, nas opções para geração de uma build Android sem maiores variações. Será exibido um formulário com várias opções: iMasters #25 Fevereiro 2018

Build this branch on every push. Sign Builds Habilite a opção. Faça o upload do keystore criado anteriormente. Preencha os campos Key Alias, Key Password e Keystore password conforme as informações do certificado criado anteriormente.

∂ Formulário de edição de build

Por enquanto, essa será a nossa configuração de build. Ela apenas irá gerar o artefato, mas ele não será distribuído. Pra terminar, clique no botão “Save & Build” e aguarde a conclusão.


// 17

Será exibida uma tela com todo o log de geração de build. Caso haja alguma falha ao gerar o aplicativo, o log será bem útil para diagnosticar o problema. Se tudo ocorreu bem, nossa build gerou, com sucesso, o APK da nossa aplicação. Build iOS O próximo passo é configurar a build do iOS. Como sabemos, a Apple tem outro padrão de desenvolvimento e também de entrega de suas aplicações. Sendo assim, antes de distribuir aplicações para iOS, é necessário criar algumas configurações em sua conta de desenvolvedor Apple. Além dos certificados, é preciso, é claro, um MAC OS com todo ambiente de desenvolvimento configurado e atualizado. É aí que entra o poder do App Center. Ele possui um Agent na nuvem que tem, basicamente, máquinas MAC com toda a necessidade de um ambiente de desenvolvimento para compilar nossas aplicações. Fantástico. Para que a sua build possa funcionar corretamente, deve-se atender aos seguintes pré-requisitos: ATENÇÃO: Os passos a seguir dependem do uso de um MAC OS. A maioria das ações pode ser feita através do portal de desenvolvedores Apple, porém, na geração

de certificados e da chave privada, devem-se utilizar os recursos do Mac OS. Devices que receberão o app No painel de desenvolvedores da Apple, temos a possibilidade de cadastrar até 100 dispositivos que receberão nossas aplicações para teste. APP ID - Todo aplicativo deve ter um App Id que representa a aplicação na Apple Store - o padrão utilizado. Certificado de produção - Criar um certificado de produção na opção “App Store and Ad hoc”. Basicamente, precisamos criar um certificado de produção para distribuição “ADHOC”, ou seja, não será uma distribuição via Apple Store, mas distribuída diretamente para determinados dispositivos. Precisamos criar alguns certificados. Acesse o aplicativo iOS criado anteriormente e vá ao menu “Build”. Certificado de provisionamento - O certificado de provisionamento deverá ser criado para distribuição Ad hoc, com o App Id criado para a sua aplicação, relacioná-lo ao certificado de produção criado anteriormente e, finalmente, selecionar todos os devices que receberão o app. Chave privada do certificado de produção - Esta chave privada po-

de ser gerada facilmente selecionando o certificado de produção criado anteriormente na aplicação KeyChain do Mac OS, clicando com o botão direito no certificado e escolhendo a opção de “Exportação”. Defina um nome para o certificado e uma senha. Guarde bem essa senha. Ela será usada na geração da build. Dica: é muito importante que no certificado de provisionamento existam todos os devices que receberão o aplicativo, caso contrário, ele não irá instalar em um dispositivo desconhecido. As configurações acima podem parecer complexas para o “marinheiro de primeira viagem”. Mas não se preocupe, com o tempo, você se acostuma e, além disso, existem ótimas ferramentas, como o Fastlane, que facilitam e muito o trabalho de criação e gerenciamento de certificados. Com os certificados em mãos, é hora de configurar a Build. Para isso, no App Center, acesse o aplicativo iOS criado anteriormente e, em seguida, acesse o menu Build. Assim como foi feito na configuração da build Android, apenas as configurações mais importantes serão tratadas. Clique na branch develop e, em seguida, em “Configure build”. No formulário, preencha os dados de acordo com a tabela abaixo: iMasters #25 Fevereiro 2018


18 // APP CENTER

Project Selecione o projeto iOS do seu repositório. O App Center tentará identificar o projeto automaticamente. Mono Version Selecione a opção mais atual. No meu caso, 5.4.1. Configuration Release iOS. Caso possua outro perfil de configuração que represente um RELEASE, selecione este. XCode Version Selecione a versão mais atual. No meu caso, 9.2. Build Type Device Build. Build Frequency Build this branch on every push. Sign Builds Habilite a opção. Faça o upload do certificado de provisionamento ADHOC, criado anteriormente. Faça o upload da chave privada, extensão .p12, criada anteriormente. Informe a senha da chave privada que foi criada anteriormente no momento da exportação.

Agora que todos os parâmetros da build foram configurados, clique em “Save and build” para gerar a primeira versão da aplicação.

∂ Build IOS

iMasters #25 Fevereiro 2018


// 19

Distribuição A distribuição é um recurso no qual, através de um grupo, posso enviar minhas aplicações para testes, homologações ou quaisquer outras necessidades. É importante testar e coletar feedbacks de usuários antes de enviar nossas aplicações para as lojas de aplicativos. Para criar um grupo de distribuição, acesse o menu “Distribute” de qualquer um dos aplicativos criados anteriormente. No canto superior direito da página, clique no botão “New Group”. Em seguida, defina um nome - Homologação, por exemplo. Deixe a opção “Allow public access” desmarcada no momento. Ela habilita um link para download público da sua aplicação. Esse recurso é muito interessante em alguns casos. No próximo campo, preencha o e-mail de algum amigo ou membro da equipe que irá efetuar a homologação da aplicação e pressione ENTER. Preencha quantos e-mails achar necessário e, em seguida, clique em “Create Group”. Após a criação do grupo, os usuários dos e-mails que foram informados da criação do grupo receberão um invite para fazer parte do grupo da aplicação. Crie quantos grupos achar necessário. Como em nenhuma das builds configuramos a distribuição automática, para gerar um release para um grupo de distribuição, acesse o menu “Build”, selecione a branch “develop” e em seguida uma build que foi executada com sucesso. No canto superior direito da página, clique no botão “Distribute”,

selecione o grupo para o qual deseja distribuir uma versão do seu aplicativo, clique em “Next”, informe uma nota de Release e em seguida clique em “Distribute Build”. Todos os usuários que já aceitaram o invite do grupo de homologação receberão um e-mail informando sobre a nova versão da aplicação e um link para efetuar o download. Se desejar fazer algo mais automatizado, edite a build, habilite a opção “Distribute builds” e selecione o grupo de sua preferência. Assim, todas as vezes que uma build for bem sucedida, uma distribuição automática será gerada. Custo O App Center poderá ser usado gratuitamente, mas com algumas limitações. Se a sua demanda de desenvolvimento de aplicações é constante, talvez o interessante seria utilizar alguns dos planos disponíveis para possibilitar, por exemplo, builds concorrentes. Porém, mesmo na opção gratuita existem os seguintes benefícios: 240 builds/mês 30 dias de utilização da funcionalidade de teste na nuvem Distribuições e usuários ilimitados Todas as features de Analytics e Crash estão disponíveis Os outros custos poderão ser conferidos no próprio site da plataforma. O App Center, certamente, é uma ótima plataforma para centralizar várias necessidades que possuímos ao desenvolver nossas

aplicações móveis. O processo de automatização de builds, apesar de muito simples de configurar, pode ser customizado totalmente através de scripts e outras funcionalidades. Além disso, possuir uma plataforma de entrega de suas aplicações para avaliações, testá-la em vários dispositivos na nuvem e coletar informações importantes fazem do App Center uma plataforma indispensável para nós, desenvolvedores mobile. O mais interessante é que ela não está restrita apenas a tecnologias Microsoft. Então não tem desculpa para não utilizar. :D Na documentação, que é ótima, existem muito mais informações sobre todas as ferramentas disponíveis e com exemplos. Referências: http://appcenter.ms http://github.com/codefc/XFAppCenterImasters https://docs.microsoft.com/en-us/appcenter/ https://blogs.msdn.microsoft.com/vsappcenter/ http://www.codefc.com.br

Albert Tanure é bacharel em Sistemas de Informação e atualmente atua como Arquiteto de Soluções na Meep - Soluções Inteligentes e Autoatendimento. Possui mais de 12 anos de experiência em desenvolvimento de software e é apaixonado pelo desenvolvimento móvel e arquitetura de software. É fundador do site Code FC, que tem como objetivo disseminar sua paixão em ajudar as pessoas e capacitá-las com artigos técnicos e informações das palestras que ministra.

tanure@live.com

iMasters #25 Fevereiro 2018


20 // DEVOPS

CI COM MICROSSERVIÇOS Por Lucas Santos, Desenvolvedor de software

Kubernetes O KUBERNETES (ou k8s) é um projeto que nasceu dentro da Google como uma alternativa para a gerência de containers LXC. Em 2015, foi doada a Cloud Native Computing Foundation, tornando-se de código aberto. Desde então, o Kubernetes tem sido um dos principais meios de gerenciar grandes quantidades de containers em um ambiente único, ao lado do Docker Swarm e o Mesos. O que o k8s faz é basicamente organizar os containers em modelos lógicos que podem ser gerenciadas através de uma API REST, tudo em um cluster gerenciado por um nó mestre que controla três ou mais nós filhos que contêm suas estruturas de gerenciamento.

O grande problema dos sistemas de CI antes do k8s era que não havia possibilidade de fazermos a interação “nativa” para seu ambiente de produção, publicando, escalando ou removendo containers de forma eficiente. Era preciso escrever um script shell que seria executado pela ferramenta, geralmente utilizando a API do provedor cloud, para interagir com o Docker dentro de cada instância individual, o que implicava que o CI precisava saber onde todos os serviços estavam para poder interagir com cada um deles. Com o k8s, podemos fazer a integração através de simples chamadas REST para o nó master sem necessidade de passar por tudo isso. Vamos ver como fazer isso. Wercker Agora vamos falar um pouco sobre o Wercker, um CI comprado pela Oracle que possui uma integração nativa com o k8s, focado em microsserviços e feito para suprir os problemas que citamos anteriormente. Com ele, fica fácil criar uma integração com o cluster e gerenciar seus deploys, além de todas as funções que um CI tradicional já tem. Para entender as próximas instruções, é importante que você seja familiarizado com o Git, containers e Kubernetes. Também é necessário que você tenha um cluster k8s rodando e uma conta no Docker Hub e no GitHub. Para começar, baixe este repositório https://github.com/khaosdoctor/imasters-node-http-server. Nele, há toda a estrutura necessária para o exemplo. Vamos explicá-lo passo a passo.

iMasters #25 Fevereiro 2018


// 21

Nele, você encontrará o package.json, com algumas informações relevantes, e o index.js, que contém o código que rodará um simples serviço para nossos testes. Para isso, estamos usando o StandardJS. No index.js, você também notará que estamos utilizando uma variável de ambiente chamada PORT. Para rodarmos um teste localmente, precisamos exportar essa variável utilizando o comando export PORT=2324 && npm start e depois podemos entrar no endereço localhost para verificar o resultado:

Agora que temos nosso servidor funcionando, podemos partir para a configuração do CI, que começa entrando no site do Wercker (https://wercker.com) e criando sua conta. É importante se conectar com

a mesma do seu GitHub - assim, ele pode buscar os repositórios automaticamente quando formos criar a aplicação no sistema. Você precisará criar um novo repositório no Docker Hub para poder armazenar sua imagem - basta entrar em https://hub.docker.com, fazer seu login e criar o repositório. Com isso feito, criaremos o nosso repositório no Wercker. Para isso, vá ao botão “+” ao lado da sua foto de usuário e clique em Add Application. Na próxima tela, selecione o SCM - nesse caso, o GitHub. Continue seguindo os passos selecionando o repositório criado anteriormente e as configurações recomendadas de acesso, que é a opção Wercker will check out the code without using an SSH key. Feito isso, seremos redirecionados para o dashboard - aqui, temos informações importantes a serem notadas. No topo, vamos ter várias abas. Runs é onde teremos o resumo das nossas builds. As abas Workflows e Environment serão as mais importantes para nós. iMasters #25 Fevereiro 2018


22 // DEVOPS

Em Workflows, vamos ter os pipelines. Será ali que vamos definir os passos que queremos que cada build execute e quando eles devem ser iniciados. Em Environment, será onde vamos colocar nossas variáveis de ambiente, como a variável PORT que definimos antes. As variáveis são definidas em níveis: Organização: Se você tem uma empresa, podemos organizar os times em uma organização. Essas variáveis abrangem todas as aplicações que estão criadas sob ela. Projeto: Na aba Environment, estamos criando variáveis de projeto; elas serão visíveis para todos os

Para que possamos configurar nossa integração, vamos precisar criar um arquivo wercker.yml na raiz do projeto. Nesse arquivo, definiremos os processos e cada etapa do build que utilizamos. Em uma visão geral, realizaremos quatro passos: 1. Vamos instalar todas as dependências e gerar a tag da nossa imagem para podermos versionar no Docker Hub; 2. Criar nosso passo de testes; 3. Fazer o push para o Docker; 4. Criar o passo de publicação para o k8s. Primeiramente, vamos criar o arquivo e dizer qual é a imagem base que vamos utilizar, que será a node na versão 8.4. Esta deve ser a primeira linha do arquivo:

# Qual é a imagem base que vamos utilizar # box: node:8.4

Então, vamos definir o primeiro passo, que deve se chamar “build”: iMasters #25 Fevereiro 2018

pipelines da aba Workflows, independentemente da build em que estiverem. Workflow: É o tipo mais específico; criamos uma variável de ambiente dentro do passo que vamos executar, e ela só estará disponível ali. A ordem das variáveis sempre é da mais para a menos específica, ou seja, o Wercker vai procurar uma variável a partir do último item para o primeiro, e a primeira que for encontrada será utilizada. Além disso, uma variável de organização não vai sobrescrever as variáveis de projeto se tiverem o mesmo nome. Criaremos nossa variável PORT na aba Environment e dar a ela o valor que quisermos na nossa porta:

# Definição do primeiro step build: steps: npm-install script: name: gerar tag de imagem code: | export PACKAGE_VERSION=$(node -p “require(‘./package.json’).version”) export IMAGE_TAG=$PACKAGE_VERSION echo “$IMAGE_TAG” >> $WERCKER_ SOURCE_DIR/.image_tag

Aqui temos algumas coisas acontecendo. O Wercker já tem um passo predefinido para o comando de instalação, então apenas o chamamos na execução. Depois, definimos um script personalizado para podermos pegar a versão da nossa aplicação do package.json usando o comando node -p, salvando o resultado em uma variável e depois em um arquivo. Precisamos salvar o arquivo, pois reutilizaremos essa variável em outros passos. O Wercker também


// 23

já tem algumas variáveis preconfiguradas, como o WERCKER_SOURCE_DIR. Após esse step, vamos criar o passo de testes, apenas executando o comando de testes:

# Definição do step de testes test: steps: - npm-test

Então, criaremos nosso step mais importante, realizar o push para o hub:

# Definição do step de push docker-push: steps: - script: name: recupera tag de imagem code: | export IMAGE_TAG=$(cat $WERCKER_ SOURCE_DIR/.image_tag) - internal/docker-push: username: $DOCKER_USER password: $DOCKER_PASS repository: $DOCKER_REPO tag: $IMAGE_TAG working-dir: $WERCKER_SOURCE_DIR entrypoint: npm start registry: https://hub.docker.com

Aqui vamos ter que criar algumas variáveis quando estivermos no nosso pipeline, porque estaremos utilizando-as apenas neste step. Veja que recuperamos o valor da tag que salvamos no arquivo anteriormente. Então, utilizamos um passo interno chamado internal/docker-push para poder realizar o push para o registry. Por fim, vamos realizar o push para o k8s:

# Definição do step do kubernetes deploy: steps:

- script: name: parsear templates code: | export IMAGE_TAG=$(cat $WERCKER_ SOURCE_DIR/.image_tag) mv $WERCKER_SOURCE_DIR/kub/kub_*. template $WERCKER_SOURCE_DIR - bash-template - script: name: movimentar templates code: | mv $WERCKER_SOURCE_DIR/kub_*.* $WERCKER_SOURCE_DIR/kub - riceo/kubectl: server: $GCE_KUBERNETES_MASTER gcloud-key-json: $GCP_KEY_JSON gke-cluster-name: $GCE_CLUSTER_NAME gke-cluster-zone: $GCE_CLUSTER_ZONE gke-cluster-project: $GCE_CLUSTER_ PROJECT command: apply -f $WERCKER_SOURCE_DIR/ kub/

Aqui fazemos várias coisas. Primeiro, convertemos arquivos de templates do Wercker para arquivos válidos do k8s, substituindo as variáveis dentro desses arquivos para que possamos criá-las dinamicamente. Esses arquivos são as definições dos objetos do k8s - no caso, um pod e um service. Outro ponto importante é que usamos um fork do step padrão kubectl do Wercker, isso é possível graças a uma extensibilidade que o CI tem. Podemos clonar qualquer um dos steps disponíveis no repositório do Wercker e modificá-los para as nossas necessidades; depois, basta que o chamemos aqui, passando os parâmetros - como fizemos com riceo/ kubectl (um repositório do GitHub do usuário riceo). Para criarmos os arquivos do k8s, abriremos uma nova pasta “kub” e nela criaremos dois arquivos, kub_pod.yml.template e kub_service. yml.template, e também vamos criar outra variável no Wercker chamada SERVICE_NAME, à qual vamos dar um valor de até 15 caracteres para ser o nome de serviço. Nosso arquivo de pod ficará assim: iMasters #25 Fevereiro 2018


24 // DEVOPS

apiVersion: v1 kind: Pod metadata: name: ${SERVICE_NAME}-pod namespace: default labels: app: ${SERVICE_NAME}-pod spec: containers: - name: ${SERVICE_NAME} image: khaosdoctor/imasters-nodehttp-server:${IMAGE_TAG} env: - name: PORT value: “${PORT}” ports: - containerPort: ${PORT}

Estamos colocando as variáveis do Wercker no estilo ${VAR}, porque quando rodarmos o comando bash-template definido no arquivo wercker.yml no step deploy, essa sintaxe será substituída pelo valor da variável. Faremos o mesmo com o serviço:

apiVersion: v1 kind: Service metadata: name: ${SERVICE_NAME}-svc namespace: default labels: app: ${SERVICE_NAME}-svc spec: type: LoadBalancer ports: - port: 80 targetPort: ${PORT} protocol: TCP

iMasters #25 Fevereiro 2018

name: http selector: app: ${SERVICE_NAME}-pod

Estamos selecionando a porta 80 para entrada, logo, vamos acessar através do endereço padrão, mas o serviço vai rotear para a porta que definimos na nossa aplicação. Com os dois arquivos criados, criaremos as variáveis definidas no Wercker.yml: DOCKER_USER e DOCKER_PASS: Seu usuário e senha do Docker Hub; lembre-se de que eles devem ser protegidos! O Wercker possui uma opção de transformar uma variável em uma variável protegida, basta selecionar o botão protected antes de salvar. DOCKER_REPO: Será o <seuusuario>/<seuapp> no Docker Hub. Para podermos criar essas variáveis, precisamos criar o nosso workflow. Para isso, vamos na aba Workflows e criaremos um pipeline para cada step que definimos no nosso arquivo YAML: Build (já vai existir), Teste, Push e Deploy, clicando no botão “Add new Pipeline”.

Podemos colocar um nome qualquer campo da tela, porém o “step name” deve ser exatamente o nome do step que definimos (que é o nível mais alto da hierarquia do YAML):


// 25

As opções seguintes definem se esse pipeline irá ser executado ao receber um push, ou após o anterior. Vamos manter a forma padrão, afinal, queremos um pipeline sequencial. Ao criarmos, você perceberá que um campo de variáveis se abrirá

no topo, é lá que vamos criar as variáveis de pipeline, o nível mais específico do Wercker. Precisamos repetir o processo para cada pipeline nova, então teremos três pipelines definidas por nós e uma (build) definida pelo wercker.

Marque a caixa “protected” ao lado da senha para que ela se torne obscura. Note também os nomes que demos para o pipeline. Seguiremos fazendo isto para o deploy:

Estou usando o Google Cloud Platform (GCP) para hospedar meu cluster k8s, porque é a solução mais simples de hoje, já que o próprio sistema de containers do GCP é baseado no k8s, então a integração é instantânea. Isso implica que o step de deploy para o k8s é específico para essa plataforma. Se pretende usar outro serviço de cloud, considere ler a documentação do Wercker para informações sobre como é possível integrar com esses serviços, ou construir o seu próprio step se necessário. Por usar o GCP, precisaremos de outras variáveis que só teremos através dele: GCP_KEY_JSON: É a chave de acesso que pode ser obtida através do painel de Service Accounts.

Ao gerar uma chave, você poderá baixá-la no formato JSON; quando criar essa variável de ambiente, utilize o comando tr -d ‘\n’ < suachave.json para poder remover todas as quebras de linha do arquivo e, só aí, colar o conteúdo no Wercker. GCE_KUBERNETES_MASTER: É o IP do seu master node do k8s. GCE_CLUSTER_NAME: É o nome do seu cluster no GCP. GCE_CLUSTER_ZONE: É a zona na qual seu cluster foi criado. GCE_CLUSTER_PROJECT: É o ID do seu projeto no GCP (no topo da tela). Não se esqueça de proteger sua chave: iMasters #25 Fevereiro 2018


26 // DEVOPS

Com tudo criado, basta criarmos a sequência de pipelines; no momento, deixaremos a execução em todas as branches, em um projeto real em que deveríamos restringir as pipelines de produção para as branches de produção:

Não coloquei o step de deploy ali, porque quero fazer o deploy manualmente - o CI apenas deixará tudo pronto. Agora, vamos rodar a build; na guia Runs, vamos ter o status detalhado. Ao finalizarmos, você poderá conferir que o Dockerhub mostrará a tag correta da imagem enviada:

iMasters #25 Fevereiro 2018


// 27

A cada alteração de versão, teremos uma nova imagem gerada em uma nova tag - podemos passá-la também para o k8s como uma label. Agora que temos a imagem, vamos realizar o deploy entrando no último passo da última build (push-para-docker) a partir da guia Runs e clicando em “More Actions”. De lá, podemos selecionar qualquer outra pipeline para execução, vamos selecionar o deploy. Uma nova linha será adicionada na guia Runs e nosso deploy começará. Ao final do processo, veremos no k8s os artefatos criados, o pod:

E nosso service:

Agora, se acessarmos o IP determinado, veremos:

E assim publicamos o microsserviço de maneira totalmente automatizada! A partir daí, podemos estender o CI para fazer qualquer parte da build e automaticamente realizar o deploy para o k8s. A grande vantagem é que o processo é facilmente replicável, pois ao configurar o primeiro serviço, todos os

demais são quase idênticos, basta copiar os registros de um para o outro e mover as variáveis globais entre eles para um escopo de organização.

Lucas Santos é desenvolvedor desde 2011, engenheiro de infraestrutura e aplicações na Squid Digital Media, trabalhando com aplicações de alta performance e escalabilidade. É participante ativo de comunidades de desenvolvimento em geral e membro da equipe de moderação do fórum iMasters há 5 anos.

lhs.santoss@gmail.com

iMasters #25 Fevereiro 2018


28 //

COMUNIDADES Senhoras e senhores, com vocês, a CaquiCoders! Por Rodrigo PokemãoBr, Community Manager no iMasters

VOCÊ CONHECE A CAQUICODERS? A comunidade, que é relativamente nova, já vem conquistando o coração dos apaixonados por tecnologia na região do Alto Tietê. Ao contrário das grandes comunidades já firmadas no meio, a Caqui, como é carinhosamente chamada por seus membros, não trata de uma linguagem ou tecnologia específica. Ela abrange o desenvolvimento como um todo para conseguir agregar mais conhecimento – e transmiti-lo. Quer conhecer mais da caçulinha das comunidades paulistas? Então confira esta entrevista com Morganna Giovanelli, uma das fundadoras da CaquiCoders. Revista iMasters: Como surgiu a CaquiCoders? Morganna Giovanelli: Em 2017, nós começamos a participar cada vez mais de eventos de tecnologia. A partir disso, conhecemos o meetup e as comunidades. Fomos tão bem recebidos por todos e achamos isso incrível, porque pessoas que sempre tivemos como exemplo e inspiração acabaram se tornando amigos de comunidade. Podemos dizer que foi paixão iMasters #25 Fevereiro 2018

à primeira vista, porque realmente foi. É sempre incrível a energia que as comunidades têm e como elas acabam nos conquistando. Porém, devido à região onde moramos (região do Alto Tietê de São Paulo), às vezes ficava bem complicado participarmos de alguns meetups, e a distância e os horários começaram a ser um problema, porque sempre dependemos de transporte público para o retorno para casa. Não era exatamente um impedimento para irmos, mas acabávamos perdendo alguns meetups por causa disso. Foi então que, após a participação em um dos eventos, decidimos criar uma comunidade que estivesse mais pertinho da gente. Nasceu a mesma vontade de aprender e compartilhar, fazer networking e plantar a sementinha dos meetups e das comunidades no coração dos estudantes, profissionais e quaisquer outras pessoas que tivessem interesse na mágica área da tecnologia. Foi aí que o CaquiCoders surgiu, a partir das mentes de Claudiney Junior, Letícia Pedroso, Lucas Santos e a minha. Mais precisamente, em 15 de agosto de 2017.


// 29

Revista iMasters: E conta para a gente o porquê desse nome. Morganna Giovanelli: Somos estudantes do curso de Análise e Desenvolvimento de Sistemas da FATEC, de Mogi das Cruzes, e essa cidade é muito conhecida devido ao cultivo do caqui. Então, como uma homenagem e também para brincar com as palavras, deixamos CaquiCoders. Carinhosamente chamada apenas de “Caqui” pelo pessoal que participa conosco. Revista iMasters: Quais as principais atividades? Morganna Giovanelli: Nós temos como foco principal a realização de meetups, que são, em sua maioria, palestras sobre algum tipo de tecnologia ou algo relacionado ao ambiente de um desenvolvedor. Essas palestras podem ser sobre uma linguagem de programação, um framework que esteja em alta, novas tecnologias, ou mesmo algo relacionado ao gerenciamento de projetos. Entretanto, para este ano, estamos planejando realizar algumas atividades que sempre tivemos vontade: hackathons. Também queremos ainda mais coding dojos e até mesmo minicursos. Temos a intenção não apenas de levar conteúdo para aqueles que já estão inseridos na área, mas também aprendizado e compartilhamento para quem quer começar a se aventurar e se envolver com a TI. Revista iMasters: Vocês organizam algum evento local? Morganna Giovanelli: Nós realizamos dois eventos locais e ajudamos em mais um, até o momento. Um deles foi a Semana de Tecnologia na FATEC, de Mogi das Cruzes, onde levamos alunos e profissionais da área para compartilhar conhecimento com o pessoal da faculdade e também outras pessoas da região, pois foi aberto à comunidade. Também realizamos um dia de IoT na UnG, de Itaquaquecetuba, quando contamos com a participação do pessoal do THT. E ajudamos em outro evento da FATEC, denominado Jornada de Tecnologia, com algumas palestras.

Revista iMasters: Existe alguma ação que torne essa comunidade peculiar? Morganna Giovanelli: Não temos um público específico ou um assunto único. Queremos ajudar a abranger o conteúdo que as pessoas da comunidade e a região precisarem. Queremos que todos se sintam incluídos nas ações e se sintam parte da comunidade para participarem quando e como quiserem, sempre respeitando quaisquer diferenças que possam existir, independentemente de quais forem. Queremos conquistar as pessoas para a tecnologia, mesmo que ainda não tenham nenhum conhecimento na área. Talvez não seja algo tão peculiar, mas são nossos principais objetivos. iMasters #25 Fevereiro 2018


30 // Revista iMasters: Existe uma troca de experiências com outra comunidade? Morganna Giovanelli: Como desde o início de 2017 temos participado constantemente de meetups das comunidades, acabamos criando networking e amizade com várias pessoas - desde os membros dessas comunidades até organizadores e palestrantes. E, como sempre enfatizamos, é algo mágico ter pessoas que você admira tão perto, te ajudando a evoluir pessoal e profissionalmente. A partir da aproximação com a amizade e o networking, acabamos nos unindo a muitas comunidades, o que rendeu até mesmo eventos em conjunto. O primeiro evento que realizamos, contamos com a participação do Alto Tietê Coders, uma comunidade da região, e da comunidade MTAC Brasil. Em outro evento que realizamos, contamos com a ajuda do pessoal do THT, o que foi incrível, pois era sobre IoT e Node-Red, assuntos que também tinham um pouco de novidade para nós, e não apenas para o público que compareceu. Além disso, sempre contamos com a ajuda de várias comunidades parceiras, de forma direta ou indireta. É sensacional poder sempre contar com pessoas que estão engajadas e têm a mesma paixão que nós temos. Revista iMasters: Qual a importância da sua comunidade para a região em que está localizada? Morganna Giovanelli: Ainda não há uma ação completa de comunidade técnica em nossa região. A importância das nossas ações envolve conquistar as pessoas para que entendam o que significa ser parte de uma comunidade. E, a partir disso, “espalhar a palavra” da tecnologia por aí, mostrando a real importância de aprender e compartilhar, de fazer networking e parcerias, de evoluirmos como pessoas e como profissionais, fazendo, assim, com que a região evolua. Com isso, quem sabe, podemos elevar o nível técnico dos profissionais, permitindo que até mesmo tenhamos acesso a mais empregos que sejam em nossa região, mais perto de casa, trazendo tantos outros benefícios que acabam sendo consequência do que citamos. Tudo isso levando em consideração o Alto Tietê, que é uma região onde as comunidades não são tão ativas, até o momento. Nosso objetivo é mudar isso. Revista iMasters: Como a CaquiCoders enxerga o meio das comunidades no Brasil? O pessoal se ajuda, troca experiências, vão uns nos eventos dos outros? Morganna Giovanelli: Em geral, nós sentimos que as comunidades têm um bom relacionamento entre elas. Muitos organizadores de uma comunidade iMasters #25 Fevereiro 2018

participam também de outras. Nós mesmos, aqui do Caqui, temos o costume de ir a eventos do Nerdzão, NerdGirlz, .NET São Paulo, WoMakersCode, GDG-SP, Angular SP, Developers SP, entre muitas outras comunidades de São Paulo. É fato que a maioria das comunidades de tecnologia do Brasil está localizada no estado de São Paulo, mas arriscamos a dizer que o mesmo feeling se aplica às comunidades de outros de estados. Tivemos a oportunidade de sentir isso principalmente quando o projeto Natal Nerd foi colocado em prática, que tinha como objetivo reunir comunidades técnicas de vários locais de todo o Brasil para arrecadar brinquedos nos eventos realizados para que fossem feitas doações para crianças carentes. Acho que essa união e colaboração foram algumas das coisas que mais nos inspiraram para mantermos o CaquiCoders. E esperamos poder repassar isso para todos aqueles que se juntarem a nós.


DROPS DO MERCADO

// 31

FERRAMENTA GRATUITA CRIA PÁGINA TEMPORÁRIA PARA SITE EM CONSTRUÇÃO A HostGator, uma das principais empresas de soluções para presença online no mundo, desenvolveu uma ferramenta inovadora para otimizar o trabalho daqueles que ainda não tem um site ou estão criando um. Chamado de “Página Fácil”, o produto atende a necessidade de quem não tem tempo a perder: ao ativar um plano de hospedagem, é possível criar uma presença online em poucos passos. Normalmente, este é o momento no qual o site ainda está em processo de criação e outras configurações são necessárias para que o projeto seja disponibilizado online. O “Página Fácil” vence esses obstáculos através de um ambiente simples e de fácil uso, que permite ao usuário adicionar à página informações como logo da empresa, título, uma breve descrição, dados e formulário para contato, além de inserir links de redes sociais, sem necessidade de conhecimento em programação. Lançado para os clientes em novembro, o serviço já conta com quase 3 mil ativações.

MUNDIPAGG INOVA AO DISPONIBILIZAR PAGAMENTO COM BITCOIN O ano mal começou e a Mundipagg trouxe uma novidade: a primeira plataforma do Brasil a oferecer o Bitcoin como meio de pagamento. A novidade foi lançada em parceira com o Grupo Reserva e chamou a atenção dos consumidores: foram mais de 100 pedidos nas primeiras 24h. A criptomoeda é tendência e disponibilizá-la aos clientes faz parte da estratégia da empresa de oferecer um pacote de soluções de pagamento completo, que pode ser flexibilizado e customizado de acordo com as necessidades dos lojistas. “Admiramos soluções disruptivas e acreditamos que pagamentos devem ser fáceis. A Reserva tem sido um grande parceiro nos últimos dois anos, e quando nos procuraram querendo inovar ao aceitar Bitcoin, abraçamos a ideia. Agora estamos estudando como levar o Bitcoin para novos clientes”, diz o CEO João Barcellos – que também anunciou estar por vir uma grande mudança acompanhada de diversas novidades para facilitar a vida dos clientes.

iMasters #25 Fevereiro 2018


32 // MOBILIDADE É TUDO

Evolução da persistência de dados para aplicativos móveis Por Ricardo Ogliari, Engenheiro Android no BTCjam

O

O ARTIGO DE HOJE começa de uma forma diferente e, logo, o leitor saberá o motivo. Para os desenvolvedores de aplicativos móveis um pouco mais antigos, a palavra Java ME soa de forma saudosista e desafiadora. Antes de a dupla iOS e Android dominar o mercado mobile e ditar os principais SDKs, plataformas e lojas virtuais, existia um sistema operacional chamado Symbian com uma plataforma de desenvolvimento líder, o Java ME. Mas por que relembrar isso em pleno 2018? Porque, naquele tempo, a persistência de dados era feita de forma um pouco arcaica, se comparada às tecnologias do mundo atual. Banco de dados relacional, banco de dados NoSQL, nada disso estava disponível para nós, desenvolvedores. A bola da vez era o Record Management System. A imagem abaixo mostra como era a persistência de dados com esse sistema:

iMasters #25 Fevereiro 2018

Record ID

Data

1

byte[] data

2

byte[] data

...

...

Quer dizer que não existiam tabelas, campos, tipos de dados, entre outros? Sim, tudo era armazenado como um vetor. Para saber quando começava e acabava um campo, era inserido um caractere especial nesse array unidimensional de bytes. Por exemplo: para salvar um registro com informações de um cliente: ricardo;ogliari;33;rua x, 123;passo fundo, essa string era transformada em vetor de bytes e persistida. Bem, mas as linguagens de programação para desenvolvimento móvel evoluíram, bem como seus SDKs, bibliotecas e,


// 33

consequentemente, a forma como os dados são persistidos. Tanto Android como iOS, os líderes de mercado, oferecem opções bastante similares. Porém, neste artigo vou focar na plataforma do Google. Basicamente, as duas principais maneiras de persistir informações no Android com API nativa são: utilizando um par de chave valor, chamado de Shared Preference, ou usando um banco de dados relacional convencional, com o SQLite. Considero ambas fáceis, se compararmos ao vetor de bytes que existia no Java ME. Porém, principalmente no relacional, o uso da famigerada classe que herda de SQLiteOpenHelper e a mistura com SQL e Java deixam alguns programadores inexperientes malucos. E com uma certa razão, diga-se de passagem. Porém, atualmente, existem bibliotecas que facilitam até mesmo o uso dessas APIs nativas do Android. E a facilidade e a modernidade no uso dessas soluções me inspiraram a escrever este pequeno artigo. O uso do Shared Preference já era simples e com uso de classes autoexplicativas, como mostra a listagem de código abaixo. Depois de recuperar e valorizar os objetos de SharedPreference e sua classe interna, Editor, basta chamar um dos métodos put com sufixo de um tipo primitivo, como o putInt. O primeiro parâmetro é a chave e o segundo, o valor. Por fim, o commit persistia esse par de dados.

SharedPreferences sharedPref = getActivity(). getPreferences(Context.MODE_ PRIVATE); SharedPreferences.Editor editor =

sharedPref.edit(); editor.putInt(“highScore”, newHighScore); editor.commit();

Mas isso pode e ficou ainda mais simples. Basta usar a TinyDB, como mostra a pequena listagem de código abaixo. A página do projeto no GitHub da biblioteca a descreve da seguinte forma: This class simplifies calls to SharedPreferences in a line of code. It can also do more like: saving a list of strings, integers and saving images. All in 1 line of code!

TinyDB tinydb = new TinyDB(context); tinydb.putInt(“highScore”, newHighScore);

A TinyDB me impressiona por conseguir simplificar e turbinar algo que já era simples. Todavia, o grande impacto no desenvolvimento é quando usamos bibliotecas que otimizam o uso de banco de dados relacional, ou seja, o SQLite. Até pouco tempo atrás, existiam diversas soluções de terceiros. Uma das mais famosas, e preferida também por este que vos fala, era a Realm. Ela, inclusive, oferece suporte para outras plataformas. A página oficial do Realm apresenta dados muito impressionantes sobre essa ferramenta de ORM (Object-relational mapping). Segue um resumo: Mais de 2 bilhões de usuários utilizam Realm; iMasters #25 Fevereiro 2018


34 // MOBILIDADE É TUDO

Na lista de algumas das empresas que utilizam o Realm constam Google, Amazon, eBay, IBM, Siemens, Nike, CISCO, Sony, SAP, Alibaba, Macdonald’s e Netflix. Suporte para Java, Swift, Objective-C, Javascript e Xamarim. Para exemplificar também como ele é simples, reproduzo aqui o trecho de código presente no site oficial do Realm:

//na definição da classe basta estender de RealmObject public class Dog extends RealmObject { public String name; public int age; } //um simples objeto é instanciado e, depois, será persistido. De forma indolor e sem //mistura com SQL Dog dog = new Dog(); dog.name = “Rex”; dog.age = 1; //trecho de código que efetivamente persiste o dado no banco de dados Realm realm = Realm. getDefaultInstance(); realm.beginTransaction(); realm.copyToRealm(dog); realm.commitTransaction(); //a pesquisa contém semelhança com SQL, porém, toda a pesquisa é configurada //com classes e métodos da linguagem de programação escolhida, neste caso, Java RealmResults<Dog> pups = realm.where(Dog.class) .lessThan(“age”, 2) .findAll();

iMasters #25 Fevereiro 2018

Talvez o único problema que existia na Realm foi solucionado pelo próprio Android: agora temos uma biblioteca oficial e padrão para uso de ORM nos nossos aplicativos, chamada de Room Persistance Library. Parafraseando a própria documentação: The Room persistence library provides an abstraction layer over SQLite to allow fluent database access while harnessing the full power of SQLite. O uso dessa biblioteca é ainda mais sofisticado, pois faz uso massivo de anotações para definir características de classes e sua persistência. Por exemplo, supondo que a nossa aplicação necessite salvar dados de clientes, três passos seriam necessários para fazer isso usando a Room. Em primeiro lugar, definir uma classe e inserir a anotação @Entity. Também é possível usar a @PrimaryKey para definir a chave primária com geração automática do valor:

@Entity public class Customer implements Serializable{ @PrimaryKey(autoGenerate = true) private int id; private String name; private String address; private String phone; //métodos getters e settres }

O segundo passo é a geração do famoso DAO (Data Access Object). É nesse ponto que as anotações deixam a classe extremamente legível. Veja abaixo:


// 35

@Dao public interface CustomerDAO { @Insert void createCustomer(Customer customer); @Query(“SELECT * FROM Customer”) List<Customer> readCustomers(); @Update void updateCustomer(Customer customer); @Delete void deleteCustomer(Customer customer); }

E por fim, mas não menos importante, uma classe que estende RoomDatabase. As anotações novamente são o ponto chave, definindo as entidades/tabelas do banco de dados, assim como a versão (lembram-se do construtor de SQLiteOpenHelper e a chamada ao super construtor?). Veja na listagem de código abaixo:

@Database(entities = {Customer. class}, version = 1) public abstract class DatabaseCtrl extends RoomDatabase { private static DatabaseCtrl instance; public static DatabaseCtrl

getDatabase(Context context) { if (instance == null) { instance = Room. databaseBuilder(context. getApplicationContext(), DatabaseCtrl.class, “meu_db”) .build(); } return INSTANCE; } public abstract CustomerDAO customerDAO(); }

Espero que o leitor tenha ficado tão impactado quanto eu fiquei ao conhecer a Room. A evolução na persistência de dados e o uso de bancos de dados para o mundo móvel simplesmente decolaram. Passamos de um modelo orientado a registro para acesso a um banco de dados relacional, através de uma biblioteca rica, utilizando padrões reconhecidos e amplamente aceitos no mercado, como anotações e singleton. E, cada vez mais, precisamos nos preocupar só com as regras de negócio e menos com SQL e/ou persistência.

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

iMasters #25 Fevereiro 2018


36 // GOVERNANÇA DE DADOS

GOVERNANÇA DE DADOS E BANCOS DE DADOS NOSQL Por Danielle Monteiro, Arquiteta de Dados na B3

O JARGÃO DIZ: dados são o novo petróleo. A realidade, por sua vez, afima: “dados podem ser a perdição da sua empresa”. Catastrófico? Pessimista? Eu diria realista, se a sua empresa não possuir governança de dados. De acordo com John Ladley, em seu livro Data Governance: How to Design, Deploy and Sustain an Effective Data Governance Program, a governança de dados é a organização e implementação de políticas, procedimentos, comitês, papéis e responsabilidades que delineiam e reforçam regras de comprometimento, direitos decisórios e prestação de contas para garantir o gerenciamento apropriado dos ativos de dados. Sendo assim, não entenda a governança de dados como o aumento da burocracia quando as empresas precisam ser ágeis, é um conceito que envolve diversas disciplinas, com foco em qualidade de dados, passando por avaliação, gerência, melhoria, monitoração, além de aspectos de segurança e privacidade (DMBoK). Leis, segurança, ética e a governança de dados Quando falamos de segurança, não estamos nos referindo apenas a controlar o acesso aos dados. É preciso garantir a proteção deles perante ameaças (acidentais ou intencionais), modificação não autorizada, roubo ou destruição. Dentro ainda do assunto segurança, temos mais um aspecto de extrema importância, que é a ética no uso dos dados. Com iMasters #25 Fevereiro 2018

o aumento do volume, com a variedade de formatos e usos dos dados, é preciso ter a preocupação com a possibilidade de análises causarem embaraços, desconfortos ou prejuízos para pessoas. Empresas éticas fazem o mundo ser melhor! E alguns países já têm leis que visam a garantir essa segurança e uma atuação ética por parte das empresas. Nos Estados Unidos, existe uma lei chamada Sarbanes Oxley, conhecida como SOX, criada em 2002 e que teve um grande impacto nos sistemas de informação. Isso porque os relatórios financeiros devem estar corretos, e em caso de erros nesses relatórios, os executivos da empresa podem ser punidos criminalmente. Agora, se a sua empresa atua na Europa, deve estar preparada para a General Data Protection Regulation – GDPR, que foi lançada em abril de 2016 e entrará em vigor no dia 25 de maio de 2018. É uma lei severa, cujo foco é a proteção dos dados dos residentes na Europa. A ideia central é dar aos cidadãos sob sua proteção o direito absoluto sobre os seus próprios dados. Mas de acordo com um estudo da SAS, 55% das empresas não estão aptas para a GPDR porque não possuem governança de dados. NoSQL De acordo com uma pesquisa feita pelo Gartner, 90% dos dados das empresas não são estruturados. Ou seja, não estão no formato tabular. É um grande


// 37

iMasters #25 Fevereiro 2018


38 // GOVERNANÇA DE DADOS

desafio fazer com que as empresas aproveitem as mais recentes tecnologias de banco de dados NoSQL, ao mesmo tempo em que tentam manter a integridade, qualidade e governança dos dados. Primeiro, precisamos esclarecer que ter um schema flexível não significa que os dados não precisam de governança. Os dados são usados em análises? Trazem alguma forma de lucro? São passíveis de auditoria? São usados em processos internos? Se divulgados, podem trazer problemas? Precisam ser compreendidos? Se você respondeu sim para qualquer uma dessas perguntas, seus dados precisam de governança, independentemente do seu modelo (relacional, chave-valor, documento, família de colunas ou grafos). Governança X Burocracia A complexidade em volta dos dados usados nas análises aumentou muito! Além dos bancos de dados relacionais com o seu schema, temos diversos bancos de dados NoSQL com schemas flexíveis e características bem diferentes. Como atender a toda essa complexidade? O segredo é elaborar um processo real (nada de copiar o processo de outras empresas ou implementar à risca o que está escrito no DMBok, por exemplo) e automatizar tudo o que é possível. Check list da governança de dados Este check list não tem a pretensão de ser um framework completo para a implementação da governança de dados. Se você precisa desse tipo de material, recomendo fortemente que você conheça o DMBok versão 2, que é a nova versão do corpo de conhecimento da gestão de dados. Este check list contém quatro pilares: Organização: Governança de dados precisa de um patrocinador. É indispensável que as iniciativas de governança de iMasters #25 Fevereiro 2018

dados sejam apoiadas e patrocinadas pelo alto escalão da organização; do contrário, vai falhar. Conselho de dados. Esse conselho tem como objetivo reunir diversos papéis para que todos garantam que a GD exista e seja viável. Gerenciamento de metadados: Modele seus dados. Quando a maioria dos dados era estruturada, muitas empresas utilizavam ferramentas CASE para criar modelos entidade-racionamento e neles incluíam alguma definição. E com os bancos de dados NoSQL como podemos proceder? Ainda não encontrei um diagrama que seja padrão para modelagem de cada tipo de banco de dados NoSQL. Por isso eu utilizo a notação UML, e ela tem me ajudado a entender melhor os dados que serão armazenados. Não veja esta etapa como sua inimiga! Entender os dados pode simplificar muito o trabalho de desenvolvimento! Crie e mantenha um dicionário de dados. Documente e disponibilize para as equipes o nome lógico dos seus atributos, a sua origem (fluxo de negócio e sistema), o seu data type lógico. Lembrando que o seu dicionário pode ter muitas outras informações eu recomendo no mínimo essas. Documente seus metadados: não chorem, amigos, esta etapa é importante e inclusive recomendo que sirva de insumo para a criação do seu dicionário. Eu gosto de manter a documentação e a modelagem na ferramenta CASE, mas nada impede de você usar um arquivo texto para documentar seus metadados. A informação e o acesso a ela são mais importantes que a ferramenta. Modelos de dados: Documente o nome do responsável pelos dados modelados; Sistema consumidor e fornecedor dos dados; Nome do banco de dados onde o modelo foi implementado.


// 39

No caso das da tabelas, coleções, arestas, nós, famílias de colunas: Nome lógico e físico; Definição, que não é cópia do nome lógico (pedi do de AD!); Período para expurgo; Tipo de carga (arquivo, script, tela...). No caso dos atributos, chaves e valores, documente: Nome lógico e físico; Definição; Tipo lógico e físico; Regras de qualidade e restrições; Origem; Criticidade para o processo de negócio (alta, média, baixa); Transformações realizadas; Nível de segurança requerido; Classificação (dado sem manipulação, transfor mado, validado, refinado). Segurança: Tenha políticas e ferramentas para controlar a autenticação e a autorização; Monitore o acesso aos dados no ambiente produtivo; Tenha vários ambientes. Amigos, não devemos fazer testes em produção! Por isso a empresa deve ter a capacidade de fornecer aos times ambientes que possibilitem a execução dos testes. Isso é extremamente crítico quando o assunto é inteligência artificial, por exemplo, uma vez que é preciso ter uma quantidade gra nde de dados para avaliar e treinar um algoritmo; Para cada ambiente, um nível de proteção. Ambientes não produtivos não precisam do mesmo nível de proteção do ambiente de produção, e não entenda isso como “liberar geral”; Mascare dados sensíveis. Para fazer testes com dados semelhantes aos dados produtivos, mascare os dados sensíveis. E eu espero que você veja o

quanto é importante saber e ter documentado que os dados são sensíveis. Qualidade de dados: Avalie a qualidade dos dados Uma das informações necessárias na documentação dos metadados é a definição das regras de qualidade. Elas são insumo para automatizações que validam se os valores dos dados estão corretos. A execução das validações deve gerar um relatório apresentado ao comitê de gestão dos dados, para que sejam definidas as estratégias de melhoria da qualidade. Governança de dados não é uma ferramenta ou um único processo que tem o poder de mudar a sua empresa e fazer dela uma empresa que fatura muito dinheiro porque possui dados. Me arrisco a definir a GD como uma mudança de cultura, na qual todos se responsabilizam pelos dados e usam a tecnologia, processos e pessoas para garantir a segurança, ética e qualidade dos dados. Quando o assunto é bancos de dados NoSQL, é comum, e extremamente perigoso, confundir esquema flexível com falta de governança. Ressalto que GD é indispensável, independentemente do modelo de dados! Com a governança, os dados podem realmente ser o petróleo da sua organização, mas tenha consciência de que sem ela os dados serão “a última pá de cal”.

Danielle Monteiro é mestre em Engenharia da Computação (IPT-USP), pós-graduada em Engenharia de Negócios (Centro Paula Souza) e graduada em Processamento de Dados (FATEC-SP). Trabalha com TI há mais de 15 anos e atualmente é Arquiteta de Dados na B3. É autora do blog DB4BEGINNERS.com e colabora com diversos blogs e comunidades.

DaniMonteiroDBA@DB4Beginners.com

iMasters #25 Fevereiro 2018


40 // POR DENTRO DO W3C

A revolução do blockchain

conheça a história dessa tecnologia e como ela promete mudar o mundo Por Rafael Sarres, para Redação iMasters

iMasters #25 Fevereiro 2018


// 41

O ano é 2008. Em novembro, o sistema financeiro

mundial permanecia em posição de impacto, apenas dois meses após a falência do quarto maior banco de investimento dos Estados Unidos, o Lehman Brothers. Governantes do mundo todo já imaginavam que a aterrisagem seria complicada, prevendo o que já sabemos que foi uma das maiores crises financeiras mundiais desde a famosa Depressão de 1929. Enquanto o mundo financeiro prendia a respiração, o que parecia cena de filme ocorria em um canto obscuro da Internet. Um intrigante e-mail aparece em uma lista de discussão sobre criptografia com o que se assemelha ao trabalho de um tripulante da nave Nabucodonosor. O autor do texto não era o Sr. Anderson na pele de Neo, mas Satoshi Nakamoto, cuja identidade real permanece em mistério até hoje. Esse documento revelava ao mundo, pela primeira vez, uma tecnologia desconhecida capaz de solucionar o dilema que, há décadas, desafiava os libertários virtuais, e abalar as bases do sistema financeiro estabelecido: um sistema global de dinheiro eletrônico capaz de operar na Internet de forma completamente distribuída, com relativo anonimato e independente de um terceiro confiável. Esse pode parecer um problema de simples solução para os que desconhecem os ideais da criptoanarquia, afinal pagamentos na Internet já eram uma realidade naquela data. Porém, trocas virtuais de valores apenas eram seguras se realizadas por meio de intermediários, ou seja, instituições financeiras, empresas de cartões de crédito, ou até mesmo empresas de telecomunicações que assumiam a responsabilidade da guarda dos registros dos clientes, incluindo seus saldos e transações. Essa intermediação significava que o imprescindível anonimato dos membros da comunidade criptoanárquica evaporava assim que uma interação financeira fosse realizada,

um grande desfalque nas possibilidades de interações da comunidade libertária virtual. Ou, pior, esse intermediário tem o poder de censurar, adulterar, ou até eliminar completamente os registros de um usuário sem deixar rastros, apenas editando seus registros internos. É nesse cenário que surge o Bitcoin, o sistema monetário distribuído idealizado no e-mail de Satoshi Nakamoto. Diferente do que poderíamos esperar de uma proposta de tecnologia tão inovadora, sua descrição é surpreendentemente simples, pois não apresenta nenhuma criptografia desconhecida pela humanidade. A resposta para o antigo impasse é apresentada em menos de dez páginas, cita apenas oito referências e utiliza algoritmos bem conhecidos como a função hash e criptografia assimétrica. Bitcoin, então, não é um software, mas um protocolo e a denominação de uma moeda (ou ativo) virtual. É possível identificar três pilares básicos do Bitcoin: algoritmos criptográficos como assinaturas digitais e hash; a estrutura de dados composta por blocos encadeados, o blockchain, o que seria a grande contribuição de Nakamoto; e, finalmente, o mecanismo de prova de trabalho. There is no coin Para entender a utilidade do blockchain, precisamos entender o problema que impedia a criação de uma iMasters #25 Fevereiro 2018


42 // CAPA

moeda virtual descentralizada. Portanto, é necessário entender superficialmente o funcionamento do Bitcoin, ignorando detalhes alheios ao foco do artigo, o blockchain. Uma das grandes confusões do Bitcoin é que não há a estrutura de moeda como muitos imaginariam a representação de uma moeda digital, ou seja, arquivos armazenados no computador pessoal equivalentes a cédulas monetárias. O protocolo funciona, na verdade, como um sistema de contabilidade no qual os usuários possuem uma ou mais contas (endereços), e por meio delas podem receber ou transferir valores. Os identificadores e senhas desses endereços são, respectivamente, as chaves públicas e privadas de um algoritmo criptográfico assimétrico. Assim, deter o controle de um endereço na rede Bitcoin resume-se apenas a ter o conhecimento da chave privada capaz de destravar os valores armazenados no endereço derivado da respectiva chave pública. Já as transferências no protocolo Bitcoin são compostas por um conjunto de entradas e saídas, no qual as entradas são identificadores de transações passadas onde valores foram recebidos, e que agora serão consumidos nessa transação. Similarmente, as saídas informam os valores e os endereços destinatários. Dessa forma, o saldo de um endereço é composto pelo somatório dos Bitcoins recebidos subtraído dos Bitcoins transferidos em toda história. Esse sistema é semelhante ao Método das Partidas Dobradas de contabilidade, ou seja, os valores creditados e debitados devem estar equilibrados em todas as contas envolvidas. iMasters #25 Fevereiro 2018

Parece complexo, mas não é tanto assim. Vamos esclarecer com um exemplo. Suponha que eu tenha recebido cinco Bitcoins em uma transação passada no endereço A e três Bitcoins em outra transação no endereço B. Ao adquirir um produto que custa sete Bitcoins de uma loja que detém o controle do endereço C, eu gero uma transação cujas entradas são esses dois identificadores de transações passadas dos endereços A e B, que totalizam oito Bitcoins, e duas saídas, uma de sete Bitcoins para o endereço C do vendedor e outra de um Bitcoin, o troco, para o endereço A, B ou qualquer outro que eu detenha a respectiva chave privada. Essa movimentação de valores está representada na figura 1.

Nesse momento, surge o primeiro pilar do protocolo: os algoritmos criptográficos. Para comprovar que os endereços A e B são meus, ou seja, que eu conheço as chaves privadas, eu assino cada entrada com a chave privada de seu respectivo endereço. Dessa forma, está comprovada a legitimidade do usufruto dos valores utilizados. É importante lembrar que a perda da chave privada significa a impos-


// 43

sibilidade de se gastar os valores do respectivo endereço, e, similarmente, o seu vazamento significa que outra pessoa poderá gastar todas as transações desse endereço. O grande desafio dessa arquitetura digital é garantir que sua transação tem “lastro”, ou seja, que o mesmo valor de transação passada não foi usado duas ou mais vezes como garantia em transações subsequentes. Esse é o famoso problema chamado gasto-duplo (double-spending). A solução parece muito simples, basta manter um registro digital com todas as transações já realizadas na rede, permitindo a auditoria prévia de cada nova transação proposta. Esse é exatamente o trabalho dos intermediários citados anteriormente. Se eu (infelizmente) não consigo sacar mais dinheiro do que tenho do banco, é porque a instituição mantém um histórico de todo dinheiro que recebi e gastei - logo, calcula exatamente quando eu tenho disponível. Porém, se o objetivo é não depender mais de um intermediário, quem manterá esse registro? Em quem podemos confiar para manter esse banco de dados íntegro? Para resolver esse problema é que surge o segundo pilar do Bitcoin: o blockchain, uma estrutura de dados na qual o registro público de todas as transações que já ocorreram na história do Bitcoin é armazenado. O nome blockchain deriva de sua estrutura interna, formada pelo encadeamento ordenado de blocos compostos por, dentre outras informações, as transações e o hash do bloco anterior. Esse longo registro é armazenado de forma distribuída por todos os nós da rede, utilizando transferências ponto-a-ponto; dessa forma, qualquer participante pode receber e auditar a sequência de transações completa para conferir sua consistência. Como o termo contábil para o registro de todas as transações é “Livro Razão”, ou “ledger” em inglês, o blockchain é também chamado de distributed ledger, originando o acrônimo também muito utilizado para referenciar tecnologias com propriedades semelhantes: o DLT (Distributed Ledger Technology). Mas, afinal, quem tem o direito de escrita no blockchain, pois trata-se de uma rede aberta e de livre participação? A resposta é simplesmente todos. Qualquer participante é livre para colaborar com a rede propondo novos blocos com transações, tornando-se um minerador. Mineradores recebem constan-

temente as transações geradas pelos usuários e as armazenam temporariamente em uma estrutura em memória chamada “mempool”. Após uma minuciosa análise da consistência de cada transação, que inclui a verificação de que não há gasto-duplo em suas transações de entrada, o minerador agrega transações em um bloco e o propõe à rede. Todos os participantes recebem essa proposta e a analisam, verificando novamente se todas as informações desse bloco atendem às regras. Caso o bloco seja aprovado pela auditoria distribuída, ele é incluído na ponta da cadeia de blocos, e seu minerador é recompensado pela criação de novos Bitcoins em seu endereço. É importante frisar que essa estrutura encadeada possui uma propriedade muito interessante: qualquer tentativa de alteração nos dados de um bloco consequentemente altera seu hash. Como essa informação está gravada no bloco seguinte, ela invalida toda a cadeia de blocos subsequentes. Porém, somente o blockchain não garante a integridade das informações, afinal, um participante malicioso pode trivialmente criar uma versão adulterada do registro apenas ajustando os hashes de todos os blocos subsequentes. Assim, o atacante poderia criar uma versão perfeitamente válida do blockchain apagando determinadas transações de seu interesse, impedindo que sua vítima identifique uma transação fraudulenta que utilize fundos já gastos. Ainda falta um mecanismo que permita aos participantes identificarem qual é a cadeia com maior apoio dos participantes da rede, e essa versão do blockchain será a única considerada válida sobre o histórico da rede. Para solucionar esse impasse, Nakamoto utiliza o terceiro pilar do Bitcoin: o sistema de prova de trabalho (PdT). Esse sistema exige que a solução de um problema criptográfico seja anexada a cada bloco que será proposto para a rede, cujo cálculo depende do conteúdo do bloco. Uma propriedade interessante desse sistema é a sua dificuldade, que aumenta proporcionalmente ao poder computacional agregado na rede, mantendo a taxa de geração de blocos relativamente constante. Essa taxa de geração é 10 minutos em média na rede Bitcoin. A figura 2 apresenta uma representação simplificada da estrutura do blockchain com a utilização da prova de trabalho. iMasters #25 Fevereiro 2018


44 // CAPA

Dessa forma, o participante malicioso não pode mais simplesmente adulterar os dados de um bloco arbitrário e reconstruir a cadeia apenas recalculando os novos hashes, pois todas as soluções dos problemas criptográficos dos blocos subsequentes também serão invalidadas. O ataque agora passou a exigir o recálculo de toda a prova de trabalho da cadeia original; logo, seu custo é proporcional ao trabalho dedicado à cadeia de blocos que se deseja adulterar. Logicamente, quanto mais poder de processamento dedicado à construção da cadeia de blocos original, maior será sua resiliência a ataques, principalmente a dados armazenados em blocos mais antigos. Por esse motivo, todos os participantes da rede consideram apenas a cadeia com maior trabalho agregado à sua construção como válida. As propriedades do blockchain Como exposto, os dados armazenados no blockchain adquirem características únicas. Primeiro, os dados são armazenados de forma transparente, permitindo a sua auditoria. Adicionalmente, é praticamente impossível adulterar os dados armazenados no blockchain - logo, eles são considerados imutáveis, e suas transações, irreversíveis. Essas características permitem aos participantes da rede a manutenção de um conjunto de fatos compartilhado em absoluta sincronia derivada de um processo de consenso entre os iMasters #25 Fevereiro 2018

participantes. Essa garantia permite que cada participante tenha não somente conhecimento dos fatos, mas a garantia de que os demais também detêm a mesma informação. Consequentemente, o protocolo é resistente a fraudes, pois as propostas de alterações são comprovadamente válidas e aderentes às regras do protocolo, resultado do consenso sobre a auditoria realizada por cada participante da rede. A rede colaborativa que mantém um registro em blockchain também possui peculiaridades interessantes. A primeira que podemos notar é sua alta resiliência, pois a tarefa de manutenção do blockchain é completamente distribuída entre os mineradores, que são totalmente complementares entre si. A inoperância de alguns participantes pouco afeta a rede como um todo. Outra caraterística notável é sua resistência à censura, pois o bloqueio a uma transação dependeria do conluio de praticamente todos os participantes, fato improvável em uma rede aberta com alto nível de descentralização e sem hierarquia definida. Porém, não existe almoço grátis. Essas características cobram um preço razoável em outras dimensões do blockchain, e as principais são a escalabilidade, a eficiência, a velocidade de transações e a privacidade. Como há apenas o acréscimo de dados em um fluxo constante de blocos, é cada vez mais difícil gerenciar essa quantidade de dados. O blockchain do Bitcoin, por exemplo, já possui aproximadamente 150 GB. Outro fator limitante é a sua eficiência, pois o mecanismo de prova de trabalho demanda uma quantidade proporcional de energia em relação à segurança contra fraudes. O elevado valor de mercado da moeda virtual atrai cada vez mais processamento dos mineradores, e consequentemente o maior é o consumo de energia agregado. A rede Bitcoin terminou 2017 consumindo aproximadamente 35 TWh, mais energia que um pequeno país como a Bulgária. Para manter a indispensável sincronia da rede, a taxa de criação de blocos e seu tamanho máximo são mantidos em níveis relativamente baixos pelo proto-


// 45

Mas, afinal, quem tem o direito de escrita no blockchain, pois trata-se de uma rede aberta e de livre participação? A resposta é simplesmente todos colo para garantir suficiente tempo de sua propagação a toda rede antes da produção de um novo bloco. Essas limitações restringem severamente a capacidade de transações na rede como um todo. Finalmente, como todos os dados e transações devem estar legíveis para a indispensável auditoria, a privacidade é bastante comprometida. O pseudoanonimato, que antes era possível pela simples desconexão entre o endereço utilizado e seu real proprietário, já é ameaçado por técnicas de análise do blockchain com o objetivo específico de descobrir os reais usuários por trás dos endereços. Esse tal de blockchain parece interessante... Como mostrado, o funcionamento do Bitcoin somente é possível devido ao conjunto anteriormente inédito de características em protocolos de tecnologia da informação. Não tardou para suas propriedades “mágicas” aparecerem em diferentes projetos e aplicações, que vão além da manutenção de um Livro Razão distribuído. O exemplo mais notório dessa nova classe de aplicações é o Ethereum. O Ethereum, além de suportar uma nova moeda virtual nativa chamada ether, permite a execução descentralizada de programas especiais, chamados de contratos inteligentes. Contratos inteligentes são programas armazenados no blockchain e executados por sequências de transações. Detalhando um pouco mais, um contrato é gravado em seu estado inicial, e a partir des-

se bloco ele pode ser executado por transações de participantes da rede gravadas em blocos subsequentes. De forma geral, um contrato inteligente é um programa determinístico orientado a eventos, cujo novo estado (código e dados) é gravado sequencialmente no blockchain em resposta a cada evento. Inicialmente, precisamos entender o que é um programa determinístico. Um programa não determinístico pode apresentar resultados diferentes, mesmo quando executado a partir dos mesmos parâmetros de entrada. Códigos que executam funções randômicas são bons exemplos disso. Obviamente, da mesma forma, um programa determinístico obrigatoriamente retornará sempre o mesmo resultado a partir de um conjunto de entrada. O protocolo Ethereum define uma máquina virtual específica para executar os contratos inteligentes, chamada Ethereum Virtual Machine (EVM). Essa especificação de códigos de operação propositalmente não suporta nenhuma função que possa gerar imprevisibilidade de resultado, garantindo que todos que executem um programa na EVM a partir de um estado sincronizado pelo blockchain e um conjunto de argumentos tenham sempre o mesmo resultado. Isso permite a mesma auditoria anteriormente citada no Bitcoin, e impede que um resultado incorreto de sua execução seja aceito pelos participantes da rede Ethereum. Como o contrato inteligente permanece dormente armazenado no blockchain até que seja invocado por uma transação, podemos dizer que ele é orientado a eventos. Alguma entidade, usuário ou até mesmo outro contrato deve provocar sua execução, que pode gerar a alteração de seu estado. O resultado é um sistema global de execução de programas extremamente resiliente e resistente a fraudes ou censura, as características anteriormente citadas. E o mais importante: como contratos inteligentes podem receber e movimentar a moeda nativa da plataforma, as moedas tornam-se programáveis, e os intermediários potencialmente podem ser substituídos por programas. Na teoria, as aplicações são intermináveis, e vão desde um simples bolão esportivo entre amigos, onde não é mais necessário rezar para o responsável do caixa não usufruir da arrecadação em uma noitada, até fechaduras residenciais inteligentes capazes de destravar ao receber o valor de aluguel para a temporada, mais uma caução antivandalismo que será devolvida na ausência de danos à propriedade ao fim da iMasters #25 Fevereiro 2018


46 // CAPA

Porém, os benefícios não se restringem ao sistema financeiro. Muitos outros setores da economia podem se beneficiar da tecnologia de registros distribuídos para melhorar o compartilhamento de informações entre diversos participantes estadia. Toda lógica é controlada por contratos inteligentes que custodiam os valores e os movimentam de acordo com o seu código. Na prática, porém, ainda há muitos obstáculos, usuais a uma tecnologia recente altamente inovadora. Como primeiro exemplo, cito a incapacidade de contratos inteligentes obterem informações do mundo exterior ao blockchain, como o time vencedor da rodada ou a integridade da propriedade após a saída do inquilino. Essa é uma área muito ativa em pesquisa, e as soluções que tenho acompanhado oscilam entre a trivial consulta a entidades confiáveis com presença no blockchain, chamadas oráculos, com reputação a zelar pela fidedignidade das informações prestadas, e ideias audaciosas como objetos com conexão ao blockchain para reportar informações como sua integridade física ou sua posição geográfica. iMasters #25 Fevereiro 2018

Outro grande desafio é a capacidade de garantir que as regras de negócio estão corretamente codificadas em um programa de computador, sem erros intencionais ocultos ou comportamentos não previstos. Como os contratos inteligentes são autônomos e respondem apenas ao seu código, uma vez publicado no blockchain e custodiante de valores muitas vezes elevados em moeda virtual, eles se tornam tentadoras pinhatas, apenas esperando um hacker com o bastão certo. A teoria em Ciência da Computação sobre a correção funcional de algoritmos é extensa e exige um formalismo que depende, inclusive, da linguagem de programação utilizada. Assim, a capacidade de verificação funcional é praticamente ausente nas plataformas atuais. Não é surpresa, então, o show de horrores que temos presenciado na rede Ethereum, desde o roubo de milhões em diversos contratos por simples erros de codificação, até o congelamento de outros tantos pela inadvertida desativação de um contrato do qual muitos outros contratos dependiam. O Império Contra-Ataca! Com o crescimento generalizado do interesse por moedas virtuais e blockchain e o aumento da cobertura midiática por agência de informação financeira, 2016 e 2017 tornaram-se anos de exploração da tecnologia, principalmente pelo sistema financeiro estabelecido, justamente o setor supostamente “ameaçado” pelas moedas virtuais. Várias empresas criaram produtos que exploram as virtudes do blockchain e aprimoram suas deficiências, buscando aplicar o DLT em casos reais de negócio. Não é concebível o uso de redes públicas totalmente descentralizadas para o suporte de processos internos de negócio de um setor tradicional e altamente regulado como o financeiro, logo, surge o blockchain permissionado. Sua principal diferença é a identificação e aprovação prévia de todo participante da rede, criando uma espécie de consórcio de compartilhamento de dados relevantes a processos de negócio interdependentes. Uma das principais diferenças entre uma rede permissionada, na qual todos os nós participantes são conhecidos, e uma rede pública de participação aberta é a ausência de necessidade do custoso algoritmo de prova de trabalho. Há várias opções de algoritmos de consenso para esse caso, alguns exemplos são baseados em confirmações explícitas dos respectivos envolvidos na transação, enquanto outros dependem de uma votação de todos os membros sobre a validade da


// 47

atualização. Há muito esforço na construção de plataformas baseadas, ou inspiradas, em blockchain, principalmente para redes fechadas. Dentre muitas que buscam espaço hoje, cito o conjunto de plataformas Hyperledger, a plataforma Corda, focada principalmente no sistema financeiro, e a plataforma Quorum, derivada do Ethereum. Ok, parece interessante. Mas o que dá para fazer com isso? Um dos principais focos na aplicação de tecnologias de registros compartilhados em empresas privadas é reduzir ineficiências derivadas da falta de uma visão única dos dados, gerando a necessidade de vários registros locais do mesmo acordo, muitas vezes com erros que invariavelmente demandarão enorme retrabalho para a reconciliação dos fatos divergentes. Em instituições financeiras, esse ponto é crucial, tendo em vista a quantidade de negócios que são realizados diariamente. Adicionalmente, o regulador do setor pode participar do DLT e acessar informações relevantes para o desempenho de suas responsabilidades em tempo real, permitindo tempestividade nas ações preventivas e dispensando a problemática de busca de dados após a ocorrência de problemas, muitas vezes dificultada por envolvidos no imbróglio. Porém, os benefícios não se restringem ao sistema financeiro. Muitos outros setores da economia podem se beneficiar da tecnologia de registros distribuídos para melhorar o compartilhamento de informações entre diversos participantes, onde uma entidade central confiável, como um controlador do grupo, não existe para hospedar um banco de dados centralizado. Nesse caso, quando maior a quantidade de participantes, maiores serão os benefícios. Esse é o motivo das experimentações nesse sentido em mercados como de petróleo e gás, automotivo e varejista, pois todos apresentam uma enorme cadeia de fornecedores, prestadores de serviços e parceiros, cada um gerando seu registro individual dos contratos e produtos entregues. Uma rede capaz de manter um registro sincronizado e descentralizado, capaz de unificar a visão de todos os participantes, e acessível a todos os envolvidos nesses setores proporcionaria elevados ganhos de eficiência.

Back... To the Future! Hoje, vislumbro o que nos espera no futuro. Moedas virtuais descentralizadas e sistemas sem intermediários já são uma realidade, porém ainda estão distantes do cidadão comum. Essas tecnologias ainda são um parque de diversões bastante arriscado para os aventureiros e inovadores, focado em um público usuário com um viés altamente tecnológico. Como vimos, ainda há muito que melhorar, mas não tenho dúvida de que a evolução ocorrerá. A base de minha convicção está na história: os primeiros automóveis eram máquinas horríveis, ineficientes e perigosas, a ponto de os legisladores da Pensilvânia, nos Estados Unidos, proporem uma lei em 1896 que obrigaria a todo motorista de uma “carroça sem cavalo” parar, desmantelar seu veículo e esconder suas peças nos arbustos ao cruzar com um rebanho na estrada. Esse árduo processo tinha por objetivo preservar a serenidade dos animais, ameaçada pela visão (e audição) de tamanha aberração tecnológica. Hoje, as vacas nem são capazes de ouvir a aproximação de um belo, eficiente e seguro automóvel elétrico da Tesla. Então, apesar de testemunhar o nascimento do primeiro e imperfeito blockchain, tenho certeza de que trata-se apenas do começo de uma era, e a evolução será inevitável. E, para terminar, não posso deixar de vislumbrar o que hoje estará pensando o protagonista de nossa história, Satoshi Nakamoto, provavelmente ainda a bordo da Nabucodonosor, enquanto olha atento para os caracteres verdes que descem vagarosamente em seu visor, relatando que ele é o pai da maior revolução tecnológica desde a Internet. Aviso: As opiniões contidas nesse artigo refletem exclusivamente as opiniões pessoais do autor.

Rafael Sarres é mestre em Ciência da Computação pela Universidade de Brasília. Atualmente, é integrante do grupo de pesquisa sobre DLT no Banco Central do Brasil e professor de pós-graduação nas instituições UniCeub e IESB, onde leciona sobre Certificação Digital, Transações Eletrônicas, Blockchain e Contratos Inteligentes.

rsarres@yahoo.com.br

iMasters #25 Fevereiro 2018


48 // POR DENTRO DO W3C

HTML 5.2 - O que a nova recomendação do W3C traz de novidade para o desenvolvimento Web? Por Reinaldo Ferraz , Especialista em desenvolvimento web do W3C Brasil

N

NO DIA 14 DE DEZEMBRO DE 2017, o W3C anunciou a publicação do HTML 5.2 (https://www.w3.org/TR/html52/) como uma recomendação do W3C - um importante passo para a evolução da construção do padrão, adicionando e removendo elementos conforme a necessidade e sem esperar anos por uma atualização (vale lembrar que o intervalo entre o padrão final do HTML4 e HTML5 foi de 18 anos). Isso reflete uma mudança no processo de padronização. O HTML5 foi publicado como recomendação em 2014 e as duas atualizações, HTML 5.1 e 5.2, foram publicadas como recomendações em 2017. Da mesma forma que o HTML 5.1 trouxe melhorias baseadas nas demandas de implementação (como o elemento <main>), no HTML 5.2 podemos encontrar também algumas novidades interessantes para o desenvolvimento Web. Novos recursos O elemento <dialog> foi único novo no HTML 5.2. Ele tem a função semântica de representar uma parte de um aplicativo no qual o usuário precisa executar uma tarefa, como uma caixa de diálogo ou uma janela.

iMasters #25 Fevereiro 2018

Dos novos atributos disponíveis na documentação, podemos destacar o allowpaymentrequest dentro do elemento <iframe>, que permite a integração com a Payment Request API, publicada pelo grupo de Web Payments. Também foi inserido no elemento <iframe> o valor “allow-presentation” para o atributo sandbox (também para integração com a Payment Request API). Nesta versão do documento, também foi incluída a integração com módulos no JavaScript. A documentação define o carregamento de módulos de JavaScript por <script type=”module”> e como um módulo será resolvido, obtido e avaliado. Foram também adicionados os métodos registerContentHandler(), isContentHandlerRegistered() e isProtocolHandlerRegistered(). O método registerProtocolHandler() permite que os sites se inscrevam como possíveis manipuladores para esquemas específicos. Por exemplo, um serviço de mensagens telefônicas online pode se registrar como um manipulador do esquema sms:, de modo que se o usuário clicar nesse link, ele tem a oportunidade de usar esse site.


// 49

Saíram do HTML 5.2 Os elementos <keygen>, <menu> e <menuitem>. Atributo inputmode para elementos <text> e os atributos de dropzone. Método showModalDialog. A Plugin API foi marcada como obsoleta. As seguintes construções agora são válidas no HTML 5.2: Utilização do elemento <style> dentro do elemento <body>. Múltiplos elementos <main> no DOM, desde que apenas um seja visível para o usuário. Possibilidade de ter um elemento <div> como filho de um elemento <dl>. Cabeçalhos dentro de um elemento <legend> em um <fieldset>. Essas são apenas algumas das mudanças no HTML5.2. Para conhecer todas as novidades dessa documentação, recomendo a leitura do documento HTML 5.2 Changes (https://www.w3.org/TR/ html52/changes.html).

A Web tem evoluído muito rápido, especialmente nos últimos anos. É fundamental acompanhar essa evolução e colaborar para sua construção, pois grande parte dos novos recursos vem da demanda de quem constrói a Web, ou seja, dos desenvolvedores. E as novidades não param por aí. O W3C já está trabalhando na próxima atualização do HTML5. Já é possível ter uma ideia do que vem por aí acompanhando o desenvolvimento do HTML 5.3 (https://www.w3.org/TR/html53/). Mas isso fica para o próximo artigo.

Reinaldo Ferraz é especialista em desenvolvimento web do W3C Brasil. É formado em desenho e computação gráfica e pós-graduado em design de hipermídia pela Universidade Anhembi Morumbi em São Paulo. Trabalha há mais de 12 anos com desenvolvimento web. Apaixonado por acessibilidade, usabilidade, padrões web, HTML, CSS, Star Wars e café sem açúcar. No Twitter, é @reinaldoferraz.

reinaldo@nic.br

iMasters #25 Fevereiro 2018


50 // ASP .NET

ASP.NET CORE 2

AUTENTICAÇÃO DE USUÁRIO VIA REDES SOCIAIS Por Renato Haddad, Diretor de TI

A NOVA VERSÃO do ASP.NET Core 2 implementa uma novidade em relação à autenticação do usuário. Agora, a autenticação tornou-se um único serviço, podendo, é claro, autenticar-se via login que será armazenado em algum repositório, ou ainda usando as redes sociais. O objetivo deste artigo é mostrar como configurar a autenticação via Google, Facebook, entre outros no seu projeto ASP.NET Core 2. E, como um único serviço, você deverá apenas configurar quais provedores externos deseja. Para simular o conteúdo, crie um projeto de ASP. NET Core 2 MVC no Visual Studio 2017 ou via linha de comando usando o “dotnet new mvc --auth Individual -f netcoreapp2.0”. Tudo começa no arquivo Startup.cs, que é a classe a ser executada assim que a aplicação é invocada. Nela é que todas as configurações e serviços deverão ser feitas. A lista de using a ser inserida, além das que o template insere, é:

using using using using using using

Microsoft.AspNetCore.Builder; Microsoft.AspNetCore.Identity; Microsoft.EntityFrameworkCore; Microsoft.AspNetCore.Hosting; Microsoft.Extensions.Configuration; Microsoft.Extensions.

iMasters #25 Fevereiro 2018

DependencyInjection; using Microsoft.AspNetCore.Authentication. Cookies; using Microsoft.AspNetCore.Authentication. OpenIdConnect; using Microsoft.AspNetCore.Authentication. JwtBearer;

O método Configure recebe como parâmetro o IApplicationBuilder app, e você deverá invocar o UseAuthentication() para habilitar todas a capacidade conforme as configurações que iremos definir. Na listagem a seguir, suprimi alguns códigos desnecessários.

public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseStaticFiles(); app.UseAuthentication(); app.UseMvc(routes => { routes.MapRoute(name: “default”, template: “{controller=Home}/


// 51

{action=Index}/{id?}”); }); }

Em seguida, é preciso configurar o método ConfigureServices, que é invocado em tempo de execução. E, graças à injeção de dependência que o .Net Core permite, você pode injetar qualquer serviço que quiser. Veja que na listagem a seguir, o método recebe uma coleção de serviços do tipo IServiceCollection, onde o AddDbContext é configurado para usar o Entity Framework com o banco de dados SQL Server, e a string de conexão está na chave DefaultConnection no arquivo appsettingos.json. E o AddIdentity implementa os dados do usuário e o role no mesmo banco de dados.

public void ConfigureServices(IServiceColle ction services) { services.AddDbContext<ApplicationDbCont ext>(options => options.UseSqlServer(Configuration.GetC onnectionString(“DefaultConnection”)));

services.AddIdentity<ApplicationUser, IdentityRole>() .AddEntityFrameworkStores<ApplicationD bContext>() .AddDefaultTokenProviders();

Como configurar o usuário em si? Em seguida, você deve configurar os dados do usuário em si, já que o IdentityOptions contém UserOptions, ClaimsIdentityOptions, PasswordOptions, LockoutOptions, SignInOptions e TokenOptions. Veja como estão setadas a senha do usuário, o Lockout e o e-mail único. Ou seja, todas as propriedades de cada tipo você pode e deve configurar de acordo com o nível de segurança desejado.

services.Configure<IdentityOptions>(optio ns => { // Password settings options.Password.RequireDigit = true; options.Password.RequiredLength = 8; options.Password.RequireNonAlphanumeric = false;

iMasters #25 Fevereiro 2018


52 // ASP .NET

options.Password.RequireUppercase = true; options.Password.RequireLowercase = false; options.Password.RequiredUniqueChars = 6; // Lockout settings options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30); options.Lockout.MaxFailedAccessAttempts = 10; options.Lockout.AllowedForNewUsers = true; // User settings options.User.RequireUniqueEmail = true; });

E como a autenticação com cookies é provida pelo ConfigureApplicationCookie, veja a seguir as propriedades para aceitar via http, quando expiram (daqui a 150 dias) as páginas de login, logout e acesso negado. Cabe ressaltar que neste artigo não mostrarei as páginas de login e logout, pois o template do MVC gera automaticamente.

services.ConfigureApplicationCookie(optio ns => { // Cookie settings options.Cookie.HttpOnly = true; options.Cookie.Expiration = TimeSpan. FromDays(150); options.LoginPath = “/Account/Login options.LogoutPath = “/Account/Logout options.AccessDeniedPath = “/Account/ AccessDenied options.SlidingExpiration = true; });

Já a autenticação via provedores externos, como Facebook, Google e Microsoft, requer que a sua apliiMasters #25 Fevereiro 2018

cação ASP.NET seja registrada nos sites de desenvolvedores deles (https://developers.facebook.com, https://developers.google.com), e serão geradas chaves para ClientID e ClientSecret. São exatamente essas chaves que você deverá inserir no Startup.cs, conforme a seguir.

// via facebook services.AddAuthentication() .AddFacebook(options => { options.AppId = Configuration[“auth:fac ebook:appid”]; options.AppSecret = Configuration[“auth :facebook:appsecret”]; }); // google services.AddAuthentication() .AddGoogle(options => { options.ClientId = Configuration[“auth:g oogle:clientid”]; options.ClientSecret = Configuration[“au th:google:clientsecret”]; }); // MS account services.AddAuthentication() .AddMicrosoftAccount(options => { options.ClientId = Configuration[“auth: microsoft:clientid”]; options.ClientSecret = Configuration[“au th:microsoft:clientsecret”]; });


// 53

E, para finalizar, veja mais dois provedores que usam JWT Bearer (JSON Web Token https://jwt.io/introduction/) e OpenID (http://openid.net/connect/), os quais têm sido bastante usados em várias aplicações. O JWT pode ser implementado em qualquer tipo de aplicação ASP.NET, independentemente da versão.

// JwtBearer autenticação services.AddAuthentication(JwtBearerDefau lts.AuthenticationScheme) .AddJwtBearer(options => { options.Audience = “http:// localhost:5001/”; options.Authority = “http:// localhost:5000/”; }); // OpenID Connect (OIDC) Authentication autenticação services.AddAuthentication(options => { options.DefaultScheme = CookieAuthenticationDefaults. AuthenticationScheme; options.DefaultChallengeScheme = OpenIdConnectDefaults. AuthenticationScheme; })

.AddCookie() .AddOpenIdConnect(options => { options.Authority = Configuration[“auth:oi dc:authority”]; options.ClientId = Configuration[“auth:oi dc:clientid”]; });

Centralizar todo tipo de autenticação em um único lugar é o que permite que o ASP.NET Core 2 não seja apenas um serviço que controla isso, tornando assim a vida do desenvolvedor mais simples e segura, sem ter que ficar escrevendo códigos para cada tipo de autenticação. Nos dias atuais, onde quase todo usuário tem conta em redes sociais, nada mais justo que permitir o acesso de forma simples, rápida e confiável.

Renato Haddad é diretor de TI e Microsoft Most Valuable Professional, ministra treinamentos de .NET, autor de livros, artigos e treinamentos de C#, ASP.NET, Power BI.

rehaddad@msn.com

iMasters #25 Fevereiro 2018


54 // INTELIGÊNCIA NADA ARTIFICIAL

Machine Learning aplicado à indústria 4.0 Por Alex Lattaro, Analista de sistemas

N

NESTA COLUNA, já falamos sobre vários modelos de IA baseados em comportamentos biológicos e, na última edição, chegamos a demonstrar a aplicação de muitos deles em jogos eletrônicos. Hoje, a ideia é ir um pouco de machine learning (ML) e sua aplicação na indústria 4.0. Primeiro, vamos observar alguns cenários nos quais conseguimos identificar a presença do ML. Nossa grande amiga Netflix é um exemplo. Com seus modelos de ML, ela consegue nos indicar filmes e séries dos quais podemos gostar, baseados naqueles a que já assistimos. A Amazon é outra grande utilizadora de ML - podemos ver isso nas indicações de livros, baseados em nossas compras, visitas, cliques etc. Mas o ML vai muito além de sugestões, e o que queremos trazer neste artigo é uma dessas outras aplicações. Acredito que uma das maiores aplicações de ML seja em análises preditivas, que se baseiam na possibilidade de prever um comportamento tendo como base comportamentos passados. Mas antes de irmos para a aplicação, precisamos entender alguns algoritmos de ML. Temos basicamente três grandes grupos: aprendizagem supervisionada, semissupervisionada e nãosupervisionada.

iMasters #25 Fevereiro 2018

Abaixo seguem alguns exemplos de aprendizagem supervisionada e não supervisionada. Aprendizagem supervisionada Árvores de decisão É um algoritmo baseado em um gráfico ou modelo de decisões. Em suma, ele permite que você tome uma decisão correta (mais assertiva) baseado em um conjunto mínimo de perguntas realizadas. É comumente utilizado para resolver problemas complexos decompondo-os em problemas menores. E esta técnica pode ser utilizada de maneira recursiva, ou seja, aplicar a decomposição em cada subproblema. Em uma árvore de decisão, cada nó é responsável por um teste de atributo. Cada ramo descendente representa um possível valor do atributo, e cada percurso (raiz à folha) representa uma regra de classificação. O algoritmo base de uma árvore de decisão consiste em: 1 Identificar um atributo; 2. Estender a árvore adicionando um ramo para cada valor do atributo;


// 55

3. Passar os exemplos para as folhas, ou seja, levar em consideração o valor escolhido para cada atributo; 4. Se todos os exemplos são da mesma classe, devemos associar essa classe à folha; caso contrário, devemos refazer os passos anteriores. A ideia aqui não é aprofundar muito em cada algoritmo, e sim apenas apresentá-lo. Caso você queira entender um pouco mais sobre árvores de decisão, recomendo que você estude um pouco mais, pois para desenvolver uma boa árvore de decisão, é preciso definir os critérios para a escolha do atributo, caracterizar as medidas de partição, entender como funciona a entropia para calcular a aleatoriedade

4 3

de uma variável, critérios para fazer com que a árvore pare, entre outros. Regressão linear de mínimos quadrados Muito utilizado em estatística, este modelo consiste em traçar um comportamento comum até comportamentos aleatórios. Observando a imagem abaixo, podemos entender um pouco melhor. A estratégia mais comum para resolver esse problema é a de mínimos quadrados comuns. Para realizar essa tarefa, você desenha uma linha e, para cada um dos pontos de dados, mede a distância vertical entre o ponto e a linha. Depois disso, basta somá-los. A linha ajustada deve ser aquela em que essa soma de distâncias é a menor possível.

Datapoints Regression

2 1 0 0.2

0.4

0.6

0.8

1.0 iMasters #25 Fevereiro 2018


56 // INTELIGÊNCIA NADA ARTIFICIAL

Aprendizagem não supervisionada Algoritmos de agrupamento (clustering) Basicamente, é reunir um conjunto de dados semelhantes em um mesmo grupo (cluster). Existem vários tipos de algoritmos de cluster: Baseado em Centroid; Baseado em conectividade; Baseado em densidade; Probabilístico; Redução de dimensionalidade; Redes neurais/deep learning. Esses algoritmos de agrupamento são muito utilizados em bioinformática, por exemplo. No estudo do genoma, a análise de dados de expressão gênica tem utilizado técnicas de agrupamento para identificar possíveis grupos de genes. Análise de componentes independentes (ICA) É uma análise estatística que revela fatores ocultos presentes em conjuntos de variáveis aleatórias, medições ou sinais. Pense na ICA como um algoritmo capaz de gerar modelos para os dados multivariados observados (um banco de dados muito grande e com N tipos de dados). Neste modelo, as variáveis dos dados vão misturar lineares de variáveis latentes desconhecidas, assim como o sistema que misturou. Este é um pouco confuso, mas vamos observar um exemplo para facilitar a nossa vida. Este tipo de algoritmo é comumente utilizado em um problema chamada “cocktail party” ou separação de siiMasters #25 Fevereiro 2018

nais de áudio. Pense em duas pessoas em uma sala, as duas com um microfone de captação de áudio. Elas estão conversando. Os sensores precisam identificar e separar os áudios e dizer a qual pessoa eles pertencem. Ficou mais claro agora? Além disso, podemos utilizar o ICA em imagens digitais, bancos de dados de documentos, indicadores econômicos e medições psicométricas. Aplicação do ML na indústria Imagine uma indústria com vários sensores instalados em todas as máquinas, gerando Teradados que alimentam uma rede de aprendizado de máquina na qual esses dados são analisados em tempo real, gerando insights sobre o funcionamento dela, desde quando uma determinada peça precisa ser substituída até em qual temperatura ela funciona sem que haja prejuízos físicos, entre outros fatores. Atualmente, isso é possível, porém não é tão simples quanto parece. Tudo começa na linha de produção, na qual os dados são gerados e enviados para armazenamento. Esses dados, posteriormente, serão utilizados para treinar um modelo preditivo. Para isso, é necessário que seja feita uma classificação desses dados. O processo de classificação varia de acordo com o problema que se deseja resolver. O método de classificação binária, por exemplo, é fundamentado nas árvores de decisão, sendo uma extensão dos modelos de regressão, mas não é restrito à classificação. Esse método é baseado na estratificação binária das covariáveis que levam à tomada de decisão. Este modelo estatístico pode ser utilizado em algo-


// 57

ritmos de previsão, como indicar se uma máquina quebra ou não quando atingir determinada temperatura. Outro modelo estatístico usado na criação de modelos preditivos de aprendizado de máquina é a classificação de classes. Aqui, os dados são agrupados por proximidade, e a frequência com que aparecem também é levada em consideração. É comumente utilizado para análises de dados subjetivos – na indústria, por exemplo, podemos enxergar isso como o desgaste de uma correia. Após os dados serem coletados por meio dos sensores, armazenados e analisados por meio de modelos estatísticos e matemáticos, eles são enviados para a construção dos modelos de predição – leia-se: aprendizado de máquina. Existem n frameworks e softwares que podem aplicar o ML para nós sem que tenhamos muito trabalho. Nesses programas, podemos simplesmente inserir nosso banco de dados, escolher o algoritmo e aplicar Paretto.

Porém, nós somos desenvolvedores de sistemas. Sendo assim, precisamos saber como aplicar esses algoritmos e entender qual é o melhor para cada situação. Precisamos colocar esse algoritmo funcionando dentro do nosso código. E, pensando um pouco além do código, precisamos que nossa aplicação, nossa inteligência e nosso aprendizado de máquina sejam justos e éticos. Ou seja, precisamos ter cuidado com os dados inseridos no treinamento, pois, como já cansamos de ver, muitos programas desenvolvidos por nós acabam por se tornar, digamos, preconceituosos. Que tal pensarmos em ética no código?

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 #25 Fevereiro 2018


58 // DEVOPS

A TENDÊNCIA DEVOPS E COMO ELA SE RELACIONA COM O PROFISSIONAL DE TI Por Gabriela Dias, Diretora de Operações na 4Linux

“By 2018, the transition to agile, DevOps and web-scale IT practices will become as disruptive to IT as the adoption of lean was to manufacturing during the 1980s. [Gartner]” 1

NO ÚLTIMO ANO, a empresa Gartner, em seus famosos relatórios de tendências, previu que a transição para uma TI Ágil nas organizações é algo inevitável tanto sob a ótica do desenvolvimento como de operações. Na Tecnologia da Informação, a transformação digital é um tema que está em voga, e o fato de que ela será possível nas empresas somente através da adoção de métodos ágeis é indiscutível. Mas como o DevOps contribui para uma TI Ágil? iMasters #25 Fevereiro 2018


// 59

A resposta para essa pergunta é muito simples, embora DevOps seja um termo tão amplo e cada um tenha sua própria perspectiva e opinião. A cultura DevOps surgiu quase que como uma consequência do Manifesto Ágil, movimento em que as equipes de desenvolvimento começaram a entregar releases de softwares de forma mais rápida. Isso gerou uma certa preocupação por parte da área de operações, que passou a precisar acompanhar essa velocidade sem reduzir a qualidade e, principalmente, a estabilidade do ambiente. Nesse sentido, podemos dizer que o DevOps surgiu para unificar as práticas de desenvolvimento ágil e outras metodologias para todos os segmentos da TI, criando uma verdadeira união

entre o gerenciamento de toda a infraestrutura e o desenvolvimento de softwares. Isso gera benefícios riquíssimos para as organizações, entre os quais podemos destacar a melhor comunicação e a maior colaboração entre as áreas de desenvolvimento e infraestrutura, reduzindo os conflitos históricos que essas áreas possuem entre elas. Isso resulta em um aumento da produtividade, possibilitando entregas mais rápidas e de maior qualidade, além de reduzir a quantidade de falhas na implementação das mudanças, garantir um melhor “Até 2018, a transição para as práticas de TI Ágeis, DevOps e Web-Scale será tão perturbadora para a TI quanto a adoção do Lean foi para as fábricas durante a década de 1980.” - http://ow.ly/AKlQ30hFW9z 1

iMasters #25 Fevereiro 2018


60 // DEVOPS

desempenho e estabilidade nos ambientes, diminuir o tempo de paradas e indisponibilidade e, consequentemente, aumentar o valor do negócio. A RightScale disponibiliza anualmente um estudo que tem como principal objetivo analisar como está a adoção de Cloud e DevOps no mundo. No ano passado, chegamos a números impressionantes - 84% das grandes corporações e 72% das pequenas e médias empresas estão adotando DevOps -, que nos mostram que nos próximos anos é possível que o DevOps esteja presente em todas as empresas que buscam acompanhar a velocidade e a competitividade do mercado atual. Nota-se o quão expressivo é o impacto que o DevOps vem gerando em indivíduos e organizações que buscam inovação e excelência na oferta de produtos e serviços. Se analisarmos os últimos cinco anos, veremos como é valorosa a proposta colocada pelo DevOps, pois não apenas surgiram ferramentas que auxiliam a implementação do DevOps em uma organização, como também foram criados diversos cargos para que seja possível sustentar a adoção desse novo cenário. Considerando as ferramentas, um grande exemplo a ser destacado é o Docker, que irá completar cinco anos de existência em março de 2018 e já revolucionou a forma como entregamos softwares e administramos servidores baseado em containers. Certamente ações como criar uma pipeline de entrega, escalar aplicações, monitorar ambientes, trabalhar com microsserviços, entre outras, ficaram mais fáceis depois do surgimento do Docker. No evento DockerCon de 2017, o CEO do Docker, Ben Golub, compartilhou algumas estatísticas sobre o uso do Docker nos últimos anos. Vale ressaltar entre elas o aumento de 77.000% da referência ao Docker nas vagas de emprego divulgadas não só para a área de desenvolvimento, onde cada vez mais as empresas estão repensando suas aplicações para rodar em containers, como mas também na área de infraestrutura, principalmente exigindo habilidades de orquestração iMasters #25 Fevereiro 2018

e clusterização de infraestruturas baseadas em Docker (http://ow.ly/z2jk30hFWrT). Se analisarmos por uma ótica de carreira, o DevOps também possibilitou uma roupagem diferente para alguns cargos, dando uma relevância maior a equipes multidisciplinares. Enquanto na TI tradicional, desenvolvedores de softwares ficavam isolados e precisavam ter apenas habilidades em desenvolvimento, quando adotamos uma cultura DevOps, é esperado que os times

Transformação Digital é uma nova abordagem onde as empresas estão dando um papel essencial para a Tecnologia da Informação para reestruturar seus processos, modelo de negócio e introduzir uma cultura digital utilizando o alcance e o poder da internet com o objetivo de melhorar o desempenho e garantir resultados melhores em seu negócio.

trabalhem unidos e que ambas as áreas tenham um conhecimento mais abrangente, sendo necessário sair um pouco de sua zona de conforto. Não apenas surgiram cargos específicos relacionados a DevOps nesses últimos anos, como Arquiteto DevOps, Engenheiro DevOps, Analista DevOps, que buscam profissionais que consigam navegar muito bem entre desenvolvimento e operações, como também cargos tradicionais passaram a receber uma influência do DevOps em seus títulos e em suas descrições, como DBA DevOps e Analista de Infraestrutura DevOps, como informa um estudo feito no site Indeed, que é um dos principais sites de recrutamento do mundo: “O número de empregos que mencionam DevOps cresceu 1485% nos últimos quatro anos” 2.

Para contribuir com esse panorama, diversas empresas como a AWS (http://ow.ly/BIed30hFXnk)


// 61

e a Microsoft (http://ow.ly/W2gx30hFXpY) começaram a criar certificações profissionais como uma forma de qualificar profissionais para o mercado de trabalho, auxiliando os empregadores na hora de selecionar candidatos e garantindo que estes possuam habilidades que de fato irão contribuir para a adoção de DevOps em suas organizações. Só em 2017, duas grandes instituições do ramo de certificações lançaram suas certificações DevOps: a Exin (http://ow.ly/aipD30hFXA5), trazendo uma proposta de certificação mais teórica focada nos pilares e práticas DevOps que um candidato precisa dominar para estar apto a fazer parte de times que visam à adoção do DevOps, e a LPI - Linux Professional Institute (http://ow.ly/D6eq30hFXDs), com uma proposta mais técnica criando uma certificação com base nas principais ferramentas que um profissional precisa dominar para de fato fazer o DevOps acontecer. O mais interessante dessa última certificação é que a prova exige conhecimentos não só em administração de sistemas, abordando ferramentas como Puppet, Docker, Vagrant e Ansible em sua lista de pré-requisitos, como também exige conhecimentos em desenvolvimento de software, cobrando habilidades em ferramentas como Git e Jenkins, o que reafirma a importância de um profissional mais completo. 2

https://goo.gl/nBaVVM

Com isso, conseguimos ver uma pequena amostra para nos dar uma visão da importância para nós, profissionais de TI, estarmos bem posicionados com relação a DevOps e metodologias ágeis, não só para elevar o nível de nossa carreira profissional, como também para sermos protagonistas na estratégia de transformação digital de nossas respectivas empresas, seja você um colaborador ou empreendedor. Que tal começar este ano revendo como está sua estratégia voltada para o DevOps para que você realmente faça a diferença em 2018?

Gabriela Dias tem mais de 15 anos de experiência em projetos FOSS (Free and Open Source Software) e entusiasta DevOps. Atualmente, é Diretora de Operações na empresa 4Linux, sendo responsável pelas áreas de Cloud, DevOps, Infraestrutura, Treinamento, como também atua em projetos de missão crítica. Atuou como Engenheira de Projetos na HP-Brasil, desenhando soluções na plataforma Linux/Unix para grandes corporações como a Vale do Rio Doce. Possui as certificações LPI DevOps Engineer, DevOps Master, RHCE, RHCSA, Zabbix Certified, LFCS, LFCE. Procura estudar bastante sobre Agile, Práticas DevOps, Cloud Computing, Containers e Infra Ágil. gabriela.dias@4linux.com.br iMasters #25 Fevereiro 2018


62 // BLOCKCHAIN

O QUE É ETHEREUM? Por Henrique Leite, Desenvolvedor de produtos no Mercado Pago

Ethereum é uma plataforma descentralizada para rodar contratos inteligentes. Em outras palavras, é um software que utiliza um protocolo peer to peer e blockchain para registrar suas transações. Ao usar o blockchain, ele garante que as transações são únicas, imutáveis e que vão estar em uma rede de servidores distribuídos. Cada servidor pode ser o seu computador, é como se aquela sua aplicação que armazena os dados em um banco de dados SQL agora estivesse guardando os dados em máquinas distribuídas pelo mundo todo na máquina de várias pessoas. Vamos dar um passo atrás. Você já deve ter ouvido de Bitcoin, certo? O Bitcoin é conhecido como uma moeda virtual, mas também é uma arquitetura de software peer to peer. Sua arquitetura é complexa e incrível, mas vou tentar explicar de maneira simples para facilitar as coisas. Imagine que ao instalar o software do Bitcoin ele vai buscar na Internet outra instalação para que ele possa atualizar os dados. Esses dados são os registros que foram realizados, e a isso chamamos de livro registro ou cadeia de blocos (Blockchain). Então, assim que ele encontra outra instalação confiável, ele começa a fazer o download dos blocos para o local da instalação - nesse caso, sua máquina. Mas o que são esses dados no Blockchain? São transações únicas e imutáveis realizadas entre endereços na Internet, e essas transações, no caso do Bitcoin, têm a representação de uma moeda - pelo menos foi isto que os criadores desejaram ser na sua iMasters #25 Fevereiro 2018

criação: uma plataforma para envio de dinheiro sem intermediadores, ou seja, descentralizada. E desde a sua criação, o Bitcoin vem se mostrando como uma aplicação à prova de fraudes, não existe nenhum registro de violação dos dados armazenados no Blockchain. No white paper a seguir, isso fica mais claro, já que a forma como sua arquitetura foi desenhada dificulta que os dados sejam violados. E durante a evolução do Bitcoin, surgiu o Ethereum, uma plataforma com a arquitetura base do Bitcoin, mas com algumas funcionalidades extras, e a principal delas é a capacidade de interpretar regras de negócios e transformá-las em transações no Blockchain. Essas regras de negócios são escritas em uma linguagem de programação e interpretadas por uma EVM (Ethereum Virtual Machine) simplificada. Você cria uma classe com regras de negócios (Smart Contracts), e essas classes são interpretadas pela EVM e registradas como transações no Blockchain. Dessa forma, criamos classes com regras definidas em uma base que não pode ser alterada em uma rede distribuída. Ou seja, aquilo que foi escrito não pode ser mais alterado uma vez armazenado. Podemos criar soluções nas quais não existe a intermediação de humanos. Sendo assim, o Ethereum possibilitou a tokenização de outros ativos além de uma moeda. Pensem que agora podemos digitalizar em uma rede distribuída e garantir a unicidade de uma música, imóvel, ações de uma empresa, contratos, livros etc.


// 63

Como funciona o Blockchain do Ethereum e quais as diferenças e vantagens em relação ao Bitcoin? Ficou clara a diferença entre Bitcoin e Ethereum? Ambos são plataformas que rodam um protocolo peer to peer e também armazenam os dados em um Blockchain. A principal diferença é que o Ethereum utiliza a EVM, possibilitando a criação de transações baseadas em regras de negócios, que chamamos de Smart Contracts. Enquanto o Bitcoin foi criado para ser uma moeda, o Ethereum foi criado para poder digitalizar qualquer ativo, como um automóvel, casa, empresa, um contrato de prestação de serviços etc. Para começar a criar projetos descentralizados em uma arquitetura Blockchain, existem muitos conteúdos na Internet e, inclusive, o próprio site da Ethereum. Mas vou dar umas dicas aqui para vocês conseguirem criar o primeiro Smart Contracts de Hello World.

Exemplo:

geth help NAME: geth - the go-ethereum command line interface Copyright 2013-2017 The go-ethereum Authors USAGE: geth [options] command [command options] [arguments...] VERSION: 1.7.0-stable-6c6c7b2a

Montar ambiente: Baixem o GETH e o MIST; aqui tem um vídeo com dicas de como instalar: https://www.youtube.com/ playlist?list=PLpeZX9766scfhOxuHdL9RvT0m-KINk4_6 Baixar o GETH: https://geth.ethereum.org/downloads/

COMMANDS: account Manage accounts attach Start an interactive JavaScript environment (connect to node) bug opens a window to report a bug on the geth repo

Em seguida, adicione o endereço do executável nas variáveis de ambiente do seu computador, para que você possa executá-lo no seu terminal. O Geth é o software do Ethereum desenvolvido em GoLang que vai possibilitar que seu computador seja um nó da rede. Assim, você vai poder participar de uma rede Blockchain Ethereum e criar soluções distribuidas e descentralizadas. Após instalar o GETH e adicioná-lo em suas variáveis de ambiente, você pode testar o comando no terminal: geth help para visualizar os comandos.

Se você digitar geth, ele vai se conectar à rede principal e baixar os blocos para sua máquina. E caso você queira apenas desenvolver, você pode só digitar geth --dev para simular uma rede em modo privado. geth (ambiente mainnet e existe custo para rodar seus contratos) geth --testnet (ambiente homologação de testnet, sem custo) geth --dev --rpc --rpcapi ‘web3, personal, admin, eth’ (ambiente de desenvolvimento, sem custo) iMasters #25 Fevereiro 2018


64 // BLOCKCHAIN

Uma vez baixado o geth, você agora pode baixar o Mist, que é uma ferramenta web para acessar seu nó e executar comandos, ele facilita muito a compilação de contratos e testes. Download: https://github.com/ethereum/mist/ releases Você deve abrir o Mist apontado para sua rede privada. Para simplificar, imagine que você terá seu servidor rodando (GETH) e agora você precisa acessá-lo utilizando o Mist. Para isso, adicione no caminho --rpc http://localhost:8545 o endereço do executável do seu Mist. Ex: mist.exe --rpc http://localhost:8545 O Mist vai abrir e acessar seu nó que está rodando em modo de desenvolvimento. Note que você pode criar novas usuários e fazer transferência de tokens, que no nosso caso é Ether (fictício). Ahh... Não falamos do Ether certo? O Ether é o token que roda na rede Ethereum. Tudo que é executado na rede é pago através de Ether, e o nome que foi dado a essa taxa é Gas. É através desse gas que mantemos a rede rodando, e é isso que incentiva que outras pessoas possam processar nossas transações em suas máquinas para que elas se tornem válidas no Blockchain. Voltando, agora com o geth rodando e o mist aberto, podemos compilar nosso Smart Contract. Vamos utilizar um contrato desenvolvido na linguagem Solidity, que é a principal utilizada em Ethereum. Copiem o código Greeter do site da Ethereum: https://www.ethereum.org/greeter Nota: Alterei o contrato, pois a versão do site não está compilando na versão 1.8 do Solidity.

pragma solidity ^0.4.18; contract mortal {

iMasters #25 Fevereiro 2018

/* Define variable owner of the type address */ address owner; /* This function is executed at initialization and sets the owner of the contract */ function mortal() public { owner = msg. sender; } /* Function to recover the funds on the contract */ function kill() public { if (msg.sender == owner) selfdestruct(owner); } } contract greeter is mortal { /* Define variable greeting of the type string */ string greeting; /* This runs when the contract is executed */ function greeter(string _greeting) public { greeting = _greeting; } /* Main function */ function greet() public view returns (string) { return greeting; } }

Dentro do Mist em Contratos > Subir Novo Contrato. Exemplo:


// 65

iMasters #25 Fevereiro 2018


66 // BLOCKCHAIN

Após compilar seu contrato, você pode testá-lo pelo próprio MIST, exemplo:

Assim, realizamos o deploy do nosso Smart Contract de hello world no Blockchain do Ethereum. Digamos que isso é apenas a “pontinha do iceberg” e existe muito trabalho pela frente. Mostrei para vocês de uma forma simplificada o potencial do Blockchain e acredito que estamos em um momento novo da Internet no qual podemos criar soluções transparentes e descentralizadas. Isso não é simples, é complexo, envolve vários fatores externos à tecnologia. Anos atrás, o próprio Bitcoin era visto como uma moeda para meios ilegais, e hoje percebemos a quantidade de benefícios que não só ele, mas a tecnologia pode nos fornecer. Nosso papel agora é pensar em aplicações nas quais todos possam ganhar de forma justa e transparente, em um novo mundo mais horizontal e com menos corrupção, no qual os poderes possam ser descentralizados. Por outro lado, é um novo momento para criar as mesmas ferramentas existentes, mas em uma arquitetura Blockchain. Exemplos disso são o arcade.city, que é o “Uber”, e também a paratii.video, que é novo “YouTube” - ambos são aplicações descentralizadas. Por que não criar seguros, bancos, companhias de músicas, reservas de hospedagens, doações, logísticas, registro de imóveis, músicas, livros etc.? Ou seja, estamos presenciando uma nova oportunidade de iMasters #25 Fevereiro 2018

criar novos produtos em uma nova Internet de valor que é o Blockchain. Boa sorte a todos nós #goblockchain! Grupos com eventos: https://www.meetup.com/pt-BR/ethereum_sp https://www.meetup.com/pt-BR/BlockchainDevs/ https://www.facebook.com/groups/1137809083017105/

Fontes: https://bitcoin.org/bitcoin.pdf https://ethereum.org/ https://arcade.city/ http://paratii.video/ https://en.wikipedia.org/wiki/Smart_contract https://solidity.readthedocs.io/en/develop/

Henrique Leite é desenvolvedor de Produtos para Latam no Mercado Pago e apaixonado por desenvolver soluções que melhoram o dia a dia das pessoas. É fundador e colaborador da plataforma GoBlockchain.io e está trabalhando e estudando Blockchain há dois anos.

fale.henrique@gmail.com


DROPS DO MERCADO CONHEÇA AS NOVIDADES DA FIAP PARA 2018 A FIAP é tecnologia, inovação e negócios. É para quem pensa o novo. Por isso, traz tantas novidades. A faculdade acaba de criar 3 cursos de Graduação: Defesa Cibernética, Marketing Digital & Data Science e Produção Multimídia. E está lançando 3 MBAs: Artificial Intelligence & Machine Learning, Digital Business e Health Tech. Além dos cursos presenciais e on-line de Graduação e MBA, a FIAP também tem o SHIFT: mais de 50 cursos de curta duração. FIAP. Future-se: fiap.com.br

REVENDA CPANEL COM PLANOS VPS, DISCO SSD E WHMCS Para melhor atender à necessidade dos seus clientes e evoluir seu portfólio cloud para o mercado, a Locaweb lançou novos planos de Revenda cPanel com infraestrutura VPS, disco SSD e WHMCS incluso. Confira seus 3 principais benefícios: Produtividade: a infraestrutura e atualizações periódicas é de responsabilidade da empresa. Sendo assim, desenvolvedores e agências focam na gestão de seus clientes e projetos por meio do painel cPanel e automatizam suas cobranças pelo WHMCS. Performance: garantida pela exclusividade no uso da memória e processamento para a aplicação e rapidez do disco SSD tanto para leitura/escrita no banco, quanto para e-mail. Usabilidade: Com acesso SSH na camada de aplicação para agilidade na configuração e com a interface Camaleon Blue no RoundCube para maior praticidade no webmail. Das atuais soluções de mercado nacional, está é a primeira opção a entregar o cPanel, a partir de R$ 109,90, com a junção desses 3 pilares.

// 67

KINGHOST COMEÇA A ACEITAR BITCOINS E LITECOINS COMO PAGAMENTO A KingHost começou a aceitar as criptomoedas bitcoins e litecoins como forma de pagamento, sendo a primeira empresa brasileira de hosting a aderir a esse tipo de transação. “A KingHost foi a pioneira no Brasil ao implementar IPV6, ao disponibilizar SSL gratuito Let’s Encrypt para hospedagem compartilhada e ao oferecer hospedagem otimizada para WordPress. Logo, faz todo sentido que estejamos em constante evolução, aceitando também novas formas de pagamento disruptivas e modernas, como Bitcoin e Litecoin”, pontua o Especialista em Infraestrutura de Hosting do grupo, Felipe Olivaes. Segundo a Gerente de Marketing e Produtos da KingHost, Lívia Lampert, a nova operação para pagamento será prática e intuitiva. “A experiência do usuário durante o processo da compra não sofrerá alterações. Apenas no momento de finalizar a transação, aparecerá a opção de efetuar o pagamento em criptomoedas. Basta selecionar e pronto”, explica.

iMasters #25 Fevereiro 2018


68 // CÓDIGO ABERTO

5 bibliotecas JS para conhecer em 2018 Por Kemel Zaidan, Gerente de Desenvolvimento na Nuveo

V

VAMOS COMEÇAR o ano falando da linguagem que mais cresce no mundo: o JavaScript. Amado e odiado por muitos, separei 5 bibliotecas que valem a pena conhecer em 2018. MJML: se há um lugar onde as tabelas no HTML ainda reinam soberanas é o e-mail. Porém, é cada vez mais importante criar e-mails responsivos que podem ser bem lidos tanto em dispositivos móveis como em desktops. O MJML é um markup XML que fornece vários componentes prontos e que podem ser compilados para um HTML amigável para qualquer leitor de e-mail, tornando mais fácil a tarefa de criar mensagens responsivas. https://github.com/ mjmlio/mjml localForage: trata-se de um wrapper para o IndexedDB e o WebSQL (duas APIs “relativamente” novas nos navegadores) que permite escrever e ler dados de forma semelhante ao que acontece no localStorage. É possível, no entanto, salvar outros tipos de dados além de strings. A biblioteca possibilita ainda que o desenvolvedor escolha se quer utilizar callbacks ou promises. Salvar dados no client-side ficou muito mais fácil com o localForage. https://github.com/localForage/localForage Monaco Editor: se você conhece e gosta do CodeMirror, deve dar uma chance ao editor web da Microsoft que é utilizado no VS Code. Ele tem tudo que se espera de um editor moderno: destaque de

iMasters #25 Fevereiro 2018

sintaxe para muitas linguagens, múltiplos cursores, atalhos de teclado, code completion etc. https://github.com/Microsoft/monaco-editor GPU.js: você nunca imaginou que poderia rodar seu código JS na GPU? Pois esta biblioteca permite que você escreva código que pode ser compilado para rodar na GPU via WebGL, tornando cálculos complexos muito mais rápidos. Mas se o WebGL não estiver disponível, não há problema, o fallback para JS padrão existe para resolver esses casos. https://github.com/gpujs/gpu.js deeplearn.js: se você ficou surpreso com a biblioteca anterior, vai cair o queixo com o deeplearn.js, provando que o JS de hoje amadureceu e não é o mesmo de anos atrás. Como o próprio nome diz, trata-se de uma biblioteca para machine learning escrita em JS e que pode trazer o aprendizado de máquina direto para o navegador. https://github.com/PAIR-code/ deeplearnjs

Kemel Zaidan é um pseudoprogramador, metido a jornalista, com alma de artista e Gerente de Desenvolvimento na Nuveo.

kemelzaidan@ gmail.com


DROPS DO MERCADO

// 69

CONHECIMENTO, FORMAÇÃO E CERTIFICAÇÃO OFICIAL EM UM SÓ LUGAR Tirar uma certificação oficial nas melhores linguagens e ferramentas não só te torna um especialista, como também ajuda na hora de conseguir empregos ou promoções. É por isso que a Impacta oferece diversos cursos preparatórios para as certificações mais concorridas e procuradas pelas empresas, te ajudando a conhecer as técnicas e práticas para conquistar o sucesso. Além disso, conta com o maior Centro de Exames Prometric da América Latina para que você aprenda com o curso, realize a prova e tire o seu certificado em um só lugar. A Impacta conta ainda com o ICS - Impacta Certified Specialist, que são certificações próprias nas áreas de TI, Gestão e Desenvolvimento. O ICS é reconhecido pelo mercado brasileiro como sinônimo de uma formação completa e de qualidade.

REVENDA DE HOSPEDAGEM COM CONTROLE FINANCEIRO! A HostHP especialista em serviços compartilhado, tem uma solução que tem feito grande sucesso no mercado. Em todos os seus planos de Revenda seja nos planos com servidores localizados em São Paulo, no Brasil, ou em Orlando, nos EUA oferecem o Isistem Gerenciador Financeiro de forma gratuita. O Isistem e um gerenciador financeiro 100% brasileiro, focado no mercado local, desta forma, criando soluções para nós brasileiros. Como também as API para meios de pagamento nacional. O Isistem ajuda a sua empresa tanto no controle de cobrança aos seus clientes, como no controle das contas a pagar do seu Host. Todas as rotinas no mesmo e automatizada, melhorando ainda mais os procedimentos da sua empresa. Além do controle financeiro, tem também o sistema de tickets, para seus clientes abrir chamados para atendimento, o sistema de chamados mais moderno da atualidade.

iMasters #25 Fevereiro 2018


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. Se quiser fazer sugestão de tema, ou palestrante, 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 setembro, outubro e novembro 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 no nosso site. Confira o que aconteceu:

Machine Learning Em sua talk no 7Masters Machine Learning, Lucas Fonseca Navarro falou sobre uma equipe de ciência de dados a partir do zero. Lucas é bacharel em Ciencia da Computação e mestre em Inteligencia Artificial, ambos pela Universidade Federal de São Carlos. Atualmente, trabalha como Product Manager do time de Data Science da GetNinjas. https:// goo.gl/tvfr7g

Marcos Antonio Coque Junior é Bacharel e Mestre em Estatística pelo IME-USP e Doutor em Engenharia pela POLI-USP. Atua como cientista de dados e no 7Masters Machine Learning falou sobre os processos dessa tendência. https://goo.gl/AohD8j

iMasters #25 Fevereiro 2018

“Bots para jogos usando reinforcement learning” foi o tema da palestra de Claudio Santos na edição de setembro do 7Masters. Claudio é fundador da The Data e 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. https://goo.gl/37ZHHQ

Jhonatan Garcia tratou sobre análise de projetos de lei com machine learning no 7Masters. Jhonatan atua com visão computacional em projetos para auxiliar clientes em terem a decoração dos sonhos pela Ammo Varejo. https://goo.gl/mgJDHX

André Barbosa ensinou a implementar uma rede neural convolucional para realizar análises de sentimento no 7Masters Machine Learning. Ele trabalha como Cientista de Dados/Engenheiro de Machine Learning no Elo7, onde têm a oportunidade de desenvolver diversas soluções de machine learning dentre diferentes áreas, como NLP e Visão Computacional. https://goo.gl/wLCjVz


// 71

Web APIs e Machine Learning foi o tema ecolhido por Gustavo Sena Mafra para sua alk no 7Masters de setembro. Gustavo atua na Sciensa como especialista em Machine Learning e desenvolvendo sistemas de recomendação. https://goo.gl/zF6zCk

“Machine Learning, Robótica e IA” foi tema de uma das talks do 7Masters MAchine Learning. Comandada por Sergio Gaiotto, que atua como Head of Machine Learning, IoT e Cognitive Solutions na Keyrus Brasil. https://goo.gl/ dX4yYr

Wearables Na edição do 7Masters sobre wearables, Lina Lopes falou sobre experimentos nessa área. Ela é consultora em Mídias Digitais, trabalha com projetos de Video Mapping, interatividade e luminotécnica. https://goo.gl/Ek4bFR

John Calistro tratou sobre o mercado de wearables nesta edição do 7Masters. O palestrante atua na área de marketing da RankMyApp e é co-organizador das comunidades AppsterdamBR, CocoaHeadsBR, Twitter Developers, FB Developers Circle e Fintech SP. https://goo.gl/YpLdBP

Para os que querem aprender a fazer uma aplicativo Android Wear, Cesar Augusto Nogueira mostrou como funciona o processo no 7Masters Wearables. Cesar é organizador do SouJava Campinas JUG desde 2012. https://goo.gl/SjkyUG

“Bluetooth Low Energy AKA Bluetooth Smart” foi o tema da palestra do Douglas Drumond nesta edição do 7Masters Wearables. O palestrante é Mobile software engineer na 99 e tem experiência em todas as camadas do Android. https://goo.gl/dsxryJ

Ezequiel França, no 7Masters Wearable, falou sobre WatchShaker na sua talk. Ele é desenvolvedor iOS no BTG Pactual digital e entusiasta do Apple Watch. https://goo.gl/ oKDNhg

”Connecting healthcare and technology for a better life” foi o tema da palestra de Rogerio Rodrigues no 7Masters Wearable. Ele é especialista em ALM na 2PC, onde trabalha como consultor nas principais empresas do Brasil. https://goo.gl/covUwq

iMasters #25 Fevereiro 2018


72 // 7MASTERS

GIT Erick Wendel Gomes, no 7Masters Git falou sobre Git crypt. O palestrante é sócio Diretor/CTO da Horizon Four, Microsoft MVP, MSDN Tech Advisor, Instrutor, Palestrante e Community Manager. https://goo.gl/kCcrc9

Github pages foi o tema da talk de William Oliveira no 7Masters Git. William é desenvolvedor de Software, viciado em comunidades e apaixonado por open source, GitHub, Linux e pela plataforma web. https://goo.gl/1s51nU

Uma das talks do 7masters Git tratou sobre Git hook. O palestrante, João Paulo Ventura, é um profissional independete e que tem enfoque em desenvolvimento orientado a dados. https://goo.gl/R9kdyf

Emmanuel Brandão fez uma comparação entre Rebase x merge NO 7Masters Git. Emmanuel trabalha como Consultor ALM / DevOps. https://goo.gl/KDZ1xh

Git e cultura foi a talk de Eduardo Matos no 7Masters Git. Ele é desenvolvedor desde 2003. Hoje, trabalha como desenvolvedor full-stack e programa de JavaScript a Ruby, de Backbone.js ao Rails. https://goo.gl/w8V53G

E não poderia faltar uma talk que tratasse da customização com o git. O palestrante Diego Pinho é autor do livro ECMAScript 6 - Entre de cabeça no futuro do JavaScript, cofundador da Code Prestige, e Community Manager no iMasters. https://goo.gl/EzgnoF

Marcel Gonçalves dos Santos trouxe para o 7Masters Git o tema “Explorando o comando git stash”. Ele é desenvolvedor web e atualmente trabalha como desenvolvedor web full-stack na Editora Três, além de organizar a FEMUG-SP e ser evangelista PHPSP. https://goo.gl/SfkNAX

iMasters #25 Fevereiro 2018


DROPS DO MERCADO

// 73

LAMBDA3 ENTRA NO MERCADO DE DATA SCIENCE E BUSINESS INTELLIGENCE A partir de janeiro de 2018 a Lambda3 anuncia aquisição da consultoria de Data Science, Big Data e Business Intelligence NGR Solutions, fundada em 2007 por Diego Nogare, conhecido no mercado, entre diversas coisas, por sua atuação na área como Data Platform Microsoft Valued Professional (MPV). Para a Lambda3, a aquisição da NGR Solutions vem em um momento de crescimento muito esperado, e a empresa ganha mais destaque no mercado como a parceira de tecnologia capaz de entregar projetos de ponta a ponta na plataforma Microsoft. Criar uma vertical de trabalho focada em dados é um movimento estratégico para a Lambda3, que aumenta sua oferta de serviços com um time especializado e reconhecido no mercado local, se mantendo em evidência na comunidade de tecnologia com lideranças de pensamento que trazem consigo experiência e excelência técnica para enfrentar os desafios de acelerar os resultados dos seus clientes.

NOVIDADE NO PORTFÓLIO RESELLERCLUB: HOSPEDAGEM WORDPRESS A ResellerClub, poderosa plataforma que oferece uma série de serviços web para revenda no modelo Whitelabel, traz um novo produto para os seus mais de 200 mil revendedores e profissionais web: Hospedagem WordPress. Essa hospedagem vem com o WordPress pré-instalado e configurado, além de contar com atualizações automáticas. Esse produto conta um painel exclusivo para gerenciar os sites dos seus clientes e outros serviços que eles contratarem. Pensando nas necessidades do desenvolvedor, oferecemos pacotes com segurança reforçada com SiteLock, que realiza escaneamento no site contra malware e o CodeGuard, que faz backups periódicos em nuvem.

iMasters #25 Fevereiro 2018


74 // POR AÍ

POR AÍ Conheça o Developer E-Commerce Hub, o mais novo espaço de co-working para desenvolvedores O iMasters tem o prazer de te convidar para conhecer o Developer E-Commerce Hub, nosso espaço de co-working para profissionais de e-commerce e desenvolvedores. O espaço se tornou um polo de referência, networking e conteúdo para profissionais de e-commerce e developers. Localizado na Oscar Freire, ele contém toda a infraestrutura necessária para que você possa trabalhar com comodidade. Para poder usufruir do nosso espaço e tudo que ele oferece, basta se cadastrar em http://developerhub. com.br/. Além dos espaços de co-working, temos o rooftop e um auditório que comportam perfeitamente diversos formatos de eventos. Entre em contato conosco através do e-mail hub@ imasters.com.br ou do telefone 11 3063-5941 e veja a disponibilidade da agenda!

99 TÁXI: A PRIMEIRA START-UP BRASILEIRA AVALIADA EM MAIS DE 1 BILHÃO DE DÓLARES A brasileira 99 Táxi entrou para o seleto grupo de start-ups avaliadas em mais de 1 bilhão de dólares. O feito trouxe o apelido de primeiro “unicórnio” brasileiro. A plataforma chinesa de transporte Didi Chuxing anunciou a compra do 99 Táxi, o que revela seu desejo de expandir para a América do Sul. Criado em 2012, a 99 começou oferecendo apenas serviços de táxis, que posteriormente foi ampliado para um modelo mais amplo, semelhante ao do Uber. Foi o primeiro aplicativo do Brasil a oferecer uma opção de serviço apenas para mulheres e dar possibilidade de gorjeta no país.

iMasters #25 Fevereiro 2018


Com grandes nomes do PHP mundial, a sexta edição do PHP Experience reúne cerca de 1200 desenvolvedores PHP em São Paulo nos dias 5 & 6 de março. Em dois dias de conteúdo que movimenta o mercado PHP teremos: keynotes internacionais, três trilhas, além de diversas ações de networking.

Local do Evento Hotel Pullman - Vila Olímpia

Rua Olimpíadas, 205 | Vila Olímpia, São Paulo - SP

eventos.imasters.com.br/phpexperience


OFERECIMENTO

MANTENEDORES

Profile for iMasters Redação

Revista iMasters #25 - Fevereiro  

Veja a nova edição da Revista iMasters, que traz blockchain como tema da matéria de capa.

Revista iMasters #25 - Fevereiro  

Veja a nova edição da Revista iMasters, que traz blockchain como tema da matéria de capa.

Profile for imasters
Advertisement