R$24,00
3 //
// FEVEREIRO 2017
// ANO 06
// EDIÇÃO 21 > WE A R E D E V E L OP E R S
DESENVOLVENDO MICROSSERVIÇOS USANDO goEdocker
12
maker
Conheça o Mao3D, o programa colaborativo que doa próteses 3D para crianças
26
ENTREVISTA COM RODRIGO SCOTTI
Inteligência Artificial: quando o futuro já é realidade
54
mobilidade é tudo
A Cultura Hacker pode ser a chave do seu sucesso iMasters #21 Fevereiro 2017
Estamos procurando pessoas
apaixonadas por desenvolvimento
// 4
web e mobile! Então olha só:
Somos totalmente ágeis
Para nós, ser ágil é se adaptar e não ter medo de errar. O importante é errar rápido e aprender com o erro.
Somos times multidisciplinares
Isso significa que nossos times incluem Product Owner, Scrum Master, DevOps, QA e designer além dos desenvolvedores. Aqui, aprendemos o tempo todo!
</>
Trabalhamos com web, API, mobile e cloud
Se você entende bastante sobre esses assuntos, fale com a gente. Ah, também somos agnósticos! Trabalhamos com node.js, Java, .NET, Obj-C, Swift... Temos espaço pra você.
Sedes em SP, RJ e BH
Estamos em constante crescimento. Esse ano, estamos instalando uma sede em Belo Horizonte. Você pode escolher onde quer trabalhar e ainda tem ajuda pra isso!
Gostou? Então manda o seu currículo pra gente!
www.concretesolutions.com.br/vagas
iMasters #21 Fevereiro 2017
5 // POR DENTRO DO W3C
EDITORIAL
I
Iniciamos o ano com tudo aqui no iMasters! E para você, leitor, preparamos um cardápio mais que especial para a primeira edição de 2017. Como a bola da vez é Golang, resolvemos abordar esta tecnologia; mas fomos além. Demos uma de MasterChef e adicionamos à nossa receita do prato principal Docker e microsserviços. Assim, completando o sabor e apresentação da nossa matéria de capa. Mas não paramos por aí... No nosso “menu tecnológico”, trouxemos como pratos de entrada, JavaScript, ArchLinux, a utilização de Middlewares no desenvolvimento de jogos, o novo .NET, o desenvolvimento de chat bots, inteligência artificial, cultura hacker e comunidades. Como sobremesa, temos dois conteúdos muito especiais sobre cultura maker. Nesse prato, nos concentramos no desenvolvimento da tecnologia assistiva e na quebra de paradigmas educacionais por meio da tecnologia. E aqui, caro desenvolvedor, contamos com sua participação e imaginação para alavancar estas tecnologias. Espero que degustem de cada página preparada com muita dedicação. Bon appetit!
Abraços, Alex Lattaro Líder de Conteúdo do Grupo iMasters www.imasters.com.br | redacao@imasters.com.br
iMasters #21 Fevereiro 2017
iMasters #21 Fevereiro 2017
6 // EXPEDIENTE
// FEVEREIRO 2017
// ANO 06
// EDIÇÃO 21 > WE A R E DE V E L O P ERS
Tiago Baeta Publisher
CORPO EDITORIAL
Rina Noronha (MTB 2759-ES) Jornalista Responsável
Mariana Anselmo Editor
Alex Lattaro e Mariana Anselmo Editores
Alex Lattaro Editor
Nathália Torezani Revisão
Nathália Torezani Revisão
Alex Lattaro, André Skortzaru, Diego Martins, Elton Minetto, Fabio Akita, Giovanni Bassi, Kauê Lemos, Kemel Zaidan, Maria Elizete Kunkel, Newton Calegari, Ricardo Ogliari e Rodrigo “Pokemão” Colaboradores Thaís Trizoli | Zupi Projeto Gráfico e Diagramação Eskenazi Indústria Gráfica Gráfica
Rua: Oscar Freire, 2379 Cep: 05409-012 Cerqueira Cesar +55 11 3063-5941 www.imasters.com.br/revista redacao@imasters.com.br @iMasters /PortaliMasters Os artigos assinados são de responsabilidade dos autores e não refletem necessariamente a
Grupo iMasters Organização
opinião da revista. É proibida a reprodução total ou parcial de textos, fotos e ilustrações por qualquer meio, sem prévia autorização dos autores
1.800 exemplares ISSN 1981-0288
www.zupidesign.com +55 11 3926 0174
iMasters #21 Fevereiro 2017
ou dos editores da publicação.
// 7
iMasters #21 Fevereiro 2017
8 //
SUMÁRIO COLUNAS 08
Newton Calegari
POR DENTRO DO W3C Transmissões de vídeo na Web com taxas de bits adaptáveis (adaptative bitrate)
24
Kauê Lemos
GAMES Utilização de Middlewares de áudio no desenvolvimento de jogos
52 18
Kemel Zaidan
CÓDIGO ABERTO Código aberto
Diego Martins
JAVASCRIPT O ECMAScript 6 e o futuro do JavaScript
42
Rodrigo Pokemao
58
CHATBOT Mais um ciclo na internet, o retorno dos Chatbots e como eles funcionam
Ricardo Ogliari
MOBILIDADE É TUDO Cultura hacker - a chave do sucesso
46 72
20
INTELIGÊNCIA NADA ARTIFICIAL Redes neurais artificiais: o que são? Onde vivem? Do que se alimentam?
.NET O novo .NET: leve, open source, rápido e multiplataforma
Alex Lattaro
iMasters #21 Fevereiro 2017
Giovanni Bassi
André Skortzaru
MAKER O impacto da impressão 3D e da cultura maker na educação
// 9
SEÇÕES
78
COMUNIDADES Assim surgiu o InterNorte...
81
83
7MASTERS Encontro iMasters de especialistas
POR AÍ Fazendo a internet do Brasil pelo mundo
12
Maria Elizete Kunkel
MAKER Mao 3D O programa colaborativo que reúne inovação, tecnologia e inclusão
62
Fabio Akita
LINUX Arch Linux - a melhor distro de todos os tempos?
32
Elton Minetto
ENTREVISTA com Rodrigo Scotti
26 Inteligência Artificial: quando o futuro já é realidade
CAPA Criando um microsserviço usando Go e Docker
iMasters #21 Fevereiro 2017
10 // POR DENTRO DO W3C
Transmissões de vídeo na Web com taxas de bits adaptáveis (adaptative bitrate) Por Newton Calegari, Pesquisador do Centro de Estudos sobre Tecnologias Web
E
EU ACREDITO QUE VOCÊ deve ter notado a diferença em relação ao tipo de conteúdo consumido na Web atualmente. Reflita um pouco e tente notar o que mais se vê atualmente: se o que veio em sua mente foi conteúdo em vídeo, você está certo e isso é mais uma evidência do que é apontado no relatório Cisco Visual Networking Index: Forecast and Methodology, 2015–2020, o qual mostra que o consumo de vídeo online representará cerca 80% do tráfego na Internet em 2019. É muito vídeo! Esse mesmo relatório da Cisco mostra que levaria mais de 5 milhões de anos para assistir a todo conteúdo em vídeo que passará pelas redes a cada mês em 2020. E não para por aí, o GlobalWebIndex: Video is the Future of Social diz que o compartilhamento de vídeos já é tão popular quanto o compartilhamento de fotos no Snapchat, e que mais da metade dos usuários do Facebook consome vídeo na plataforma. Conseguimos perceber também o quanto o modo de produção de conteúdo
iMasters #21 Fevereiro 2017
em vídeo evoluiu nos últimos tempos, sendo possível que o usuário final crie conteúdo interessante com a própria câmera do celular, mas vale a pena ver como as tecnologias para suportar essa demanda de vídeo na Web também evoluíram, como é o caso do streaming. Para entendermos como isso evoluiu, cabe olharmos um pouco para nossa história recente e nos lembramos do domínio quase que absoluto do Flash como tecnologia principal para streaming na Web. Não há muito tempo, o elemento <video> da especificação HTML5 conseguiu dar um grande passo em direção à mudança do uso das tecnologias de reprodução de vídeo no navegador. Apesar de o uso do HTML5 para reprodução de vídeo ter possibilitado avanços - como o consumo de vídeo em dispositivos móveis (já que a Apple aboliu o Flash do iOS desde seu início) -, a transmissão via progressive download não é uma alternativa viável para sistemas e aplicações de grande escala. A transmissão com taxas de bits adap-
// 11
táveis (adaptação livre do inglês adaptative bitrate streaming) é mais adequada para esses casos. Vamos entender a diferença entre os dois tipos de transmissão: Transmissão de mídia com download progressivo
A imagem 2 mostra diferentes segmentos com diferentes resoluções e sugere que a qualidade sendo reproduzida no player pode ser variável. Para superar as limitações da transmissão com download progressivo, algumas empresas criaram soluções proprietárias para transmissão com adaptative bitrate.
∑ Imagem 1
O download progressivo é ideal para arquivos de mídia pequenos e leves, pois há tempo para carregar o buffer e iniciar a reprodução e, por ser pequeno, não afetará a experiência do usuário Como pode ser visto na imagem 1, o vídeo será reproduzido como se fosse feita a leitura de uma sequência linear de quadros.
Imagens: Fornecidas pelo autor.
Transmissão com taxa de bits adaptável (adaptative bitrate) Já no caso da transmissão com taxa de bits variável, a sequência de reprodução da mídia pode não ser linear, sendo possível ajustar a qualidade do conteúdo exibido sem a necessidade de carregar um arquivo completo (como no caso do progressive download).
A Apple possui a tecnologia HTTP Live Stream (HLS), a Adobe tem o HDS e a Microsoft possui o Smooth Streaming. Com o propósito de diminuir essa fragmentação, surgiu o padrão DASH (no qual essas mesmas empresas também estão envolvidas), que significa Dynamic Adaptative Streaming over HTTP. Além do padrão DASH, definido pelo consórcio MPEG, surgiu a especificação Media Source Extensions, que se tornou recomendação W3C em novembro de 2016. Essa especificação permite trabalhar com adaptative bitrate streaming no navegador sem a necessidade de se utilizar plugins de terceiros. A especificação MSE integra o padrão MPEG-DASH ao HTML5, permi-
∑ Imagem 2
iMasters #21 Fevereiro 2017
12 // POR DENTRO DO W3C
tindo que exploremos mais aspectos da transmissão e consumo de vídeos na Web, como a redução do tempo de início do vídeo, o que melhora significativamente a experiência do usuário, permite “slicing” para inserção de anúncios, adaptação do conteúdo de acordo com a banda de conexão do usuário cliente e, por funcionar sobre o protocolo HTTP, não é necessário um servidor específico, podendo utilizar um webserver, como Apache ou nginx, e CDNs (Content Delivery Network), aproveitando as vantagens do webserver e configurando com facilidade recursos como HTTPS, proxy e cache. Utilizando DASH e MSE na prática Para realizar uma transmissão com adaptative bitrate e explorar os padrões DASH e MSE, vamos primeiro gerar diferentes variações de resolução para um vídeo; depois iremos criar o arquivo de manifesto MPD (Media Presentation Description), um arquivo XML contendo informações sobre os diferentes segmentos de vídeo, seus relacionamentos e informações necessárias para escolher quais deles serão reproduzidos em cada momento. Para essas tarefas, utilizaremos o FFmpeg (www.ffmpeg.org), uma ferramenta excelente para lidar com conversões de conteúdo multimídia, com as bibliotecas libvpx e libvoribis, além de suporte para WebM. Neste exemplo, estou utilizando um vídeo no container webm (www.webmproject.org). O primeiro passo é utilizar o FFmpeg para gerar a trilha de áudio desse conteúdo multimídia. Como estamos exiMasters #21 Fevereiro 2017
traindo o áudio no codec Vorbis, é importante que o FFmpeg esteja com essa biblioteca ativa. ffmpeg -i arquivo.video.principal. webm -vn -acodec libvorbis -ab 128k trilha_audio.webm
Agora vamos gerar as diferentes variações de vídeo: ffmpeg -i arquivo.video.principal. webm -c:v libvpx-vp9 -keyint_ min 150 \ -g 150 -tile-columns 4 -frameparallel 1 -f webm -dash 1 \ -an -vf scale=160:190 -b:v 250k video_160x90_250k.webm \ -an -vf scale=320:180 -b:v 500k video_320x180_500k.webm \ -an -vf scale=640:360 -b:v 750k video_640x360_750k.webm \ -an -vf scale=640:360 -b:v 1000k video_640x360_1000k.webm \ -an -vf scale=1280:720 -b:v 1500k video_1280x720_1500k. webm
Esse comando no FFmpeg gerará variações do vídeo em diferentes resoluções a partir do arquivo de vídeo principal. O passo seguinte é a criação do arquivo de manifesto, um arquivo XML que indicaremos com a extensão MPD. Também utilizaremos o FFmpeg para essa tarefa:
// 13
ffmpeg \ -f webm_dash_manifest -i video_160x90_250k.webm \ -f webm_dash_manifest -i video_320x180_500k.webm \ -f webm_dash_manifest -i video_640x360_750k.webm \ -f webm_dash_manifest -i video_640x360_1000k.webm \ -f webm_dash_manifest -i video_1280x720_1500k.webm \ -f webm_dash_manifest -i trilha_audio.webm \ -c copy -map 0 -map 1 -map 2 -map 3 -map 4 -map 5 \ -f webm_dash_manifest \ -adaptation_sets “id=0,streams=0,1,2,3,4 id=1,streams=5” \ manifest.mpd
Reprodução do conteúdo no navegador web Vamos utilizar uma biblioteca chamada dash.js (www.github.com/DashIndustry-Forum/dash.js) para a reprodução do vídeo. O código abaixo mostra como instanciar o player. <video data-dashjs-player src=”http://exemplo.org/ manifest.mpd” controls> </video> <script src=”http://cdn.dashjs. org/latest/dash.all.min.js”> </Script>
Note que o atributo “src” do elemento de vídeo carrega um arquivo de manifesto MPD, e não diretamente a mídia para a reprodução. Esse foi um exemplo básico de como utilizar técnicas de adaptative media no navegador web sem a utilização de plugins de terceiros. Um ponto interessante que vale ressaltar é que a utilização dessa técnica, no passado não muito distante, ficava restrita a poucas aplicações e empresas devido à complexidade e aos custos de desenvolvimento. Os vídeos na Web estão aumentando A Web como plataforma de vídeo ainda está evoluindo e crescerá muito mais, por isso é muito importante que fiquemos atentos tanto aos hábitos de consumo de conteúdo quanto às tecnologias que contribuirão para esse crescimento. Como direções futuras, vale observar o consumo de vídeo em 360°, que vem aumentando de modo acelerado, talvez devido às câmeras específicas para esse tipo de vídeo estarem mais acessíveis ou também pela característica de imersão que vem sendo trazida pelas aplicações de realidade virtual. Newton Calegari é pesquisador do Centro de Estudos sobre Tecnologias Web (Ceweb. br) do NIC.br e líder de projetos no escritório do W3C Brasil. É bacharel em Ciência da Computação e Mestre em Tecnologias da Inteligência e Design Digital (TIDD / PUCSP). Trabalha e pesquisa sobre core web technologies, Web Semântica e dados na Web. É também editor da recomendação Data on the Web Best Practices do W3C e trabalha com padronização para Web nos grupos de trabalho juntos ao W3C.
newton@nic.br
iMasters #21 Fevereiro 2017
14 // MAKER
MAO3D
O PROGRAMA COLABORATIVO QUE REÚNE INOVAÇÃO, TECNOLOGIA E INCLUSÃO Por Maria Elizete Kunkel, Professora adjunta de Engenharia Biomédica na UNIFESP
Tecnologia Assistiva no Brasil Aproximadamente 25% da população brasileira é formada por pessoas com deficiência. Essa prevalência é muito alta, se comparada ao resto do mundo, e varia de acordo com a região do nosso País. As deficiências atingem todos os grupos de idade e podem ser do tipo visual, auditiva, motora, intelectual ou ainda uma combinação destas. Algumas pessoas já nascem com algum tipo de deficiência, outras são surpreendidas ao longo da vida, seja por causa de uma doença, devido a um acidente de trabalho ou de trânsito ou ainda pelo processo natural de envelhecimento. Segundo a Constituição brasileira, as pessoas com deficiência devem ter os mesmos direitos que iMasters #21 Fevereiro 2017
as pessoas sem deficiência. No entanto, elas nem sempre conseguem usufruir dos seus direitos devido às desvantagens impostas por barreiras físicas, legais e de atitudes da sociedade. Por exemplo, apesar do ensino fundamental ser obrigatório no Brasil para crianças a partir de seis anos de idade, cerca de 10% das pessoas com deficiência ainda não possuem acesso ao ensino e constituem uma boa parte dos analfabetos. A falta de acesso à educação formal das pessoas com deficiência influi diretamente no fato de que apenas cerca de 50% delas conseguem entrar no mercado de trabalho e, assim, viver com mais independência e dignidade. Tecnologia Assistiva é todo dis-
positivo, recurso tecnológico ou serviço que objetiva proporcionar às pessoas com deficiência mais autonomia, independência e inclusão social. Isso se dá por meio da ampliação de comunicação, mobilidade, controle de ambiente, habilidades de aprendizado, lazer e trabalho. Devido à sua natureza interdisciplinar, a Tecnologia Assistiva requer a integração de várias disciplinas de diferentes áreas de conhecimento, como engenharia, medicina, terapia ocupacional, design e outras. O Brasil possui um Catálogo Nacional de Produtos de Tecnologia Assistiva, entretanto, segundo os próprios usuários e profissionais da área, grande parte dos produtos disponíveis no mercado nacional e pelo Sistema Único
Imagem: Fornecida pelo autor.
// 15
de Saúde (SUS) possui baixa funcionalidade e custo muito elevado. Desenvolver um produto de Tecnologia Assistiva com baixo custo, boa funcionalidade e que seja acessível requer um processo inovativo. Na maioria das vezes, esse tipo de produto precisa ser personalizado para que possa ser compatível com a necessidade do usuário, e essa personalização eleva o custo final e o tempo de produção. Por isso, novas pesquisas estão sendo desenvolvidas na busca de soluções para esses problemas.
a colaboração de pessoas de diferentes lugares do mundo e, em muitos casos, sem visar ao lucro. Existem três tendências:
Movimento Open Design e impressão 3D O termo open design se refere à união do design ao conceito de código aberto baseado na distribuição livre de produtos. O movimento open design promove a criação de projetos colaborativos, com auxílio de novas tecnologias. As plataformas Thingiverse (www. thingiverse.com) e Instructables (www.instructables.com) são canais onde pessoas de diferentes formações trabalham juntas criando ou modificando projetos para uso pessoal ou de um grupo, deixando-os disponíveis para que outros possam ter acesso a eles. Projetos de design aberto permitem o desenvolvimento de produtos físicos, softwares ou sistemas para solucionar um problema específico por meio da disseminação pública de informação. Hoje, existem centenas de projetos de design aberto graças ao uso de software e hardware também abertos. Atualmente, qualquer pessoa com acesso à Internet pode usar softwares livres e desenvolver uma ideia na forma de um produto com auxílio de tutoriais explicativos. A maioria dos projetos de design aberto é desenvolvida com
2. Pessoas que trabalham no desenvolvimento de tecnologias mais avançadas que seriam impossíveis de serem desenvolvidas com recursos de uma única empresa ou país por conta do custo de diversas expertises;
1. Pessoas que dedicam tempo livre e usam suas habilidades para promoverem o bem comum em áreas como Tecnologia Assistiva (onde falta investimento ou não existe interesse comercial em países em desenvolvimento) ou ainda para o desenvolvimento de tecnologias mais baratas e acessíveis que podem ser usadas na educação;
3. Pessoas que se juntam para usar dispositivos abertos de tecnologia para desenvolver soluções customizadas locais, como impressoras 3D do tipo RepRap, que podem ser utilizadas na produção de estruturas e componentes funcionais para projetos de design aberto, bem como peças para a autorreplicação.
A impressão 3D é um recurso tecnológico que permite a produção de objetos reais com diversos tipo de materiais, como plástico e metal, a partir de um modelo digital ou desenho tridimensional feito no computador. Na última década, a tecnologia se tornou popular devido à disponibilidade de modelos abertos de impressoras 3D de baixo custo e softwares livres de modelagem 3D. A principal vantagem é a praticidade da produção, que não exige escala industrial, além da possibilidade de personalização do produto final. O potencial do uso dessa tecnologia em países como o Brasil é enorme, sendo uma alternativa na busca por soluções de problemas atuais na área de saúde, como no desenvolvimento de dispositivos para auxiliar a inclusão social de pessoas com deficiência. No Brasil, já existem impressoras 3D nacionais com custo variando entre R$ 2 mil e R$ 30 mil que utilizam polímeros que custam cerca de R$ 150,00/kg. Entretanto, a aplicação dessa tecnologia para a produção de dispositivos que realmente atendam às necessidades das pessoas com deficiência ainda está nos estágios iniciais.
iMasters #21 Fevereiro 2017
16 // MAKER
uma impressora 3D poderia produzir uma prótese. No mesmo ano, a ONG Robohand recebeu o prêmio Rockefeller Innovators Award e teve esse primeiro modelo de prótese exibido no Museu de Ciência de Londres, como um exemplo de inovação dos últimos 100 anos. Esse foi o primeiro caso relatado de uma colaboração internacional usando impressão 3D para inovar a forma de se produzir próteses de membro superior de modo mais rápido e com menor custo. A Robohand deu origem à ONG americana e-Nable, fundada pelo Prof. Dr. Jon Schull do Instituto de Tecnologia de Rochester (http:// enablingthefuture.org). A e-Nable criou mapas online usando o Google+ para conectar: 1. Quem precisa de uma prótese; 2. Quem tem uma impressora 3D e quer imprimir próteses; 3. Quem tem conhecimento de
modelagem 3D (estudantes, designers, engenheiros etc.) e pode fazer melhorias nos modelos existentes. Desse sistema colaborativo surgiram novos modelos de próteses de mão, mais bonitos, leves e funcionais, sem patente e de domínio público. As próteses podem ser produzidas em várias cores e formas, inclusive com heróis de quadrinhos sugerindo superpoderes e melhorando a autoeestima da crianças, ajudando na realização de tarefas diárias. Vídeo: goo.gl/t2RzDC. Por meio dessa duas ONGs Robohand e e-Nable -, mais de 5 mil próteses de braço e de mão já foram distribuidas em diversas partes do mundo. No Brasil, a disseminação desse projeto ocorre de forma mais lenta, pois ainda são poucas as pessoas que possuem acesso e sabem manipular uma impressora 3D. Segundo a legislação brasileira, uma prótese é considerada um dispositivo médico que não pode ser doado, a menos
Imagem: Fornecida pelo autor.
ONGs que produzem próteses de mão A primeira prótese de mão feita por impressão 3D foi criada na África do Sul, em 2012. Esse foi um processo colaborativo entre Richard van As, um carpinteiro que perdeu parte da mão em um acidente de trabalho, e um designer americano. Richard não se adaptou à prótese criada, mas testou o modelo em uma criança que nasceu com malformação da mão. A prótese permitiu ao garoto manipular pequenos objetos e jogar bola. O funcionamento dessa prótese é simples, a maioria das peças é de plástico e o movimento dos dedos é acionado por fios e elásticos a partir do movimento da articulação do punho. Em 2013, foi criada a ONG Robohand (http://www.robohand. net), que passou a produzir próteses de plástico na África do Sul e disponibilizar pela Internet os arquivos para impressão 3D e instruções de montagem. Desse modo, qualquer pessoa com acesso a
iMasters #21 Fevereiro 2017
// 17
que seja prescrito e tenha o seu uso acompanhado por um profissional de saúde. Recentemente, a ANVISA divulgou a informação de que esse tipo de prótese feita por impressão 3D não precisaria de registro por ter uso externo e não representar risco ao usuário. O Programa social e colaborativo Mao3D da Unifesp O Mao3D é um Programa de Pesquisa e Extensão do Instituto de Ciência e Tecnologia da Universidade Federal de São Paulo (UNIFESP de São José dos Campos, SP). O Mao3D objetiva protetizar e reabilitar crianças e adultos com malformação ou amputação de membro superior com uso de próteses produzidas por impressão 3D. O programa foi criado em 2015 por mim, que sou repsonsavel pela área de biomecânica do curso de Engenharia Biomédica da UNIFESP. A iniciativa é fruto de um convênio da Unifesp com o Centro de Reabilitação Lucy Montoro de São José dos Campos. A execução do programa é feita por alunos dos cursos de Bacharelado de Ciência e Tecnologia e Engenharia Biomédica que trabalham como voluntários e bolsistas da Unifesp junto com outros profissionais voluntários, cada um dentro de suas especialidades (médicina, fisioterapia, terapia ocupacional e psicologia). Por ser um programa social, as próteses do Mao3D são doadas sem nenhum custo ao usuário, e o programa se mantém graças ao apoio de empresas e pessoas físicas que colaboram. O Brasil não tem registro de quantas pessoas precisam de prótese de membro superior. Nesses
casos, por lei, o SUS deveria fornecer para cada um que precisa uma prótese e um programa de reabilitação, porém o atendimento atual não contempla as crianças. Dentre os motivos que impedem o fornecimento adequado de prótese de membro superior, o principal é a alta taxa de abandono de uso, pois as próteses nacionais são muito pesadas e pouco funcionais, enquanto que os modelos importados, que possuem maior funionalidade, chegam a custar R$ 300 mil. Em alguns casos, o SUS fornece próteses importadas, mas a espera pode chegar a anos. A falta de membro superior ocorre em casos de malformação congênita, doenças adquiridas e acidentes de trabalho (mais de 50% dos casos de acidentes nas indústrias). Apesar de estudos indicarem que a falta do membro superior na primeira infância pode prejudicar o desenvolvimento cognitivo infantil e que o processo de reabilitação é melhor quando se inicia na primeira infância, a maioria das crianças brasileiras que precisa não recebe prótese de membro superior pelo SUS. A adaptação do crescimento físico e desenvolvimento psicológico de uma criança que usa uma prótese é um verdadeiro desafio. A taxa de rejeição ao uso de prótese nesses casos é de aproximadamente 71%. Por isso, a maioria das crianças com amputação congênita de mão não recebe prótese até que chegue ao fim da fase de crescimento. Com a protetização adequada e um programa de reabilitação, seria possível oferecer uma qualidade de vida melhor e com mais independência para
uma criança amputada. O Programa Mao3D se baseia em modelos desenvolvidos pela ONG e-Nable que usam a inovação tecnológica da impressão 3D para desenvolver próteses de mão mais acessíveis e que ofereçam uma boa funcionalidade. O Mao3D está de acordo com a missão da UNIFESP de promover o avanço do conhecimento através de ações de ensino, pesquisa e extensão, tendo como fundamentos básicos a interdisciplinaridade, a excelência e a inclusão social. O Mao3D é formado por 4 linhas: 1. Divulgação da técnica de impressão 3D na produção de prótese de mão A tecnologia de impressão 3D é um tema relativamente novo no Brasil. Por isso, dois canais de comunicação foram criados para informar ao público de modo geral sobre o uso de impressão 3D para a produção de próteses de membro superior: a página (www.facebook.com/ Mao3D) e o blog (https://mao3d. wordpress.com). O Mao3D já realizou diversas ações como palestras (em escolas técnicas, universidades, empresas e congressos) e participação em exposições. Essas ações objetivam também identificar as pessoas que precisam de próteses e aqueles que desejam eventualmente ajudar como voluntários no programa. Em alguns casos, é feita uma divulgação direcionada para os profissionais de saúde pela necessidade de atualização destes quanto ao uso da impressão 3D na área de Tecnologia Assistiva. A imprensa de modo geral tem feito iMasters #21 Fevereiro 2017
18 // MAKER
matérias para rádio, TV e mídias de Internet (goo.gl/96Zmsw). 2. Produção, distribuição de prótese de mão e reabilitação Este é o projeto mais importante do Programa Mao3D. O objetivo é criar e produzir próteses de membro superior por impressão 3D e oferecer também um programa de reabilitação para os usuários. Os interessados em se beneficiar com o programa passam por duas triagens. A primeira com a equipe técnica de alunos da Engenharia Biomédica da UNIFESP, que verifica se o tipo de malformação ou amputação pode ser protetizado com os modelos existentes, e a segunda triagem é realizada pela equipe do Centro de Reabilitação Lucy Montoro, que possui alguns pré-requisitos, como limite mínimo de idade, restrição de atendimento somente para pessoas da Região do Vale do Paraíba e outros. Após as duas triagens, é realizada a medição das dimensões do coto do usuário que vai receber a prótese, e o modelo mais adequado é definido. Na próxima fase, é feita a modelagem 3D baseada em modelos da
e-Nable, e algumas modificações como a implementação de caracteristicas lúdicas de acordo com o gosto da criança são realizadas. Até agora, cinco próteses já foram feitas para crianças, e estas foram personalizadas com personagens infantis como Homem Aranha, Capitão América e Batman. Definido o modelo, as partes que compõem a prótese são impressas em 3D com filamento plástico colorido, e a protese é montada com alguns acessórios extras. Com a prótese pronta, são feitas várias provas no voluntário para se indentificarem as necessidades de ajuste e o tipo de revestimento interno que deve ser usado. Um podólogo tem ajudado nesse processo, revestindo a parte interna da prótese com materiais usados na fabricação de palmilhas internas de sapatos. Em seguida, é feita a avalição sobre a funcionalidade da prótese ao ser acionada pelo usuário e sobre o conforto do uso. Somente então o voluntario e a prótese estão prontos para iniciar a fase de reabilitação, processo fundamental em que o usuário vai aprender a utilizar a prótese para a realização de
O PROGRAMA MAO3D SE BASEIA EM MODELOS DESENVOLVIDOS PELA ONG E-NABLE QUE USAM A INOVAÇÃO TECNOLÓGICA DA IMPRESSÃO 3D PARA DESENVOLVER PRÓTESES DE MÃO MAIS ACESSÍVEIS E QUE OFEREÇAM UMA BOA FUNCIONALIDADE iMasters #21 Fevereiro 2017
tarefas do dia a dia, como manipular objetos, se alimentar, escrever etc. A fase de reabilitação é realizada por um Terapeuta Ocupacional, acompanhado por um Psicólogo e também pela equipe técnica da UNIFESP. Geralmente, durante a reabilitação se identifica a necessidade de se fazer mais modificações no modelo da prótese para a realização de tarefas específicas. Somente depois que o usuário mostrar autonomia no uso prótese que ele a recebe definitivamente. Nem todos os casos são concluídos com sucesso. Em alguns deles, o processo é interrompido em uma das fases citadas. Os principais motivos são: impossibilidade de acionar a prótese, inadequação do modelo da prótese ao coto, falta de maturidade ou interesse do usuário, frustação do usuário em relação às expectativas iniciais etc. Geralmente, crianças que nasceram com uma malformação de membro superior aprendem a desenvovler as atividades do dia a dia com o seu membro como ele é. O uso da prótese de mão 3D requer uma nova aprendizagem no modo de se manipular os objetos. Existe ainda a desvantagem de que com esse tipo de prótese o usuário não tem a sensação do tato ao tocar nos objetos. De qualquer forma, o uso da impressão 3D abre as portas para um mundo de possibildiades a serem investigadas no desenvolvimento de prótese de mão mais funcionais. 3. Capacitação para a produção de prótese de mão O objetivo deste projeto é ensinar o uso de tecnologia de impressão
// 19
Imagem: Fornecida pelo autor.
3D para a produção de próteses de mão. Uma série de workshops têm sido realizados para públicos-alvo bem definidos, como profissionais da área de exatas e profissionais da área de saúde. Esse é um projeto de grande importância, pois permite que a produção de próteses por impressão 3D ocorra não somente na região do Vale do Paraíba, de modo que o programa possa ser replicado posteriormente em outras regiões do Brasil. 4. Gestão e captação de recursos humanos e financeiros O Programa Mao3D é fruto de uma iniciativa dos alunos da Unifesp que decidiram buscar uma solução para um problema social. Inicialmente, o Mao3D não possuía recursos financeiros próprios para manter suas atividades. Dada a dimensão social do programa que busca solucionar uma questão que não é atendida pelo SUS, como próteses de mão para crianças, houve a necessidade de se buscar sustentabilidade do mesmo. Assim, foi definida uma estratégia de captação de recursos. Foi realizada uma campanha de financiamento coletivo (https:// youtu.be/fL-pdwJ4vvU) e aproximadamente R$ 11 mil foram arrecadados para a compra de material, garantindo assim a produção inicial de 25 próteses. Depois dessa campanha, inúmeras empresas e pessoas físicas têm procurado o Mao3D oferecendo ajuda na forma de impressoras 3D, filamentos para impressão e acessórios para montagem das próteses, além de prestação de serviços diversos. Pode-se afirmar agora que o
Mao3D é um programa colaborativo construído e mantido pela dedicação de muitas pessoas. Com todo desenvolvimento cientifico e tecnológico do mundo atual, dispositivos de Tecnologia Assistiva mais confortáveis, anatômicos, funcionais e esteticamente agradáveis já deveriam ser uma realidade. De modo geral, a impressão 3D pode alavancar a Tecnologia Assistiva do Brasil por ser um recurso economicamente viável atualmente. Baseado no Modelo de Programa Social Mao3D, muitos outros programas podem ser desenvolvidos. O Mao3D tem sido usado como referência em vários lugares do Brasil e tem servido como motivação para que outros grupos iniciem projetos similares de Tecnologia Assistiva.
Maria Elizete Kunkel é professora adjunta de Engenharia Biomédica, subárea Biomecânica, no Instituto de Ciência e Tecnologia da Universidade Federal de São Paulo. Docente permanente no Programa de Pós-Graduação em Engenharia Biomédica da Universidade Federal do ABC. Graduada em Física pela UFC, especialista em Jornalismo Científico pela UNICAMP, mestre em Bioengenharia pela USP e PhD em Biomecânica pela Medizinischen Fakultät der Universität Ulm, Alemanha. Coordena o Grupo de pesquisa Biomecânica e Forense da UNIFESP desenvolvendo pesquisas na área de Tecnologia Assistiva usando manufatura aditiva e coordena o Programa Social Mao3D.
elizete.kunkel@unifesp.br
iMasters #21 Fevereiro 2017
20 // CÓDIGO ABERTO
Código Aberto Por Kemel Zaidan, Evangelista Locaweb em tempo integral e de software livre nas horas vagas
E
EDITOR DE TEXTO HIPSTER O tempo em que as IDEs reinavam soberanas parece mesmo ter ficado para trás. Hoje, os editores de texto estão entre as ferramentas preferidas dos desenvolvedores. Atualmente, quem quer hackear a ferramenta que utiliza para editar seus códigos conta com muito mais do que Brackets e Atom. Hipster mesmo é aparecer no escritório com um dos editores abaixo e ainda "zoar" o colega porque ele continua usando Sublime Text!
Light Table Trata-se de um projeto que surgiu através de financiamento coletivo no Kickstarter.com e que conta com recursos interessantes para linguagens como Python, Clojure, JavaScript, HTML e CSS. Com ele, além de customizar atalhos e instalar plugins, é possível executar o código diretamente do Light Table e ter uma espécie de "two-way data binding", onde as interações da execução podem ser inspecionadas no editor. Vale a pena dar uma conferida!
github.com/LightTable/LightTable slap Você sempre sonhou em unir a facilidade e os recursos do Sublime com a flexibilidade de execução em linha de comando que o Vim oferece? Então vai amar esse projeto, pois ele busca justamente levar a experiência de uso do iMasters #21 Fevereiro 2017
Sublime para ambientes sem interface gráfica, permitindo que você possa fazer uso do mouse e da área de transferência mesmo em uma sessão SSH. Como não poderia deixar de ser, ele ainda possui syntax highlight, autoindentação e é extensível através de plugins.
github.com/slap-editor/slap Zed Code Editor Se você é do tipo que não gosta de utilizar o terminal, talvez deseje poder editar seus códigos-fonte dentro do navegador, seja para poder utilizá-lo em seu Chromebook ou mesmo para ter seu editor de texto preferido em qualquer lugar que possua um navegador. O Zed Code Editor é instalável através da loja de aplicativos do Chrome ou como uma aplicação independente para Mac, Windows e Linux, e conta com recursos avançados como
// 21
múltiplos cursores, code completion e lint para algumas linguagens.
github.com/zedapp/zed Ninja-IDE O nome do projeto origina-se do acrônimo reverso para "Ninja-IDE Is Not Just Another IDE". Apesar de ser compatível com outras linguagens, o editor traz um excelente suporte para o desenvolvimento Python, como suporte para virtualenv, visualização de erros PEP8, breakpoints e a possibilidade de inserir um import sem ter que fazer scroll para o topo do texto. Por ser escrito em Python, é possível estender as funcionalidades básicas utilizando a linguagem para a criação de plugins.
∂ De cima para baixo: Lime Text, slap, Zed Code Editor, Ninja-IDE e Light Table.
github.com/ninja-ide/ninja-ide
Imagens: Divulgação.
Lime Text Se o Atom não é parecido o bastante com o Sublime para você, é hora de dar uma chance ao Lime Text. Escrito em Go, o projeto começou como um substituto livre do Sublime, capaz inclusive de utilizar os inúmeros plugins disponíveis nele. Contudo, o projeto evoluiu e hoje pretende ir além. Com uma arquitetura cliente/servidor, é possível utilizar o backend do Lime Text com múltiplos frontends, incluindo opções em Qt, HTML e linha de comando.
Kemel Zaidan é um pseudo-programador, metido a jornalista, com alma de artista e evangelista Locaweb.
kemel.zaidan@locaweb.com.br
github.com/limetext iMasters #21 Fevereiro 2017
22 // .NET
O NOVO .NET: LEVE, OPEN SOURCE, RÁPIDO E MULTIPLATAFORMA Por Giovanni Bassi, Chief Software Architect na Lambda3
EM NOVEMBRO DE 2013, durante o MVP Summit nos headquarters da Microsoft em Redmond, a empresa mostrou para um público fechado uma ideia que estava nascendo. À época, com apenas duas semanas de vida, vimos um protótipo do que viria a ser uma revolução no .NET, o .NET Core: um renascimento da plataforma .NET, mais leve, mais rápida, open source e multiplataforma. O restante do mundo conheceu o projeto em 12 de maio de 2014, no evento TechEd. No MVP Summit, assim como no TechEd, a novidade abalou as estruturas. Mercado e comunidade de desenvolvedores pararam para admirar o que estava se desenrolando diante dos seus olhos. Tudo parecia estar mudando. E estava. Naquele momento, foram anunciadas muitas possibilidades novas, e também surgiu muita confusão. A princípio, as mudanças não estavam totalmente claras. Hoje, três anos depois, já temos um panorama. Vamos analisar o que aconteceu – um pouco de história é sempre bom – e olhar para a frente, entender o que o futuro nos reserva. iMasters #21 Fevereiro 2017
Surgimento: .NET vNext e ASP.NET vNext No anúncio que aconteceu no TechEd, o ASP.NET Core era chamado de ASP.NET vNext. Por um tempo depois do TechEd, ele também foi chamado de ASP. NET 5, já que o ASP.NET até então era o ASP.NET 4 (e continua sendo até hoje). Teríamos então nesse novo ASP.NET uma nova versão, mas não uma continuação plena, já que várias partes, como o WebForms, não estariam presentes. À época, havia ferramentas de linha comando (Command Line Interface – CLI) chamadas “kvm”, e “k”. O kvm permitia escolher a versão do runtime, e o “k” era o responsável por rodar as aplicações. Tivemos alguns previews rodando no Visual Studio vNext (que viria a ser o Visual Studio 2015). Os projetos tinham a extensão “.kproj”, depois evoluindo pra “.xproj”, e agora caminhando para “.csproj”, a final. De “k”, fomos para “dnx”, e então “dotnet”, que é a CLI atual. Todo esse ferramental está estável, mas ainda está em movimento. A minha expectativa é de que até a metade de 2017 toda a plataforma se consolide
// 23
Ilustração: Freepik.
de uma vez por todas. Desde o começo, a plataforma rodou tanto no Linux como no Mac e no Windows. Porém, ela ainda era alpha, com graus variados de suporte, desempenho e bugs em cada plataforma. Hoje ela está estável e roda bem. Mudando o mindset O novo .NET aproxima as suas outras plataformas. No mundo open source, que não era o do .NET (e agora é), a linha de comando era muito presente. O .NET Core traz o terminal para a frente, tornando-o cidadão de primeira linha na experiência. Também não há mais a necessidade do uso do Visual Studio. Editores de texto como Sublime, TextMate, Visual Studio Code ou até mesmo o Vim são escolhas para desenvolver aplicações com .NET Core e ASP.NET Core. Apesar de não ser obrigatório, o Visual Studio,
agora também gratuito em uma série de cenários, continua funcionando perfeitamente. Caso não queira, o desenvolvedor que prefere Visual Studio jamais precisará ir à linha de comando, podendo trabalhar exatamente como trabalhava antes. É importante ressaltar que não há “pegadinhas”. Não há nada que seja possível somente no Visual Studio que não seja nos outros ambientes. Se você quiser ficar longe dele, é uma opção totalmente viável. A ideia é cada um trabalhar onde e como preferir. O surgimento do .NET Standard No Release Candidate 2, na metade de 2016, aconteceu uma guinada no projeto. As mudanças que apontei se consolidaram nessa versão, surgindo a primeira versão do .NET Standard - uma standard library que cumpre basicamente a mesma função que as stdlibs iMasters #21 Fevereiro 2017
24 // .NET
cente anúncio do suporte para Tizen, que vai permitir rodar .NET em televisões Samsung ainda neste ano. Acostume-se com a ideia de passar a ver .NET em roteadores wireless, Raspberry Pis, entre outros, além dos servidores Linux, Windows, Android, iOS, Xbox, Hololens e Windows Mobile. O .NET, no recente benchmark livre e independente da TechEmpower, está entre os 10 servidores mais rápidos do mundo, superando aplicações feitas com Python, Node.js, Ruby, Clojure, Rust, Haskell, entre outros (veja mais em http://bit.ly/netcorebenchmark). Isso é muito importante tanto para demandas muito grandes, como as que rodam na nuvem, onde cada ciclo de processamento reflete diretamente no custo final, quanto para demandas pequenas, como um Raspberry Pi, onde o desempenho pode ficar inaceitável com plataformas ineficientes.
.NET everywhere... and fast! O .NET hoje está encaminhado para rodar muito bem em qualquer lugar, seja com Linux, Mac, Windows ou outras plataformas - como aconteceu com o reiMasters #21 Fevereiro 2017
Giovanni Bassi é Chief Software Architect (CSA) na Lambda3, onde lidera a produção de código e as iniciativas de pesquisa e desenvolvimento. Criou, norteia e está presente em diversos grupos de usuários de tecnologia. Palestrante internacional, é comum encontrá-lo como participante em eventos da área por todo o Brasil, assim como em podcasts, webcasts e na redação de artigos. Colabora ativamente em vários projetos e inciativas open source dentro e fora do País. Trabalha com desenvolvimento ágil com foco em hard skills. Você o encontra online no twitter.com/giovannibassi.
Ilustração: Freepik.
de outras linguagens e plataformas, como C++, Ruby, Go etc. O .NET Standard padroniza as APIs, que devem ser disponibilizadas por qualquer plataforma que deseje rodar componentes construídos para o novo .NET. A novidade é importantíssima porque retira do .NET a responsabilidade de torná-lo verdadeiramente multiplataforma, ainda que o .NET Core continue buscando rodar em diversos sistemas operacionais. Além disso, o .NET Standard tem suporte no .NET Framework, que nasceu em 2002 e vem evoluindo até hoje (e que não vai parar de evoluir). Assim, um componente feito para o .NET Standard poderá rodar tanto no .NET Core quanto no .NET Framework. A forma anterior de deixar componentes portáveis, as Portable Class Libraries (PCLs), tornam-se assim menos interessantes. Conforme o suporte todo migra para o .NET Standard, em tempo deixaremos de vê-las. E se você já trabalhou com PCLs, sabe que isso é muito positivo. Afinal, elas resolvem em parte o problema de portabilidade, mas não sem alguma dor.
O futuro Passamos por diversos desafios devido à instabilidade do framework ainda muito imaturo, mas superamos. No começo, poucas bibliotecas suportavam o .NET Core. Com a aproximação do .NET Standard 2.0, esperado para entre março e junho deste ano, novos cenários se tornam mais fáceis. A entrega final do ferramental também vai trazer estabilidade à plataforma, junto com o lançamento do Visual Studio 2017.Enxergamos que 2017 será o ano da consolidação do .NET Core e do ASP.NET Core. Se você desenvolve software, é uma boa hora pra começar a se preparar.
DROPS DO MERCADO FACULDADE IMPACTA: INOVAÇÃO COM O SISTEMA SMART CLASS A Faculdade Impacta leva em sua essência o conceito de tecnologia que, unido à educação, faz da Instituição um local com diferenciais que intensificam o aprendizado dos alunos e otimizam o tempo de cada um. Desta maneira, a Impacta desenvolveu o sistema Smart Class, em que as aulas de graduação são gravadas e o aluno pode assisti-las quando e onde quiser, de qualquer plataforma digital. Trata-se de uma lousa eletrônica, presente em todas as salas, que captura cada ponto das aulas presenciais, como voz, escrita dinâmica, vídeo e navegação do professor. Com o sistema Smart Class, o aluno mantém o foco na explicação do conteúdo sem a necessidade qualquer anotação. A plataforma permite o acesso a qualquer disciplina de todos os cursos, o que amplia o repertório para o mercado de trabalho. O conteúdo do Smart Class é livre e gratuito. Atualmente, a Impacta tem mais de 30 mil aulas disponíveis em uma sala de ensino virtual para download.
CONTE COM MAIS AUTONOMIA EM SEUS PROJETOS COM O VPS O VPS, servidor virtualizado Linux, oferece maior autonomia para configurar aplicações e instalar programas, pois conta com a performance SSD, que garante maior liberdade para desenvolver projetos com as principais API’s, conexão permanente com a internet, menor latência e alta disponibilidade com caminhos redundantes em Gigabit e PTT. A performance ainda é garantida com os processadores Intel Xeon E5 V4 e o SSD Intel que oferece 10 vezes mais desempenho que um HD padrão na escrita e leitura dos dados. E ainda há disponível opções de imagens pré-configuradas, como: LAMP com Ubuntu 16.04 LTS, PHP 7, Apache 2.4.18, MariaDB 15.1 e diversas distribuições Linux (Fedora 24, OpenSUSE 13, Ubuntu 14.04 e 16.04, CentOS 6 e 7, Debian 7 e 8). Se ficou curioso e quer conhecer um pouco mais sobre o VPS Locaweb, acesse http://lwgo.to/1bd
// 25
CONHEÇA A NOVA INICIATIVA DA RADIX, A STARTUP LEAGUE A Startup League, uma iniciativa que a Radix lançou há 4 meses no mundo das startups, é um programa único que oferece apoio de marketing e RP para startups em fase inicial usando extensões da Radix. O programa é voltado para eventos globais de startups como TechCrunch, Web Summit e RISE, e provê uma gama de benefícios através do subsídio de confecção de brindes, apoio de marketing e patrocínio para presença no evento. A Startup League já expandiu seu alcance a um grupo de mais de 47 startups e 27 parceiros, incluindo aceleradoras e encubadoras como a Founders Space, The Founder Institute e WHub. Cerca de 22 startups de diversos setores - tecnologia, saúde, nutrição, esportes e mesmo energia - e geografias - Europa, América do Norte e América Latina - foram patrocinadas pela Startup League em vários eventos ao redor do mundo no ano passado, como o Web Summit de Lisboa, TechCrunch Disrupt SF, Apps World London, Bits and Pretzels Munich, TechCrunch Disrupt London e INCmty Mexico.
MERCADO PAGO INTEGRADO AO SHOPIFY Os sites de e-commerce brasileiros hospedados no Shopify, uma das plataformas mais usadas no mundo, já podem utilizar o módulo de pagamento do Mercado Pago, fintech especializada em meios de pagamento. A integração do Mercado Pago com a plataforma de origem canadense permite que, em poucos cliques, os e-commerces brasileiros tenham acesso aos serviços oferecidos pela fintech, incluindo a criação de cupons de desconto, sem a necessidade de códigos ou desenvolvimento. Além do Shopify o Mercado Pago está integrado também com outras plataformas já integradas, como Magento, Prestashop e WooCommerce.
iMasters #21 Fevereiro 2017
26 // GAMES
UTILIZAÇÃO DE MIDDLEWARES DE ÁUDIO NO DESENVOLVIMENTO DE JOGOS Por Kaue Lemos, Diretor de Áudio da INSANE
O DESENVOLVIMENTO de jogos digitais está em alta no mundo todo. As engines e os softwares de desenvolvimento têm se aprimorado a uma velocidade impressionante, possibilitando o desenvolvimento de jogos mais complexos e polidos de maneira mais otimizada e a um custo acessível. Essa evolução também aconteceu na integração do áudio aos jogos. Hoje temos algumas Middlewares de áudio que fornecem diversas ferramentas para otimizar o processo de implementação do som dentro da engine via script, sem a necessidade da criação de sistemas complexos, pois eles já estão dentro da arquitetura do pacote fornecido pela Middleware que será integrada. Vou descrever abaixo algumas das vantagens e possibilidades da utilização de Middlewares de áudio no desenvolvimento de jogos. Vamos utilizar como exemplo o FMOD Studio, uma das Middlewares mais conhecidas do mercado. Processo resumido de Integração da Middleware FMOD Studio com a engine: iMasters #21 Fevereiro 2017
Engine > Integration Package > API (Studio ou Low Level) > Authoring Tool > Build dos Bancos de Áudio > Implementação > Build do jogo O primeiro passo é importarmos o Integration Package para dentro do projeto do jogo em alguma engine de desenvolvimento compatível, como Unity, UE4 entre outras. No caso, o FMOD Studio disponibiliza duas APIs. FMOD Lowlevel e Studio API em C# A Studio API é um pouco mais simplificada para fazer as chamadas dos eventos criados dentro do FMOD Studio Tool; já a Lowlevel API fornece controles mais avançados para os eventos de áudio, e é recomendada para a criação de projetos mais complexos, que necessitam de mecânicas especiais. Após fazer a integração inicial da Middleware com a engine, partimos para as configurações básicas do projeto e apontamos o path dos bancos de áudio que serão
// 27
gerados dentro do FMOD Studio Authoring Tool. É aqui que a mágica acontece: o próprio Sound Designer poderá ter controle sobre a lógica e a mecânica dos eventos de áudio, e os programadores precisarão se preocupar apenas com as chamadas dos eventos. Imagine que temos um jogo com um personagem principal que vai pisar em diversos terrenos diferentes, e cada terreno vai ter seu próprio som de footstep: areia, madeira, grama, pedra etc. No FMOD Authoring Tool, o Sound Designer vai criar um evento de áudio apenas com um parâmetro chamado “terrain”, e cada valor desse parâmetro vai ser responsável pelo trigger dos sons de seu respectivo terreno. Imagine que cada terreno tenha diversos samples para o footstep. O FMOD será responsável por randomizar esses samples, além de poder randomizar o pitch, volume, entre outros aspectos que estão nativamente disponíveis na Middleware, e o programador precisará apenas dar play no evento de áudio no momento certo e “mostrar” para o FMOD qual o valor do parâmetro “terrain”, o qual é o terreno em que o personagem está pisando. Todas as “randomizações”, volume e quaisquer parâmetros nativos estarão sob o controle do Sound Designer. Claro que isso é apenas um exemplo de uma mecânica de áudio simples, porém, em termos de script, teremos economizado muitas linhas de código e tempo, o que é muito importante no desenvolvimento. Após o Sound Designer elaborar toda a mecânica dentro do FMOD, basta fazer a Build dos bancos de áudio, e todos os eventos criados estarão disponíveis para que o programador possa fazer as chamadas. Principais vantagens da utilização das Middlewares de áudio: 1 - Otimização do processo de implementação: para mim, uma das vantagens mais importantes. Utilizando a Middleware, economizamos tempo de programação, além de termos um script muito mais otimizado. 2 - Todos os controles de áudio e mecânicas de áudio são de fácil acesso e userfriendly para o Sound Designer. Isso é muito importante e reflete na qualidade final do áudio, pois o Sound Designer terá maior controle sobre volumes, randomizações, reverb e quaisquer modulações de áudio de maneira muito mais intuitiva e sem a necessidade de re-script. Até pouco tempo atrás, era muito comum ter que pedir para os próprios programadores criarem sistemas de randomização e
probabilidade de disparo dos samples manualmente. Um simples ajuste de volume em muitos projetos era feito via script, o que tornava o processo menos intuitivo e menos otimizado para o profissional do áudio. 3 - As Middlewares em geral, especialmente o FMOD Studio, fornecem ferramentas essenciais para o desenvolvimento de áudio, tais como: A - Criação de parâmetros internos que possibilitam a modulação dos sons, randomização de volume e pitch, randomização de samples, controle do tamanho do emissor de áudio, ou seja, a relação de volume entre o emitter e o listener. B - Utilização de plugins de áudio de alta qualidade, como Reverbs, Compressores, Flanger, AudioMotors etc. C - Ferramentas de desenvolvimento de áudio para VR como doppler, reverbs de convolução, processamento de HRTF e áudio binaural em tempo real. D - Sound Occlusion (FMOD Feature) - Aplicação de filtros ao som em tempo real baseado em obstáculos entre o emissor e o ouvinte. E - Profiler - Ferramenta otimizada para o debugging das chamadas de áudio, facilitando a otimização do uso de CPU, memória e detecção de irregularidades na implementação. F - Possibilidade de criação de grupos de mixagem e alterações complexas de mixagem do jogo em tempo real. Por exemplo: quando o player pausa o jogo, podemos aumentar o volume da música, adicionar reverb à dublagem e desligar os efeitos sonoros aplicando um filtro de frequências - tudo isso com apenas uma chamada de áudio. G - Live Update (FMOD Feature) - Possibilita a mixagem do jogo em tempo real conectado com a Build do jogo. Isso facilita e muito os ajustes finos de mixagem, o que é essencial para a qualidade final do áudio. Saiba mais em http://fmod.org
Kaue Lemos é Diretor de Áudio da INSANE (Desenvolvedora do MMORPG Profane) e CEO da 7Sounds - Game Audio Solutions. Desde 2010, foi responsável pelo áudio de mais de 80 projetos, entre eles: MMORPG Profane, Heavy Metal Machines, Coelhadas da Mônica e Earth Under Siege.
kaue.lemos@7sounds.audio
iMasters #21 Fevereiro 2017
28 // ENTREVISTA
Inteligência Artificial: quando o futuro já é realidade Por Mariana Anselmo, para Redação iMasters
R
REDES NEURAIS, Inteligência Artificial, Chatbots... Todos esses são termos conhecidos de quem trabalha na área de TI. Principalmente nos dias de hoje, em que cada vez mais a tecnologia busca deixar a comunicação entre humanos e máquinas mais natural, mais humanizada. Rodrigo Scotti é fundador do Nama, uma startup de Inteligência Artificial que desenvolve tecnologias que possibilitem essa comunicação. Ele é também um dos maiores nomes brasileiros na área e já palestrou em grandes eventos do setor, como o InterCon 2016. Nesta entrevista, Scotti compartilhou suas percepções sobre o mercado de IA, o que acredita ser as próximas tendências e em que pé o Brasil está nesse mercado.
Revista iMasters: Fala-se de linguagem natural como o termo do futuro na tecnologia. Por que essa aposta é tão forte? Rodrigo Scotti: A humanidade sempre demonstrou interesse pelo poder de se comunicar de forma natural com as máquinas. O próprio Alan Turing, ainda na década de 1950, já era fascinado pela possibilidade de falar com computadores e, como consequência, pela possibilidade de ter uma máquina inteligente. Hoje, estamos entrando em uma nova era da computação. A cada dia, mais aplicativos caminham para proporcionar experiências melhores, mais naturais e adaptadas aos diversos contextos iMasters #21 Fevereiro 2017
de seus usuários, e a Inteligência Artificial (IA) é um dos principais fatores que está guiando essa mudança. Pensamos em linguagem natural, sonhamos em linguagem natural, mas o computador fala a linguagem formal. Imagine o que poderíamos ganhar fazendo os dois falarem a mesma língua? Por isso que IA para compreender linguagem natural é um tema que fascina. Com o domínio de, automaticamente, gerar um diálogo, é possível entender o jeito como nos relacionamos, geramos dados e consumimos. Por exemplo, algumas aplicações práticas incluem tradução automática, automação de pro-
// 29
“O conceito de Chatbots mudou, evoluiu muito, principalmente em 2016, após a adoção e o incentivo desse tipo de tecnologia por grandes empresas como Facebook, Microsoft e Google. ” Scotti
Foto: Fornecida pelo autor.
cessos, extração de informações, geração de relatórios e resposta às perguntas de usuários. Hoje, estamos no hype dos Chatbots. O conceito de Chatbots mudou, evoluiu muito, principalmente em 2016, após a adoção e o incentivo desse tipo de tecnologia por grandes empresas como Facebook, Microsoft e Google. Esse hype fica com um tempero interessante quando se aplica IA. Tomando o ambiente do Facebook como exemplo, existem ferramentas para construir Chatbots no Messenger que utilizam somente botões para interagir com o usuário, outras que possibilitam o uso de IA para conversar ou, até mesmo, uma combinação dos dois. As evoluções recentes em IA que possibilitam interação por linguagem natural podem ajudar bastante as pessoas, ainda mais quando temos um ambiente com Chatbots conectados aos aplicativos de maiores usos: os mensageiros. Revista iMasters: Como funciona a compreensão da linguagem natural? Rodrigo Scotti: Descobrir como o sistema de linguagem funciona e permitir que a máquina se comunique de forma natural conosco podem ser complexos. iMasters #21 Fevereiro 2017
30 // ENTREVISTA
“... o Machine Learning é um conjunto de técnicas que permite que computadores aprendam com exemplos fornecidos. ” Scotti
É muita coisa para se considerar: ironias, gírias, regionalismos, emoções… A linguagem tem diversas camadas e, por isso, é um problema complicado. Ainda existem muitas questões em aberto quando o tema é a compreensão da linguagem natural pela máquina. Porém, fizemos muitas evoluções e tivemos resultados sensacionais nos últimos anos. Para entender como esse tipo de tecnologia funciona, primeiro é importante conhecer um pouco sobre NLP, sigla em inglês para Processamento de Linguagem Natural. O NLP é um campo da computação que combina Inteligência Artificial, linguística computacional e Ciência da Computação para permitir que a máquina compreenda linguagem natural, uma tarefa, até então, exclusiva para nós, humanos. Existem diversas formas de se chegar à compreensão da linguagem natural, e isso depende do objetivo a ser perseguido. Uma delas é utilizando a classificação de intenções e entidades. Para entender melhor, considere esta frase dita pelo usuário: “Preciso de voo para 12/05 para o Rio”. Nesse caso, a intenção seria “compra de passagem” e as entidades seriam “12/05/2016 e Rio de Janeiro, RJ - Brasil”. Combinando esses dois conjuntos de informações, conseguimos compreender o sentido da frase em análise. Outras formas de compreensão incluem a identificação da estrutura morfológica da frase, identificando verbos, substantivos e adjetivos, por exemplo. Revista iMasters: Qual o papel do Machine Learning na evolução da linguagem natural e quais os algoritmos utilizados por vocês? Rodrigo Scotti: Programar um computador para ser inteligente é, de fato, muito difícil. A diferença é que, hoje, o proble-
iMasters #21 Fevereiro 2017
ma está sendo abordado de outra forma: programar um computador que aprende a ser inteligente. E isso muda tudo. O Machine Learning, como parte integrante do conceito de Inteligência Artificial, está ajudando o desenvolvimento rápido de aplicações inteligentes. Basicamente, o Machine Learning é um conjunto de técnicas que permite que computadores aprendam com exemplos fornecidos. Dessa forma, a máquina consegue reconhecer padrões complexos e tomar decisões inteligentes baseadas em dados. A implementação de Machine Learning facilitou bastante o desenvolvimento da compreensão da linguagem natural, tornando-a cada vez mais acessível. Anteriormente, as tarefas para compreender linguagem envolviam a codificação direta e manual de grandes conjuntos de regras. Mas, agora, o Machine Learning está ajudando com algoritmos (frequentemente, baseados em inferência estatística) para automaticamente apreender regras através da análise de conjuntos de dados reais (por exemplo, histórico de conversas). Nos Chatbots, eles podem ser treinados para entender melhor a diversidade de opções que a linguagem humana oferece. Por exemplo, pense nas frases “Quero um sapato”, “Preciso de um sapato” e “Gostaria de comprar um sapato”: embora as três sejam diferentes, elas representam todas a mesma intenção (comprar um sapato). A máquina consegue aprender, então, que essas três frases são relativamente iguais. Na Nama, utilizamos Deep Learning, que é a abordagem mais moderna para aprendizado de máquina. A diferença é que utilizamos um conjunto de algoritmos adicionais, cada um com uma finalidade e que são refinados e retroalimentados com resultados de processos
// 31
anteriores para inferir respostas. Dessa forma, conseguimos ter uma taxa de acerto muito maior na compreensão da linguagem, podendo entregar uma experiência superior ao usuário. Revista iMasters: Hoje já vemos algumas tentativas de bots no atendimento ao consumidor em diversos sites. Como os desenvolvedores podem aprimorar esses serviços e oferecer uma melhor experiência ao cliente? Rodrigo Scotti: Existem diversos casos reais com o quais podemos aprender bastante sobre o uso e o comportamento dos usuários. Essas lições fazem diferenças exponenciais para a adoção da ferramenta pelo público geral. É natural com qualquer aplicação, não é só a tecnologia por si só. A maior lição seria começar com um escopo simplificado, ter uma estratégia prevendo o lançamento de novas versões com melhorias constantes e acompanhar o histórico de uso do Chatbot para implementar melhorias. Outra sugestão seria habilitar o Chatbot para utilizar IA, o que permitiria uma experiência mais natural por parte do usuário, adicionando um tempero para personalização e automação de tarefas. O usuário espera escrever para ter o que busca; dessa forma, é interessante ter essa funcionalidade bem treinada para aplicação. Por último, recomendo ter um bom desenho de diálogos que, de forma sútil, guie o usuário para o que o Chatbot está treinado a fazer. Por exemplo, na mensagem inicial do robô, é importante dizer ao usuário o que ele pode fazer e, também, e guiá-lo com perguntas claras durante algum processo de interação, por exemplo. Revista iMasters: Existe uma discussão ética muito profunda em torno da Inteligência Artificial. Como manter a ética
no desenvolvimento da linguagem natural, visto que muitos não consideram ético humanizar um computador? Rodrigo Scotti: De fato, existem algumas questões éticas que podem se desenvolver com o avanço da Inteligência Artificial. No que diz respeito à linguagem natural, uma das principais preocupações seria o abuso de publicidade e vendas invasivas, que poderiam ser conduzidas por robôs que fingiriam (muito bem) ser humanos em telefone, e-mail e mensageiros. Creio que uma maneira eficaz de impedir que isso ocorra seja reforçar códigos de condutas éticos em empresas, associações e até entidades educacionais, a fim de impedir ou reduzir a possibilidade de que aplicações como essas sejam desenvolvidas ou aderidas ao mercado. Atualmente, muitos serviços de IA contemplam cláusulas em seus termos de uso para impedir que isso aconteça, por exemplo. Revista iMasters: Ano passado, o Google fez uma entrevista com uma IA que ele mesmo criou. Na ocasião, foram abordados temas como lógica, filosofia, política etc., e as respostas foram bem estranhas (goo.gl/TIBXu1). Você acredita que a IA apenas se perdeu em alguns momentos, que estava mal treinada ou que ela realmente foi mal projetada? Rodrigo Scotti: Esse experimento do Google foi bem interessante. Eles utilizaram redes neurais artificiais para treinar um motor conversacional capaz de dar respostas simples e básicas, mas com conhecimento extraído de bases de dados abertas. O experimento mostrou-se limitado, mas o bacana é que o resultado foi obtido através de uma abordagem puramente baseada em dados, sem qualquer regra pré-definida. De fato, os próprios pesquisadores reconheiMasters #21 Fevereiro 2017
32 // ENTREVISTA
ceram que a aplicação não manteve uma personalidade coerente durante os testes e que modificações substanciais no projeto precisariam ser feitas para ter um resultado mais realista.
“A adoção de IA para linguagem natural já está acontecendo em um bom ritmo em território nacional, já temos diversos Chatbots por aqui, Siri e até o Assistente da Google estão prontos para falar nossa língua.” Scotti
Revista iMasters: Você é fundador da Nama, uma startup de Inteligência Artificial que desenvolve tecnologias para que computadores sejam capazes de se comunicar com a mesma naturalidade de uma conversa humana. Como você avalia a adoção da linguagem natural no Brasil? Rodrigo Scotti: Tem sido muito bacana acompanhar o desenvolvimento e a adoção desse tipo de tecnologia, principalmente sendo um provedor nacional. Quando a Nama foi fundada, nosso produto inicial era um assistente pessoal por voz, similar à Siri, só que customizado para aplicações empresariais. Nós resolvemos mudar o foco do produto no inicio de 2015, antes do hype dos Chatbots. Na época, constatamos que deveríamos estar no mesmo canal em que o público geral já estava, ou seja, nos mensageiros. Não é novidade que o brasileiro é um povo comunicativo, que gosta de se relacionar e de novas tecnologias - basta ver o sucesso de redes sociais e aplicativos como Whatsapp por aqui. Hoje, o conceito de Chatbot fica cada vez mais claro para os usuários, principalmente após o Facebook liberar suporte para essas aplicações. A adoção de IA para linguagem natural já está acontecendo em um bom ritmo em território nacional, já temos diversos Chatbots por aqui, Siri e até o Assistente da Google estão prontos para falar nossa língua. Com relação à adoção desse tipo de tecnologia por empresas,
iMasters #21 Fevereiro 2017
também não enxergamos barreiras. A empresas estão abertas a inovar e adotar IA, principalmente quando a intenção é reduzir custos e melhorar o atendimento ao consumidor. Estamos com um projeto bem banana com o Poupatempo, do Governo do Estado de São Paulo, e tivemos a oportunidade de verificar como a iniciativa estatal está lidando com essas questões e, principalmente, de ver como diversas classes sociais e em várias situações estão interagindo com interfaces conversacionais. Ficamos superanimados com os resultados, principalmente aqueles relacionados à experiência positiva do cidadão com essas novas tecnologias. Revista iMasters: Como a Nama busca ser inovadora e trazer mais do que o mercado brasileiro já possui? Rodrigo Scotti: A Nama provê tecnologia aberta para a comunidade de tecnologia e entidades que querem melhorar seu atendimento e experiência de usuário. Acreditamos que a inteligência artificial pode ajudar a melhorar diversos aspectos de nosso cotidiano e, por isso, deve ter uma forma acessível de trocar informações e se expressar melhor com nós, humanos. Estamos abrindo parte de nossa tecnologia e convidamos todos para experimentar e colaborar com um framework open source que poderá ajudar a comunidade de desenvolvimento nisso, o NAIL, que é fruto de anos de trabalho, de um time que se esforçou intensamente e de forma independente. Ele é uma forma robusta, fácil e modular para criar interfaces conversacionais entre humanos e máquinas.
// 33
FIAP & IT MÍDIA APRESENTAM :
BUSINESS INNOVATION MASTER CLASSES VOCÊ NÃO VAI MUDAR SÓ O SEU MINDSET. VOCÊ VAI MUDAR.
BUSINESS REGENERATION
CYBER SECURITY
TOOLS
TECHNOLOGY FORECASTING
HIGH SPEED
BLOCKCHAIN
DIGITAL
DIGITAL NATIVES AND THE NEW MARKET
TRENDING ANALISYS
PROTOTYPING
VENTURE BUILDING
DESIGN THINKING EXPONENTIAL TECHNOLOGIES
CULTURE DRIVEN LEADERSHIP
INNOVATION
MACHINE LEARNING
VIRTUAL REALITY
IOT
TRANSFORMATION
CORPORATE
ENTREPRENEURSHIP
BIG DATA
ARTIFICIAL INTELLIGENCE
CURSO DE 60 HORAS - INÍCIO: MAIO DE 2017 PARA CEOS, CIOS, GESTORES DE TECNOLOGIA E AGENTES DE TRANSFORMAÇÃO.
masterclasses.fiap.com.br
iMasters #21 Fevereiro 2017
34 // CAPA
DESENVOLVENDO MICROSSERVIÇOS USANDO GO E DOCKER
Ilustração: Thaís Trizoli.
Por Elton Minetto, sócio da Coderock
iMasters #21 Fevereiro 2017
// 35
Recentemente, durante o desenvolvimento de uma funcionalidade do projeto CompuFácil, nos deparamos com um requisito relativamente comum a uma série de sistemas comerciais: para a geração da nota fiscal eletrônica, é necessária a consulta de uma base de dados com informações de produtos e impostos. Ao analisarmos o requisito com mais detalhes, percebemos algumas características:
R
Os dados da tabela são atualizados apenas algumas vezes por ano; Esses dados devem ser acessados pela interface web, aplicativos móveis, aplicativos desktop e por scripts; Os dados são independentes, não sendo influenciados por outras áreas do sistema. Essas características nos levaram à decisão de implementar essa funcionalidade como um microsserviço. Segundo James Lewis, parafraseando Martin Fowler: “[...] o estilo de arquitetura de microsserviços é uma abordagem que desenvolve um aplicativo único como uma suíte de pequenos serviços, cada um executando seu próprio processo e se comunicando através de mecanismos leves, muitas vezes em uma API com recursos HTTP. Esses serviços são construídos em torno de capacidades de negócios e funcionam através de mecanismos de deploy independentes totalmente automatizados. Há o mínimo possível de gerenciamento centralizado desses serviços, que podem ser escritos em diferentes linguagens de programação e utilizam diferentes tecnologias de armazenamento de dados”. Com essa decisão validada, o próximo passo foi definir a linguagem de programação para a implementação. Seguindo o exemplo de um grande número de empresas, como Uber e Google, a nossa escolha foi Go. Dentre alguns fatos que pesaram na escolha podemos citar: boa documentação, linguagem moderna e com evolução rápida e curva de aprendizado moderada, pois possui diversas similaridades com C.
Neste artigo, vamos apresentar um passo a passo de como implementamos a solução usando TDD, Go e Docker. Vamos começar criando uma estrutura de diretórios para nosso projeto, no nosso GOPATH: export GOPATH=`pwd` mkdir -p src/coderockr
Nesse diretório, vamos salvar os códigos do projeto. Seguindo o conceito de TDD, vamos começar com um teste simples, criando o arquivo main_test.go:
package main import “testing” func TestHelloWorld(t *testing.T) { var expected = “World” var result = hello() if result != expected { t.Error( “expected”, expected, “got”, result, ) } }
Ao executarmos o primeiro teste, ele deve falhar, como esperado: cd src/coderockr go test # coderockr ./main_test.go:7: undefined: hello FAIL coderockr [build failed]
Vamos agora fazer o teste passar, escrevendo o código no main.go:
iMasters #21 Fevereiro 2017
36 // CAPA package main func hello() string { return “World” }
Executando novamente o teste: go test PASS ok coderockr 0.008s
Passado o primeiro (e didático) teste, vamos ao código do nosso microsserviço. Vamos criar um novo teste para implementarmos a busca por um produto: func TestGetProduto(t *testing.T) { var expected = Produto{“70101000”, “SC”, 0, “Ampolas de vidro,p/transporte ou embalagem”, 13.45, 17.00, 18.02, 0.00, “0”, “01/01/2017”, “30/06/2017”, “W7m9E1”, “17.1.A”, “IBPT”} var result = getProduto(“70101000”, “SC”, “0”) if result != expected { t.Error( “expected”, expected, “got”, result, ) } }
Vamos criar a função getProduto, e esta deve retornar uma struct com os dados do produto pesquisado. O código mínimo que precisamos incluir no main.go para que o teste passe é: func getProduto(codigo string, uf string, ex string) Produto { return Produto{“70101000”, “SC”, 0, “Ampolas de vidro,p/transporte ou embalagem”, 13.45, 17.00, 18.02, 0.00, “0”,
“01/01/2017”, “30/06/2017”, “W7m9E1”, “17.1.A”, “IBPT”} }
Executando novamente o go test, podemos ver que agora os testes estão passando e, com isso, podemos refatorar o código para incluir nossa lógica. Como o nosso microsserviço vai precisar de um banco de dados, a melhor opção para esse cenário é usarmos o SQLite para gerenciar as informações. Para isso, vamos precisar instalar o pacote para conexão com o banco de dados, que é uma dependência externa ao nosso projeto. Vamos aproveitar para incluir um novo conceito que é o gerenciamento de pacotes, algo comum a todas as linguagens modernas como PHP, Python, JavaScript etc. Como em Go temos mais de uma opção, precisamos optar por uma solução - nesse caso, o Glide: https://glide.sh. O primeiro passo é instalarmos o Glide, o que pode ser feito de diversas formas, de acordo com a documentação oficial. Como estamos usando MacOS neste exemplo, optamos pela forma mais simples que é executar: brew install glide
Vamos agora refatorar nosso main.go para incluir as dependências necessárias, incluindo: package main import ( “database/sql” _ “github.com/mattn/go-sqlite3” )
Se executarmos o go test, agora vamos receber uma mensagem de erro indicando a falta do pacote go-sqlite3. Para resolver, isso vamos usar o Glide, executando: glide init
Com esse comando, o glide varre o nosso códiiMasters #21 Fevereiro 2017
// 37
go localizando as dependências não instaladas e faz uma série de perguntas sobre as versões encontradas e decisões de instalação. Para fins didáticos, respondi Y para as perguntas e, ao final, é criado um arquivo chamado glide.yml com as informações que ele encontrou: package: coderockr import: - package: github.com/mattn/go-sqlite3 version: ~1.2.0
Você pode fazer alterações, caso ache necessário, para mudar alguma versão ou definição. Agora, basta executar o comando a seguir para que o Glide instale as dependências: glide install
Ao final da instalação, é criado um diretório chamado vendor com as dependências e um arquivo chamado glide.lock. O arquivo glide.lock possui os detalhes das versões instaladas e deve ser salvo dentro do repositório para que todas as instalações tenham as mesmas versões. O diretório vendor pode ser incluído no seu .gitignore, pois ele não precisa ser salvo no repositório. Para quem vem do mundo PHP, o Glide tem um comportamento muito parecido com o Composer e mais detalhes podem ser vistos na documentação do projeto. Uma dica para melhorar a performance dos testes locais é executar o comando:
func getProduto(codigo string, uf string, ex string) Produto { var result = Produto{} db, dbError := sql.Open(“sqlite3”, “./ artigo.db”) defer db.Close() if dbError != nil { 6 panic(dbError) } stmt, stmtError := db.Prepare(“SELECT * FROM produto where codigo = ? and uf = ? and ex = ?”) if stmtError != nil { panic(stmtError) } sqlError := stmt.QueryRow(codigo, uf, ex). Scan(&result.Codigo, &result.Uf, &result.Ex, &result.Descricao, &result.Nacional, &result.Estadual, &result.Importado, &result.Municipal, &result.Tipo, &result.VigenciaInicio, &result.VigenciaFim, &result.Chave, &result.Versao, &result. Fonte) if sqlError != nil { panic(sqlError) } return result }
Executando o go test novamente, vamos ter um novo erro, pois não existe o banco de dados artigo.db, que vamos criar com o comando:
go install -v
Como o Glide faz o download das fontes das dependências, cada vez que executarmos go test, elas são compiladas, e isso se torna um pouco lento devido ao tamanho do pacote go-sqlite3. Executando o go install, os pacotes ficam pré-compilados, o que melhora bastante a performance dos testes. Vamos agora refatorar nosso código para fazer uso do novo pacote:
sqlite3 artigo.db SQLite version 3.14.0 2016-07-26 15:17:14 Enter “.help” for usage hints. sqlite> CREATE TABLE `produto` ( ...> `codigo` VARCHAR(10) not null, ...> `Uf` VARCHAR(100) null, ...> `Ex` int null, ...> `Descricao` VARCHAR(100) null,
iMasters #21 Fevereiro 2017
38 // CAPA
...> `Nacional` real null, ...> `Estadual` real null, ...> `Importado` real null, ...> `Municipal` real null, ...> `Tipo` VARCHAR(100) null, ...> `VigenciaInicio` VARCHAR(100) null, ...> `VigenciaFim` VARCHAR(100) null, ...> `Chave` VARCHAR(100) null, ...> `Versao` VARCHAR(100) null, ...> `Fonte` VARCHAR(100) null ...> ); sqlite> insert into produto values(“701010 00”,”SC”,0,”Ampolas de vidro,p/transporte ou embalagem”,13.45,17.00,18.02,0.00,”0”,”01 /01/2017”,”30/06/2017”,”W7 m9E1”,”17.1.A”,”IBPT”);
Com isso, nossos testes voltam a passar. Aqui, podemos fazer um “parêntese” e comentar que essa não é a melhor abordagem para os testes, pois o mais correto seria criarmos um mock da base de dados e não executar a consulta durante os testes. Mas, para fins didáticos, vamos simplificar o exemplo e deixar para o leitor o exercício de melhorar esse teste usando uma solução de mocks como o https://github.com/DATA-DOG/go-sqlmock. No teste acima, nós estamos validando apenas o “caminho feliz” e precisamos pensar no comportamento do código para o caso de não existir o produto que estamos pesquisando. Para isso, vamos criar um novo teste e refatorar nosso código para que ele fique mais “idiomático”. Dessa forma, nosso main_test.go ficou da seguinte forma: package main import “testing” func TestHelloWorld(t *testing.T) { var expected = “World” var result = hello() if result != expected { t.Error( “expected”, expected, “got”, result, )
iMasters #21 Fevereiro 2017
} } func TestGetProduto(t *testing.T) { var expected = Produto{“70101000”, “SC”, 0, “Ampolas de vidro,p/transporte ou embalagem”, 13.45, 17.00, 18.02, 0.00, “0”, “01/01/2017”, “30/06/2017”, “W7m9E1”, “17.1.A”, “IBPT”} var result, _ = getProduto(“70101000”, “SC”, “0”) 8 if result != expected { t.Error( “expected”, expected, “got”, result, ) } } func TestGetProdutoNotFound(t *testing.T) { expected := “Produto not found” var _, err = getProduto(“7010110”, “SC”, “0”) if err.Error() != expected { t.Error( “expected”, expected, “got”, err.Error(), ) } }
Agora estamos usando um conceito muito aplicado em funções no Go, o retorno de dois valores: o sucesso e o erro, caso este exista. O nosso primeiro teste ignora o valor de erro e testa apenas o sucesso, enquanto que o segundo teste é focado em validar o caso de erro. Para que nossos testes voltem a passar, vamos refatorar nosso main.go: package main import (
// 39 “database/sql” “errors” _ “github.com/mattn/go-sqlite3” ) func hello() string { return “World” } type Produto struct { Codigo string Uf string Ex int Descricao string Nacional float64 Estadual float64 Importado float64 Municipal float64 Tipo string VigenciaInicio string VigenciaFim string Chave string Versao string Fonte string } func getProduto(codigo string, uf string, ex string) (produto Produto, err error) { var result = Produto{} db, dbError := sql.Open(“sqlite3”, “./ artigo.db”) defer db.Close() checkErr(dbError) stmt, stmtError := db.Prepare(“SELECT * FROM produto where codigo = ? and uf = ? and ex = ?”) checkErr(stmtError) sqlError := stmt.QueryRow(codigo, uf, ex). Scan(&result.Codigo, &result.Uf, &result.Ex, &result.Descricao, &result.Nacional, &result.Estadual, &result.Importado, &result.Municipal, &result.Tipo, &result.VigenciaInicio, &result. VigenciaFim, &result.Chave, &result.Versao, &result. Fonte) switch { case sqlError == sql.ErrNoRows:
return produto, errors.New(“Produto not found”) default: checkErr(sqlError) } return result, nil } func checkErr(err error) { if err != nil { panic(err) } }
Fizemos a inclusão do pacote errors, mudamos a assinatura da função getProduto para que ela retorne mais de um valor e criamos uma função chamada checkErr para remover algum código duplicado. A função checkErr pode mais tarde ser refatorada para melhorar o tratamento de erros, pois o comando panic nem sempre é a melhor forma a ser usada. Executando o go test novamente, tudo deve passar normalmente. Com nossa lógica coberta por testes, podemos desenvolver o código que vai transformar nosso projeto em um microsserviço, recebendo requisições HTTP e retornando o valor desejado. Para isso, vamos criar um método main em nosso arquivo main.go: func main() { http.HandleFunc(“/”, HandleIndex) http.ListenAndServe(“:8082”, nil) }
Ao executarmos o serviço, ele ficará “ouvindo” na porta 8082 e, a cada requisição, a função HandleIndex será invocada. Essa função deve chamar o getProduto, transformar a struct em um conteúdo JSON e devolver o resultado para o usuário. Vamos começar criando um teste para essa nova função, validando o cenário de erro mais comum: func TestWithoutParameters(t *testing.T) {
iMasters #21 Fevereiro 2017
40 // CAPA req, _ := http.NewRequest(“POST”, “/”, nil) rr := httptest.NewRecorder() HandleIndex(rr, req) if status := rr.Code; status != http. StatusNotFound { t.Errorf(“handler returned wrong status code: got %v want %v”, status, http. StatusNotFound) } }
Lembrando que precisamos também incluir o pacote “net/http/httptest” no começo do main_test.go. Para fins didáticos, vamos incluir aqui todos os testes antes de escrevermos o código final do main.go. Dessa forma, o nosso main_test.go ficou da seguinte forma: package main import ( “net/http” “net/http/httptest” “net/url” “strconv” “strings” “testing” ) func TestHelloWorld(t *testing.T) { var expected = “World” var result = hello() if result != expected { t.Error( “expected”, expected, “got”, result, ) } } func TestGetProduto(t *testing.T) { var expected = Produto{“70101000”, “SC”, 0, “Ampolas de vidro,p/transporte ou embalagem”, 13.45, 17.00, 18.02, 0.00, “0”,
iMasters #21 Fevereiro 2017
“01/01/2017”, “30/06/2017”, “W7m9E1”, “17.1.A”, “IBPT”} var result, _ = getProduto(“70101000”, “SC”, “0”) if result != expected { t.Error( “expected”, expected, “got”, result, ) } } func TestGetProdutoNotFound(t *testing.T) { expected := “Produto not found” var _, err = getProduto(“7010110”, “SC”, “0”) if err.Error() != expected { t.Error( “expected”, expected, “got”, err.Error(), ) } } func TestWithoutParameters(t *testing.T) { req, _ := http.NewRequest(“POST”, “/”, nil) rr := httptest.NewRecorder() HandleIndex(rr, req) if status := rr.Code; status != http. StatusNotFound { t.Errorf(“handler returned wrong status code: got %v want %v”, status, http. StatusNotFound) } } func TestNotFound(t *testing.T) { data := url.Values{} data.Set(“codigo”, “invalid”) data.Set(“uf”, “SC”) data.Set(“ex”, “0”) req, _ := http.NewRequest(“POST”, “/”,
// 41
strings.NewReader(data.Encode())) req.Header.Add(“Content-Type”, “application/x-www-formurlencoded”) req.Header.Add(“Content-Length”, strconv.Itoa(len(data.Encode()))) rr := httptest.NewRecorder() HandleIndex(rr, req) if status := rr.Code; status != http. StatusNotFound { t.Errorf(“handler returned wrong status code: got %v want %v”, status, http.StatusNotFound) } } func TestFound(t *testing.T) { data := url.Values{} data.Set(“codigo”, “70101000”) data.Set(“uf”, “SC”) data.Set(“ex”, “0”) req, _ := http.NewRequest(“POST”, “/”, strings.NewReader(data.Encode())) req.Header.Add(“Content-Type”, “application/x-www-formurlencoded”) req.Header.Add(“Content-Length”, strconv.Itoa(len(data.Encode()))) rr := httptest.NewRecorder() HandleIndex(rr, req) if status := rr.Code; status != http. StatusOK { t.Errorf(“handler returned wrong status code: got %v want %v”, status, http.StatusOK) } }
Nós incluímos nele os testes dos principais cenários do projeto e as dependências necessárias. E agora podemos visualizar o código final do main.go:
package main import ( “database/sql” “encoding/json” “errors” _ “github.com/mattn/go-sqlite3” “io” “net/http” ) func hello() string { return “World” } type Produto struct { Codigo string Uf string Ex int Descricao string Nacional float64 Estadual float64 Importado float64 Municipal float64 Tipo string VigenciaInicio string VigenciaFim string Chave string Versao string Fonte string } func getProduto(codigo string, uf string, ex string) (produto Produto, err error) { var result = Produto{} db, dbError := sql.Open(“sqlite3”, “./ artigo.db”) defer db.Close() checkErr(dbError) stmt, stmtError := db.Prepare(“SELECT * FROM produto where codigo = ? and uf = ? and ex = ?”) checkErr(stmtError) sqlError := stmt.QueryRow(codigo, uf, ex). Scan(&result.Codigo,
iMasters #21 Fevereiro 2017
42 // CAPA &result.Uf, &result.Ex, &result.Descricao, &result.Nacional, &result.Estadual, &result.Importado, &result.Municipal, &result.Tipo, &result.VigenciaInicio, &result. VigenciaFim, &result.Chave, &result.Versao, &result. Fonte) switch { case sqlError == sql.ErrNoRows: return produto, errors.New(“Produto not found”) default: checkErr(sqlError) } return result, nil }
io.WriteString(w, string(result)) } func main() { http.HandleFunc(“/”, HandleIndex) http.ListenAndServe(“:8082”, nil) }
Agora que os testes passaram, podemos executar o comando: go build
E o executável coderockr será gerado no diretório atual (src/coderockr). Podemos testá-lo executando:
func checkErr(err error) { if err != nil { panic(err) } } func HandleIndex(w http.ResponseWriter, r *http.Request) { r.ParseForm() codigo := r.FormValue(“codigo”) uf := r.FormValue(“uf”) ex := r.FormValue(“ex”) w.Header().Add(“Access-Control-AllowOrigin”, “*”) w.Header().Set(“Content-Type”, “application/json”) produto, err := getProduto(codigo, uf, ex) if err != nil { w.WriteHeader(http.StatusNotFound) returnError := map[string] string{“error”: err.Error()} errorMessage, errJson := json. Marshal(returnError) checkErr(errJson) io.WriteString(w, string(errorMessage)) return } result, err := json.Marshal(produto) checkErr(err)
iMasters #21 Fevereiro 2017
./coderockr
De outro terminal, podemos usar o comando curl para validar os dados: curl http://localhost:8082
O resultado deve ser: {“error”:”Produto not found”}
Passando dados: curl http://localhost:8082 -d “codigo=70101000&uf=SC&ex=0”
E o resultado deve ser o JSON esperado. Com nosso serviço funcionando, vamos agora passar para a última etapa, que é criarmos um container Docker que será enviado aos ambientes de execução. Para esse exemplo, precisamos ter o comando docker instalado na máquina e uma conta em algum serviço de registro de containers.
// 43
docker login
Vamos iniciar criando o arquivo Dockerfile dentro da raiz do nosso projeto com o conteúdo: FROM golang:1.7 ENV GOPATH /go COPY src/coderockr/glide.lock /go/src/ coderockr/ COPY src/coderockr/glide.yaml /go/src/ coderockr/ COPY src/coderockr/main.go /go/src/ coderockr/ COPY src/coderockr/artigo.db /go RUN cd /go/src/coderockr \ && curl https://glide.sh/get | sh \ && glide install \ && go build -o /go/artigo-imasters main.go
Agora basta enviar para o registry, usando: docker push coderockr/exemplo-imasters
Lembrando que é preciso mudar o “coderockr” pelo nome da sua conta no registry. E nos servidores onde o serviço vai executar, podemos usar os comandos: docker pull coderockr/exemplo-imasters docker run --rm -p 8082:8082 coderockr/ exemplo-imasters
EXPOSE 8082 CMD [“/go/artigo-imasters”]
O arquivo contém todos os comandos necessários para compilar nosso serviço e executá-lo. Para criarmos o container, basta executar: docker build -t coderockr/exemploimasters .
Se tudo deu certo, o container vai ser gerado e estará pronto para ser executado: docker run --rm -p 8082:8082 coderockr/ exemplo-imasters
Podemos usar os comandos do curl acima para validar que o serviço está funcionando como o esperado. O último passo é enviarmos nosso novo container para um Docker Registry, para que possamos facilmente instalá-lo e em todos os ambientes. Neste exemplo, vamos usar o Docker Hub, sendo necessário criar uma conta no http://hub.docker.com e fazermos o login no terminal usando o comando:
Na documentação oficial do Docker, podemos ver exemplos mais avançados dos comandos docker push e docker pull, como a criação de tags de versão e atualizações incrementais. Também podemos incrementar a solução usando gatilhos do GitHub e Docker Hub para que o container seja atualizado automaticamente a cada commit. E existe uma série de ferramentas que podem ser usadas para realizarmos o deploy automático do container para os ambientes de homologação ou produção, como os fornecidos pela Heroku, Amazon AWS, Gitlab, Getup Cloud etc. Mas essas sugestões ficam como exercícios para os leitores e talvez como assunto para outro artigo. *Agradecimentos especiais aos meus colegas das equipes da Coderockr e CompuFácil que me ajudaram na revisão deste artigo. Elton Minetto possui graduação em Ciência de Computação pela Unochapecó e especialização em Ciência da Computação pela UFSC/ UNOESC. É desenvolvedor desde 1998 e professor desde 2004. Sócio da Coderockr, é autor dos livros Frameworks para Desenvolvimento em PHP, Grid Computing in Research and Education, Zend Framework na prática, Zend Framework 2 na prática, Iniciando com o Zend Framework 2 e Doctrine na prática.
eminetto@gmail.com iMasters #21 Fevereiro 2017
44 // CHATBOT
MAIS UM CICLO NA INTERNET, O RETORNO DOS CHATBOTS E COMO ELES FUNCIONAM Por Rodrigo “pokemaobr” Cardoso, Community Manager iMasters
A INTERNET SEMPRE foi algo cíclico. No início, tínhamos páginas web o mais clean possível, com poucos elementos e que ainda demoravam para carregar. Nessa época, a conexão era muito lenta. Com a melhora da qualidade das conexões oferecidas e, consequentemente, do carregamento das páginas, elas foram ganhando mais recursos visuais, banners e sites em Flash, um milhão de gifs animados e páginas extremamente pesadas. Mas o que vemos hoje é uma volta ao passado: os sites estão se preocupando novamente com performance, oferecendo páginas com poucos recursos e que demandam pouco da banda. O mesmo aconteceu com a forma de se comunicar. Começou com o telnet, os chats, o ICQ e o mIRC, que eram recursos que utilizavam a escrita como forma de comunicação. Então, eles evoluíram para a comunicação por voz, como o Paltalk, as mensagens de voz do MSN. Em seguida, fomos para os vídeos do Skype e do Hangouts. Logo após, fomos apresentados ao Whatsapp, que, retornou para a forma textual de se comunicar. E hoje não é diferente. A bola da vez é o que chamamos de Chatbots. O conceito é bem antigo: basicamente um programa que se apresenta em forma de um usuário de alguma plataforma no estilo chat (mIRC, Telegram, Slack, Facebook Messenger, Skype etc.) que responde a comandos em um chat. Ele pode realizar algumas lógicas, alimentar banco de dados, criar e realizar tarefas em geral e dar uma resposta ao comando solicitado. iMasters #21 Fevereiro 2017
No início, os Chatbots respondiam a comandos simples, como os iniciados com “!” e compreendiam algumas abreviações. Observando o caso acima, quando um usuário do canal #the.bot.city de um servidor de IRC, escrevesse “wz (Código da Localidade)”, o ExtremeBot respondia com algumas informações, como o nome da cidade, estado, umidade, horário local etc. Um exemplo de código em mIRC Scripting que retornaria o que o bot respondeu, seria:
on *:TEXT:wz &:#the.bot.city:{ msg $chan $nick $+ $message }
// 45 Onde “on *:TEXT:wz &:#the.bot.city:” é um gatilho de evento: quando for digitado o texto “wz” seguido de um outro argumento (no caso “36869”) no canal “#the.bot.city”, “.msg # $nick $+ $message” envia uma mensagem no canal que foi digitado começando com o nick da pessoa que digitou, concatenado com a mensagem. No caso existe uma lógica por trás da mensagem, que traz os dados da localização e do clima. Com o passar do tempo, os Chatbots começaram a ser programados para responder de acordo com um contexto de conversa, como por exemplo nesse chat do Slack:
Com o bot criado, agora vamos entender um pouco sobre o que o Google Prediction faz. Ele é um serviço do Google que recebe uma massa de dados - no caso, enviaremos em formato csv –, treina essa massa e fornece um “previsão” em relação a uma chamada a sua API. Para usá-lo, é preciso ter uma conta no Google Cloud Platform e habilitar alguns processos. Os passos necessários para essa habilitação podem ser vistos aqui: https://cloud.google.com/prediction/. No nosso caso, iremos usar uma massa de dados de expressões em determinado regionalismo. Será algo parecido com isso:
Imagens: Fornecidas pelo autor.
Região de onde provém, Regionalismo
E é aí que o negócio começa a ficar interessante! O boom dos Chatbots vem exatamente junto com outro boom: o do Machine Learning. Utilizando conceitos de Inteligência Artificial e a crescente gama de serviços de Machine Learning fica muito mais fácil para a máquina aprender padrões comportamentais e linguísticos de determinada pessoa. Sendo assim, os Chatbots deixaram de apenas responder a comandos; agora eles conseguem interagir com humanos usando linguagem natural. Agora vamos ilustrar um exemplo básico de Chatbot. Para isso, utilizaremos o Telegram como tecnologia de chat e uma API do Google chamada Google Prediction como ferramenta de Machine Learning. Caso você não conheça, o Telegram é um aplicativo para troca de mensagens, que possui APIs abertas para comunicação entre usuários. O que o torna bastante interessante quando falamos de Chatbots. Neste exemplo, iremos criar um ChatBot que descobrirá de onde o usuário é, através da leitura de expressões comuns de alguns lugares no Brasil. Nesse caso, utilizaremos termos típicos do “carioca”, do “mineiro” e do “gaúcho” para o bot reconhecer. O primeiro passo para criar um bot no Telegram é falar com o BotFather. Assim, você conseguirá criar um bot com o nick que você quiser, receber o token de acesso ao bot, dar as permissões necessárias para o bot participar de canais e programá-lo. Para saber mais sobre o processo, acesse: https://core.telegram.org/bots.
“carioca”, “mermão” ”mineiro”, “trem” “gaucho”, “guri” “gaucho”, “tche”; “carioca”, “bixcoito” “mineiro”, “belzonti” “carioca”, “sinistro” … Devemos, então, treinar a massa dos dados, dentro do serviço do Google Prediction, para poder fazer as chamadas na API. Para isso, devemos chamar o serviço prediction.trainedmodels.insert e, depois de algum tempo, chamar o serviço prediction. trainedmodels.get para verificar se a massa de dados já foi treinada. Então, quando chamarmos, por exemplo, a API do Google Prediction passando “trem”, ela deve nos retornar “mineiro”. Vale lembrar que em um projeto de Machine Learning, assim que o Chatbot percebe que o usuário é de uma determinada região, ele irá treinar ainda mais expressões para melhorar a taxa de acerto. Com a massa treinada, vamos à integração do Chatbot com o Google Prediction. Para realizar essa integração, podemos utilizar diversas bibliotecas e SDKs disponíveis para a linguagem de preferência. Porém, para efeito de entendimento, iremos utilizar as chamadas puras a API do Telegram. Quando criamos um bot no Telegram, o BotFather envia um token para podermos as chamadas na API. Para verificar as mensagens que seu Bot recebeu, podemos realizar uma chamada a seguinte URL: https://api.telegram.org/bot{token}/getUpdates. Onde {token} é a chave que o BotFather enviou. No nosso caso, enviei algumas mensagens no privado do Bot e fiz a chamada de getUpdates. O resultado dessa chamada é algo parecido com isso: iMasters #21 Fevereiro 2017
46 // CHATBOT
Um JSON que contém o id de cada mensagem, o conteúdo e quem a enviou. Você pode ler esse JSON na linguagem de sua preferência. Quase todas as linguagens possuem suporte a leitura de JSON. Em PHP, por exemplo, poderíamos utilizar um json_ decode($json) para transformar o JSON em Array. Com o JSON lido, temos agora quem enviou a mensagem e seu conteúdo. Portanto, podemos enviar o conteúdo da mensagem a API do Google Prediction e verificar qual de onde é a pessoa que enviou a mensagem. Vale ressaltar que quando você for desenvolver o projeto, caso não esteja usando uma biblioteca ou SDK de Telegram, você terá que iterar entre as mensagens recebidas e fazer um controle para que você não leia ou responda a mesma mensagem mais de uma vez. Então, cada conversa no privado do ChatBot estará no Updates e poderá ser recuperada no getUpdates. Partindo daí, basta utilizar o serviço prediction. trainedmodels.predict para receber a “previsão” de que estado é aquele usuário que usa regionalismos específicos. Recebendo o JSON de retorno do Prediction API. Que seria algo como:
{“kind”: “prediction#output”, “id”: “sotaques”, “selfLink”: “link_para_o_ predict”, “outputLabel”: “Carioca”, “outputMulti”: [{“label”: “Mineiro”,”score”:
“0.100000”},{“label”: “Carioca”, “score”: “0.900000”},{“label”: “Gaucho”,”score”: “0.000000”}]}
Verifique que cada possível região, ou o sotaque desta região, recebe um “score” e o outputLabel (que no caso é o retorno) é a região que recebe mais porcentagem nesse score. Bem, depois de receber o sotaque no Prediction API. Basta, enviarmos o “vencedor” para a API do Telegram, para que nosso ChatBot possa enviar o resultado para o usuário. Um exemplo da chamada para retorno para o usuário seria: https://api.telegram.org/bot{token}/ sendMessage?chat_id={id_da_ conversa}&text=Carioca
E o resultado:
Lembrando que a ideia desse artigo é mostrar de modo didático como é feito em geral uma aplicação de ChatBot. Existem infinitas bibliotecas em diversas linguagens, tanto para trabalhar com a API do Telegram, quanto com as APIs do Google - inclusive a Google Prediction. Neste caso, foram utilizadas as chamadas diretas HTTP para entendermos como funcionaria os princípios da comunicação com as APIs. Espero que tenham gostado e até a próxima.
Rodrigo “pokemaobr” Cardoso é Bacharel em Matemática Aplicada e Computacional pela Universidade Federal Rural do Rio de Janeiro e tem MBA em Engenharia de Softwares Orientado para Serviços pelo IBTA. Atualmente, é Community Manager no iMasters. Desenvolvedor desde 1999. Evangelista PHPSP. Desenvolve sistemas desde batalhas Pokémon em mIRC a robôs automatizadores de tarefas.
rodrigo.cardoso@imasters.com.br iMasters #21 Fevereiro 2017
Imagem: Fornecida pelo autor.
{“ok”:true,”result”:[{“update_ id”:86879252, “message”:{“message_id”:2,”from”:{“i d”:121585871,”first_name”:”Pokemaobr ”,”username”:”pokemaobr”},”chat”:{“i d”:121585871,”first_name”:”Pokemaobr ”,”username”:”pokemaobr”,”type”:”priv ate”},”date”:1481719126,”text”:”e aew mermão”}},{“update_id”:86879253, “message”:{“message_id”:3,”from”:{“id ”:121585871,”first_name”:”Pokemaobr”,” username”:”pokemaobr”},”chat”:{“id”:12 1585871,”first_name”:”Pokemaobr”,”user name”:”pokemaobr”,”type”:”private”},”d ate”:1481719226,”text”:”tá sinistro isso brother”}}]}
DROPS DO MERCADO CHEGAMOS A BH, UAI! A Concrete Solutions nasceu no Rio de Janeiro e está há 15 anos no mercado de tecnologia brasileiro, oferecendo times de alta performance e consultoria para o desenvolvimento de produtos digitais. A empresa abriu uma filial em São Paulo em 2009 e, desde então, não para de crescer. O pulo foi de 199 funcionários, em 2015, para quase 400, no fim de 2016. A companhia, que só trabalha com métodos ágeis (desde 2006) e tem projetos desenvolvidos em web e mobile em mais de 25 países, está expandindo um pouco mais a sua atuação. O eixo Rio-São Paulo ficou pequeno, e a ideia agora é criar experiências incríveis para o pessoal de Minas Gerais. O escritório está localizado na Av. Getúlio Vargas, 671, sala 800. E as vagas para os primeiros funcionários mineiros já estão abertas! Basta consultar o site da Concrete.
CONHEÇA OS BENEFÍCIOS DA HOSPEDAGEM OTIMIZADA PARA WORDPRESS A KingHost criou uma hospedagem de sites desenvolvida especialmente para WordPress, com armazenamento em discos SSD, servidores otimizados com PHP7, NGINX e Varnish Cache, infraestrutura que faz seu site voar até 300x mais rápido! O produto também traz facilidades como configurações de servidor prontas e atualizações de temas e plugins automatizadas. Entre os itens de segurança, destaca-se antivírus, antispam, monitoramento, proteção contra-ataques, hackfix e backups diários. O certificado SSL vem instalado por padrão, mantendo os dados criptografados durante a navegação dos usuários e deixando inclusive as transações financeiras totalmente protegidas. O pacote ainda inclui alguns serviços para ajudar no marketing digital do seu projeto, como disparos de e-mail marketing, plugin de SEO Yoast instalado e outra ferramenta premium de diagnóstico e análise chamada SEO Certo. Visite o site: kinghost.com.br/wordpress.
// 47
O FUTURO DA SUA APLICAÇÃO PASSA PELAS OPERADORAS TELEFÔNICAS Que podem ajudar os usuários da sua aplicação a produzirem mais com recursos, como ligação com um clique no telefone de contatos com opção de gravação na operadora; envio e recebimento de SMS; distribuição inteligente de ligação recebida; histórico online para gestores acompanharem negociações, atividades etc. De olho nesta oportunidade, a Directcall lançou HELPER´s e API´s que podem automatizar telefonia na sua aplicação “em minutos”, sem a obrigação de CTI ou VoIP. Enquanto os HELPER´s entregam para o desenvolvedor interfaces web prontas para o uso de recursos e relatórios de telefonia (que podem ser personalizadas com a sua identidade visual), as API´s são mais indicadas para os recursos que não demandam interfaces amigáveis para o usuário final, por exemplo: para automatizar SMS padrão para clientes inadimplentes; para gravar ligações realizadas ou recebidas por vendedores etc. + Inf.: http://doc.directcallsoft.com.
RESELLERCLUB LANÇA GSUITE Com objetivo de ampliar o alcance de mercado e a rentabilidade de seus revendedores, a ResellerClub lançou o G Suite (antigo Google Apps). A partir de agora, seus revendedores poderão vender o GSuite com a margem que desejar, através do Programa de Revenda da ResellerClub. Além da conhecida plataforma de envio de e-mails, o GSuite também oferece ferramentas completas de colaboração e comunicação, como: Drive, Docs, Hangout e Agenda. A ResellerClub é a única plataforma de revenda de serviços web presente no Brasil e conta com mais de 200 mil revendedores e 5 milhões de domínios gerenciados no mundo. Sua poderosa plataforma permite que Web Developers, Designers e Agências Digitais gerenciem clientes e produtos, por meio de uma única interface de administração.
iMasters #21 Fevereiro 2017
48 // MAKER
O IMPACTO DA IMPRESSÃO 3D E DA CULTURA MAKER NA EDUCAÇÃO Por André Skortzaru, Co-fundador da 3D Criar
ESCREVER SOBRE O impacto da impressão 3D e da cultura do “faça-você-mesmo” na educação merece a análise do conceito de aprendizagem de conteúdo relevante e os desafios educacionais contemporâneos. Pode-se observar nas escolas do Brasil e do mundo a formação de jovens sem habilidades, conhecimentos e competências críticas para uma vida bem-sucedida, tanto pessoal como profissional. Na era digital, um período com mudanças e transformações aceleradas, as competências e os conhecimentos desenvolvidos nas escolas muitas vezes não são relevantes. Os estudantes questionam o propósito do conteúdo e das disciplinas que devem aprender. A escola não pode se distanciar do mundo real e do ambiente em que vivem no dia a dia. A educação oferecida deve ser relevante para iMasters #21 Fevereiro 2017
atender às necessidades dos alunos, da sociedade e do mercado de trabalho, conforme a realidade das suas culturas. O bem-estar e o progresso dos indivíduos e da sociedade demandam uma educação que ensine habilidades para a vida real, promovendo o STEAM (sigla em inglês para Ciências, Tecnologia, Engenharia, Artes e Matemática) e a formação profissional. As competências devem ser transferíveis e incentivar o pensamento crítico e a inovação, assim como apoiar a individualidade e os talentos do jovem. A descoberta da conexão entre o conteúdo educacional e a experiência dos alunos influencia diretamente na motivação e na possibilidade de aprender e alcançar objetivos. São necessárias novas formas de adquirir conhecimentos antes do ingresso no mercado de trabalho.
Desafios da educação contemporânea Os estudantes de hoje enfrentarão o mundo e o mercado de trabalho onde são valorizadas habilidades e competências diferentes do que seus pais e professores aprenderam. Qual é a fórmula para que alunos tenham sucesso em suas vidas e sejam adultos realizados? Durante muito tempo, inteligência, capacidade de resolver problemas e raciocínio lógico foram as respostas para essa pergunta. Assim, todas as avaliações educacionais atuais visam a medir essas competências, conhecidas como cognitivas, por estarem ligadas ao conhecimento. Exemplo máximo é o PISA, que compara o desempenho de estudantes de 65 economias mundiais em Leitura, Matemática e Ciências. Um novo elemento foi recentemente adicionado à equação do
Foto: Shutterstock | Syda Productions.
// 49
sucesso individual dos alunos. Diversas pesquisas mostraram que não basta dominar Português e Matemática, por exemplo, se o indivíduo não souber se relacionar com os outros, não for determinado e não conseguir controlar suas emoções, entre outras características da personalidade. São as competências não-cognitivas ou socioemocionais, como chamam os educadores; dentre elas estão autonomia, estabilidade emocional, sociabilidade, capacidade de superar fracassos, curiosidade, perseverança e outras. O que as pesquisas estão descobrindo agora pais e professores já sabiam há tempos. Sem esforço, organização, criatividade, dedicação e boa sociabilidade, mesmo um aluno inteligentíssimo terá dificuldades em ter uma vida estudantil e profissional bem-sucedida. Por outro lado, um aluno com alguma
dificuldade de aprendizagem pode compensar com perseverança, disciplina e maturidade emocional para alcançar os objetivos. A aprendizagem criativa e a educação através do “fazer” (making) despontam como modelos de aprendizagem fundamentais para a formação de competências socioemocionais como a capacidade de resolver problemas, trabalho em equipe, liderança, colaboração, criação, design thinking, engajamento e empreendedorismo - habilidades tão valorizadas no século 21. Aprendizagem criativa Aprendizagem criativa pode ser entendida como a transformação pessoal a partir da conquista de novas habilidades e conhecimentos. Esse processo ocorre através do engajamento direto na realização de projetos particulares ou
coletivos que sejam genuinamente relevantes para os envolvidos. A cultura do aprender fazendo tem uma história muito arraigada na educação e, graças à impressão 3D, esse conceito educacional torna-se cada vez mais presente. A impressão 3D, os espaços “maker” e Fab Labs nas escolas e universidades alteram a forma como os alunos aprendem e a maneira como os educadores ensinam. Os Espaços Maker e Fab Labs na educação constituem um local com equipamentos de fabricação digital (impressoras 3D, corte a laser, fresadoras CNC, plotadoras, eletrônica), ferramentas, comunidade (professores, tutores e estudantes) e conteúdo educacional (projetos, aulas, treinamento). Essa metodologia representa a democratização do design, engenharia, fabricação e educação em todos os níveis. É iMasters #21 Fevereiro 2017
um fenômeno relativamente novo, mas que está começando a produzir projetos com impactos nacionais importantes. Equipamentos, comunidade e educação A educação maker tem o potencial de revolucionar a forma como abordamos o ensino e a aprendizagem, por meio dos fundamentos do construtivismo e da filosofia de “aprender com a mão-na-massa”. Assim, a educação maker é um ramo da filosofia construtivista que vê o processo do saber como um esforço pessoal. Nesse sentido, os professores agem como um guia para abordagem baseado em questionamentos para o desenvolvimento de processos de conhecimento e pensamento. Educação relevante no século 21 Em um ambiente construtivista
iMasters #21 Fevereiro 2017
ideal, a linha entre aluno e instrutor torna-se turva. Por exemplo, considere um estudante enfrentando dificuldades na concepção de um projeto que tenha relação com o projeto de outro aluno, o qual desenvolveu algum tipo de solução. Assim, no ambiente colaborativo, os estudantes trabalham em conjunto para superar o obstáculo; nesse caso, um aluno é o “aprendiz”, enquanto o outro é o clássico “professor”. Essa proposta inovadora, inspirada no “movimento maker” - que tem como base a cultura do “faça você mesmo e aprenda” –, pressupõe que qualquer pessoa pode construir, modificar e fabricar tudo com as próprias mãos. Na “educação maker”, por meio da prototipagem, por exemplo, o aluno idealiza o que quer projetar, faz a impressão, corrige uma peça que não se encaixa e vê a sua ideia concretizada. O modelo de aula ‘tradicional’
não atrai mais os alunos. A metodologia 3D, que está pautada no conceito de tecnologia, diversão e aprendizado, engaja e promove uma nova interação professor-aluno, em que os estudantes se tornam os protagonistas da aprendizagem. Em complemento a palitos de madeira, argila ou massinha para exemplificar assuntos em sala de aula, os professores ganham novos recursos e aderem à fabricação digital. Com a modelagem e impressão 3D, é possível criar, de forma lúdica, objetos de aprendizagem com diferentes tamanhos e geometrias, das mais simples até as mais complexas. Difundido no Brasil nos últimos anos, esse recurso tecnológico já está presente em escolas que primam pela autonomia, criatividade e espírito colaborativo dos seus alunos. Por meio dos protótipos tridimensionais, professores e alunos conseguem sair da teoria das disciplinas ao “materializar as aulas”. Imagine que um professor de biologia recorra a um protótipo minucioso, feito por seus próprios alunos em sala de aula, para explicar as funcionalidades do corpo humano, que é tão rico em detalhes? Ou que, para entender como as pirâmides maias foram construídas, os estudantes produzam uma maquete que retrate com fidelidade as estruturas físicas daquele lugar e aprendam trigonometria? Ou, ainda, para estudar matemática e física simultaneamente, os jovens tenham que elaborar um protótipo de um carrinho tridimensional? Graças ao avanço da tecnologia na educação, isso já é uma realidade.
Foto: Shutterstock | Syda Productions.
50 // MAKER
// 51
Aprendizagem relevante Mas por que, exatamente, essa metodologia tem chamado a atenção de educadores? Preço, embora importante, não é a razão. A impressão 3D está chamando a atenção das escolas, porque a tecnologia oferece suporte para o aprendizado prático baseado em projetos. Projetos escolares e universitários envolvem o desenvolvimento de protótipos criados e construídos pelos próprios alunos, assim como objetos artesanais. Mas essa prática não é adotada em sua plenitude no curriculum da maioria das instituições de ensino. De fato, muitas escolas possuem espaços para criação onde os alunos podiam materializar as ideias. Mas a adoção de computadores pelos colégios e universidades transformou esses espaços em laboratórios de informática. Embora os computadores sejam importantes, as oficinas também são. E desativar uma delas para criar um laboratório de TI não é uma boa prática. Mas só porque é possível fazer algo nem sempre significa que deve ser feito. A questão chave é atrelar a cultura maker e as novas ferramentas digitais ao currículo educacional, em especial aos projetos educativos. Tomemos a matemática como exemplo. Um estudante poderia projetar telhas de plástico de diferentes formas e explorar os tipos de padrões que podem ser construídos usando esses mesmos moldes. O professor pode explorar temas de geometria, química e física. No domínio da física e da engenharia, por exemplo, os estudantes podem projetar e
fazer suas próprias engrenagens para vários projetos e máquinas. A partir desses projetos, os alunos podem criar máquinas mais complexas, com muitas partes. No campo da impressão 3D, a habilidade mais importante e chave para criação, desenvolvimento e materialização de projetos e ideias é a capacidade de modelar em 3D, projetar a modelagem pensando nesse método e conhecer as diferentes tecnologias de impressão. Atualmente, existem muitos softwares de modelagem 3D pa-
to positivo nos estudantes, que apresentam suas impressões tridimensionais para a família, amigos e professores, gerando autorrealização e autoconfiança e, além de promover o aprendizado e a satisfação de poder realizar. O contato que o aluno tem hoje com a tecnologia 3D pode ser decisivo para algumas profissões como engenharia, design, arquitetura, odontologia, medicina e gerenciamento de projetos. Cursos superiores citados, bem como escolas de cunho tec-
A EDUCAÇÃO OFERECIDA DEVE SER RELEVANTE PARA ATENDER ÀS NECESSIDADES DOS ALUNOS, DA SOCIEDADE E DO MERCADO DE TRABALHO, CONFORME A REALIDADE DAS SUAS CULTURAS ra crianças, adolescentes, adultos e profissionais, como Tinkercad, Fusion 360, Meshmixer, Scuptris, Sketchup, Blender, que se destacam como softwares gratuitos para a educação. Nesse contexto, o design e o objeto são os objetivos finais, e a impressão 3D é a ferramenta de materialização, uma recompensa para a criação. Habilidades para a vida real Na metodologia de desafio e diversão na aprendizagem criativa, o estudante cria, projeta, modela em 3D e imprime o objeto. A materialização da ideia com uma tecnologia de ponta tem um impac-
nológico, já demandam ferramentas como a modelagem e a impressão 3D para viabilizar projetos e protótipos com custo e tempo reduzidos. A demanda existente é notória, sendo que as instituições de ensino cedo ou tarde deverão adotar as tecnologias para escaparem da obsolescência, proverem uma educação de qualidade, manterem-se competitivas e reterem os talentos. O segmento do Ensino Médio demanda recursos digitais dinâmicos e interativos em diferentes ambientes de aprendizagem, elaborados a partir de uma base tecnológica. As escolas do Ensino Básico, por outro lado, desejam iMasters #21 Fevereiro 2017
Foto: Shutterstock | Syda Productions.
52 // MAKER
adotar os recursos de fabricação digital, impressão 3D e Espaços Maker, porém precisam ser capacitadas para operar a tecnologia e aplicá-la ao curriculum e a projetos acadêmicos. STEAM – Ciências, tecnologia, engenharia, artes e matemática O desafio é manter o envolvimento dos alunos. Uma vez engajados, os estudantes se tornam melhor capacitados para descobrir seus talentos e desenvolver os recursos mentais que precisam para pensar criticamente. Mas manter o engajamento pode ser um desafio, especialmente no Ensino Fundamental, quando as informações e as experiências com professores não geram motivação nos estudantes. O impacto é medido pelo envolvimento do aluno e o desenvolvimento dos projetos. Os estudantes que se envolvem estarão mais preparados para os cursos de graduação e desenvolverão uma maior confiança para superar desafios, especialmente em atividades relacionadas a ciências, artes e matérias exatas. iMasters #21 Fevereiro 2017
Habilidades para o século 21 Habilidades de aprendizagem e inovação: pensamento crítico e resolução criativa de problemas, colaboração e comunicação, inovação e criatividade; Habilidades de alfabetização na era digital: alfabetização em informação e alfabetização midiática; Habilidades para a carreira e para a vida: adaptabilidade e flexibilidade, iniciativa e atitude autodirecionada, liderança e responsabilidade. Dessa forma, possibilitar que os estudantes entendam o objetivo do ensino, seja através das tecnologias ou mediante formação socioemocional, é fundamental para engajamento, motivação e realização das tarefas e projetos. Fazer cálculos matemáticos, ler capítulos de livros didáticos e executar outras atividades escolares podem não ser encaradas como punição ou ações sem utilidade, pois a metodologia baseada na relevância dos conteúdos reforça um proces-
so natural em que só é possível a aquisição de novas informações quando se tem um ponto de referência nas próprias experiências e conhecimentos, e quando os alunos conseguem fazer a ligação entre o que é novo e o que é familiar. Por fim, o pleno desenvolvimento das habilidades para a vida real e as competências socioemocionais podem ser suportadas pela tecnologia de fabricação digital, em particular a modelagem e a impressão 3D, inseridas dentro da cultura “Maker” ou cultura do “faça-você-mesmo” com o consequente alcance do sucesso pessoal e profissional, além da sensação de autorrealização, tão importantes para o alcance da felicidade.
André Skortzaru é empreendedor, maker, advogado e co-fundador da 3D Criar, startup especializada na implementação de Espaços Maker e no desenvolvimento de objetos educacionais com a fabricação digital e tecnologias emergentes.
andre.skortzaru@3dcriar.com.br
// 53
iMasters #21 Fevereiro 2017
54 // JAVASCRIPT
O ECMASCRIPT 6 E O FUTURO DO JAVASCRIPT Por Diego Martins de Pinho, Bacharel em Ciência da Computação pela PUC-SP
SEJA MUITO BEM-VINDO a uma nova era na história do JavaScript. Há muitos anos que a linguagem não ganhava modificações e funcionalidades novas relevantes, mas isso mudou com a chegada da nova versão da especificação ECMAScript. O ECMAScript (ES) é a especificação da linguagem de script que o JavaScript implementa, ou seja, é a descrição formal e estruturada de uma linguagem de script, sendo padronizada pela Ecma International - associação criada em 1961 dedicada à padronização de sistemas de informação e comunicação - na especificação ECMA-262. No dia 17 de junho de 2015, foi definida a sexta edição da especificação, a ES6 (também chamada de ECMAScript 2015). Diferentemente das edições anteriores, o ES6 trouxe a maior mudança para a linguagem JavaScript desde a sua criação, há 20 anos. O principal objetivo da nova versão especificação foi tornar a linguagem mais flexível, enxuta e fácil de se aprender e trabalhar, tornando-a mais próxima a outras linguagens orientadas a objeto, como Java e Python. Dentre as principais mudanças, temos: Criação de novos tipos de dados (Map, WeakMap, Set, WeakSet); Novas maneiras de iterar objetos e coleções; Declaração de variáveis com let e const; Modularização e estrutura de classes; Geradores e símbolos; Operadores rest e spread. Nos últimos anos, o JavaScript ganhou muita força na comunidade de desenvolve-
iMasters #21 Fevereiro 2017
// 55
Imagem: Fornecida pelo autor.
dores através do “grande boom” do ecossistema das tecnologias Node.js e npm. Desde então, a flexibilidade da linguagem tem sido usada a favor não somente do lado do cliente (nos navegadores), mas também do lado do servidor, algo impensável até alguns anos atrás. Tudo isso fez com que não somente a comunidade, mas também grandes empresas de tecnologia como o Facebook, reconhecessem a força da linguagem e finalmente a levasse a sério. E não faltam evidências que comprovam isso. A adoção e a manutenção de projetos open source nunca foram tão grandes. O GitHub - atualmente o maior site de hospedagem de projetos git na nuvem, onde reside a maior parte dos maiores projetos open source do mundo, como Docker, npm, ElasticSearch - divulgou um gráfico de popularidade de linguagens [1]. Note que o JavaScript tem estado em primeiro lugar desde 2012:
Esse interesse na linguagem se refletiu na criação de uma imensa diversidade de bibliotecas e frameworks. Alguns exemplos mais famosos que têm tido grande aceitação na comunidade e no mercado: React: Biblioteca criada pela equipe do Facebook para criação de componentes; React Native: Framework para criação de aplicativos mobile usando o React; Angular 2: Framework MVC mantido pelo Google; Vue.js: Biblioteca para criação de componentes; Meteor: Framework para criação de aplicações web singlepage; Electron: Framework para criação de aplicações desktop multiplataforma. E com a grande adoção do JavaScript nos projetos, a maior parte dos navegadores - e outras tecnologias que implementam a
∏ Popularidade das linguagens ao longo dos anos.
iMasters #21 Fevereiro 2017
56 // JAVASCRIPT
especificação - hoje já dá suporte praticamente completo para todas as funcionalidades do ES6, sem a necessidade da utilização de tradutores como o Babel. É possível conferir o status de compatibilidade no EcmaScript 6 - Compatibility Table [2]:
E as evoluções não param por aí. Para que a linguagem não pare novamente no tempo, a Ecma Internacional se comprometeu a lançar uma nova versão da especificação todos os anos. Desde o ano passado, a sétima edição da especificação
Outra prova da grande adoção da linguagem e suas alterações é o Radar Tecnológico da ThoughtWorks. O Radar é o resultado das discussões do conselho consultivo de tecnologia da empresa, que se reúne regularmente para debater a estratégia global de tecnologia da empresa e as tendências tecnológicas que têm impacto significativo na indústria. Na edição 2016 [3], a maior parte das tecnologias que apareceram como destaque na categoria de Linguagens e Frameworks são tecnologias JavaScript, como Ember.js, React.js, Redux e React Native (veja imagem na página ao lado).
está sendo elaborada e promete trazer ainda mais melhorias, tais como:
iMasters #21 Fevereiro 2017
Novas operações em Array; Operador de exponenciação (**); Decoradores; Propriedades estáticas de classe; Async-await. Nunca houve melhor momento para aprender e trabalhar com a linguagem JavaScript. Para entender todas as melhorias da especificação e aprender como utilizá-las, não deixe de conferir o livro “Entendendo o ECMAScript 6 - Entre de
// 57
∂ Radar tecnológico da ThoughtWorks, onde o JavaScript tem destaque como base das tecnologias
Imagens: Fornecidas pelo autor.
cabeça no futuro do JavaScript”. Nele, você encontrará não somente quais são as modificações, mas o porquê de elas terem sido desenvolvidas, quais problemas foram resolvidos e como utilizá-las em situações reais. O livro acompanha uma série de exercícios e está sempre atualizado com as novidades da ECMAScript.
http://entendendoes6.com.br/ E você, por que ainda não está escrevendo JavaScript? Referências: [1] https://github.com/blog/2047-language-trends -on-github [2] http://kangax.github.io/compat-table/es6/ [3] https://www.thoughtworks.com/pt/radar/ languages-and-frameworks
Diego Martins de Pinho é bacharel em Ciência da Computação pela PUC-SP e MBA em Gestão da Tecnologia da Informação na FIAP. Se interessa muito não somente por tecnologia, mas também por empreendedorismo, processos e gestão. Trabalha com tecnologias web desde 2013 e sempre busca tempo para continuar aprendendo e compartilhar o que sabe.
diegomartinsdepinho@msn.com
iMasters #21 Fevereiro 2017
58 //
DROPS DO MERCADO
MBLER ATINGE MARCA DE U 50 MIL USUÁRIOS E PROJETA NOVIDADES PARA 2017 A Umbler, startup de cloud hosting por demanda focada em agências e desenvolvedores, começou o ano de 2017 comemorando um marco importante: 50 mil usuários. No ar desde abril de 2015, a empresa pretende continuar o crescimento investindo em recursos escolhidos pelos próprios usuários: “Temos um sistema de votação de novas features no qual os próprios clientes podem sugerir e votar no que querem ver na Umbler”, explica Fábio Borges, CTO. Entre os recursos que foram ao ar no último ano estão SSL gratuito via Let’s Encrypt e suporte a ASP.NET Core. No primeiro trimestre de 2017, a previsão é lançar duas features campeãs de votos dos usuários: suporte a Node.JS e uma nova opção de contas de e-mail.
MERCADO LIVRE REÚNE INFORMAÇÕES DE SUAS UNIDADES OPEN PLATFORM EM UM ÚNICO SITE O Mercado Livre, empresa de tecnologia para o e-commerce, criou o site http://openplatform. mercadolivre.com/pt. O objeto é facilitar o acesso as suas plataformas abertas e criar oportunidades de negócio para desenvolvedores e empresas de tecnologia que desejem utilizar suas APIs. A empresa tem sete unidades de negócios, seis delas com APIs abertas. No site é possível acessar a documentação de cada uma dessas plataformas e saber em quais países seus serviços estão disponíveis. O Marketplace mercadolivre.com foi o primeiro a abrir sua plataforma, em 2012. De lá para cá, Mercado Pago, Mercado Livre Classificados, Mercado Envios, Mercado Shops e, mais recentemente, Mercado Backoffice, também tornaram públicas as suas APIs. “Esse processo permite a melhoria contínua das plataformas e incentiva o empreendedorismo de desenvolvedores”, destaca Nicolás Coniglio, gerente de Desenvolvimento do Mercado Livre no Brasil.
iMasters #21 Fevereiro 2017
FACILIDADES DE INTEGRAÇÃO PARA COBRANÇAS REGISTRADAS Com o objetivo de facilitar a integração para geração de boleto e carnê registrado, a Gerencianet lançou novas atualizações. Agora, além de PHP, .NET, Node JS, Ruby e Phyton, a SDK está disponível em Java. Outras novidades são as integrações nativas com os sistemas de gestão TagPlus e Lojista Virtual, além dos módulos oficiais para as plataformas BoxBilling e OpenCart, compatíveis com as versões a partir da 4.19 e 2.3.x, respectivamente. Já o Link de Pagamento, outro novo recurso, permite ao usuário gerar um link para a tela de pagamento da Gerencianet, eliminando a necessidade de implementar uma tela própria. A tela Gerencianet permite personalizações para que o cliente final sinta segurança em realizar o pagamento em um domínio diferente. Além disso, o integrador pode escolher a forma de pagamento permitida: boleto, cartão ou ambos. A documentação completa está disponível em dev.gerencianet.com.br.
IBM 5 IN 5: 5 INOVAÇÕES QUE VÃO MUDAR SUA VIDA EM BREVE A área de pesquisa da IBM divulgou uma lista de inovações científicas com potencial de mudar a forma que as pessoas trabalham, vivem e interagem nos próximos 5 anos. O relatório fala sobre tornar o mundo invisível, visível. Sobre diagnosticar doenças psíquicas por meio da fala e escrita. Sobre termos laboratórios médicos do tamanho de um chip. A história começa em 1608, quando Galileu olhou através de seu telescópio e viu nosso cosmos de uma maneira inteiramente nova. Ele provou a teoria invisível de que a Terra e outros planetas em nosso sistema solar giram em torno do Sol. Baseado neste princípio, o setor de pesquisa da IBM está trabalhando para criar uma nova geração de instrumentos científicos – que vão desde o nível macroscópico até a nanoescala – projetados para enxergar melhor o nosso mundo. A inovação nesta área permitirá melhorar drasticamente a agricultura, aumentar a eficiência energética, detectar a poluição prejudicial antes que seja tarde demais. Quer saber mais? Consulte o relatório completo (em inglês): http://www.research.ibm.com/5-in-5
// 59
Estamos de volta! Depois de muitas variáveis, rotinas, compilações, deploys e xícaras de café, temos a satisfação de retornar ao projeto iMasters. Queremos ajudá-lo a executar suas ideias! Para isso, estaremos presente no portal, eventos e outros canais. Conte com a gente!
www.hostmidia.com.br iMasters #21 Fevereiro 2017
60 // MOBILIDADE É TUDO
Cultura HackerA chave do sucesso Por Ricardo Ogliari, Engenheiro Android no BTCjam
A
A CIÊNCIA DA COMPUTAÇÃO é uma das áreas de conhecimento mais populares e valorizadas no mundo contemporâneo. Para os apaixonados por hardware, software e afins, existem diversas razões para explicar esse magnetismo. Podemos listar algumas delas:
Porém, a computação não é um mar de alegrias. Conversando com diversos profissionais da área, às vezes nos deparamos com algumas reclamações. Em alguns casos, temos contrapontos em relação aos próprios benefícios listados acima. O primeiro é: realmente temos iMasters #21 Fevereiro 2017
Foto: Shutterstock | Macrovector.
Diversas vagas de emprego abertas e não preenchidas; Não existe rotina para os profissionais da computação; Comparando com a maioria das outras áreas do conhecimento, podemos dizer que profissionais da computação ganham relativamente bem; As possibilidades são infinitas, com a massificação da tecnologia, com o barateamento e a miniaturização da tecnologia, com o advento de bibliotecas e frameworks fantásticos, podemos simplesmente hackear o mundo à nossa volta.
Imagem: Fornecida pelo autor.
// 61 uma grande quantidade de empregos? Quantas vezes nos deparamos com vagas de empregos que exigem conhecimento em uma grande quantidade de linguagens, exigindo um conhecimento sênior, mas pagando um valor até mesmo baixo para um júnior? E a falta de rotina, é uma dádiva ou uma prisão que nos obriga a estudar pela vida toda? Claro que essa discussão pode ser muito longa e poderia muito bem se tornar tese de mestrado ou doutorado. Mas vamos adiante... Olhando para a figura ao lado, temos uma grande quantidade de linguagens de programação. Para se tornar um profissional respeitado e atingir o tão almejado sucesso na área, precisamos conhecer algumas delas. A notícia boa é que depois que aprendemos uma linguagem de programação, os principais
conceitos serão replicados e o tempo para aprender uma nova linguagem será menor. Mas, mesmo assim, é possível perceber que vamos estudar bastante. Mas realmente é preciso conhecer todas essas linguagens e estudar tanto assim? A resposta é: depende do que você quer para sua vida. Se quer se manter na média geral, vai conseguir ter uma vida digna, vai precisar se privar de vários bens que desejar ao longo da vida. No entanto, acredito que não passará
iMasters #21 Fevereiro 2017
62 // MOBILIDADE É TUDO
iMasters #21 Fevereiro 2017
cessantemente. E é aí que o ciclo se fecha. Isso porque a tecnologia da informação evoluiu a um ponto em que atinge todas as esferas do mundo contemporâneo. Podemos fazer praticamente tudo através da codificação. Imaginem um profissional da computação com a cultura hacker enraizada em sua mente e um mundo de tecnologias espetaculares disponíveis. Gostaria de chamar a atenção para algumas delas: Internet of Things: esse conceito sintetiza a ideia de que todas as coisas estarão conectadas em rede no futuro. O número de dispositivos conectados ultrapassou o número de habitantes no planeta Terra há muito tempo. Uma solução computacional pode conectar a chave da sua casa ao seu carro, ao seu relógio de pulso, ao seu par de meias e, até mesmo, a dispositivos implantados em seu corpo. Biohacking: somente a suposição de que podemos hackear organismos vivos já causa bastante impacto. E se eu lhe disser que isso já é real há algum tempo? Claro, não com uma penetração de mercado massiva e com uma facilidade para adquirir, mas estamos vivenciando o nascimento do biohacking. Podemos imaginar claramente um organismo vivo hackeado e implantável no corpo humano que, por sua vez, esteja ligado à Internet das Coisas. O leque de soluções possíveis é inimaginável. E a nanotecnologia? Tudo o que foi falado até aqui tem uma escala de 1 a 100 nanômetros. Veja este trecho da sinopse do vídeo “Pesquisa da Nasa revolucionará a medicina no mundo, nanotecnologia”, disponível no YouTube (goo.gl/DmE1SP): “Imagine trilhões de robôs-miniatura
Foto: Shutterstock | Macrovector.
fome nem sede. Contudo, se quiser ser um profissional de sucesso na área da computação, a resposta é sim. Mas essa tarefa pode soar dantesca se faltar uma coisa na sua vida: cultura hacker! E aqui não me refiro à parte técnica; não estou falando que para ter sucesso na carreira precisará saber invadir a agência de segurança dos Estados Unidos. Falo da cultura e do modo de pensar e agir dos hackers. Resumindo: ser apaixonado de verdade pela profissão, por código, desenvolvimento, inovação, tecnologias e compartilhamento de conhecimento e afins. Ter a cultura hacker na mente lhe fará buscar alvos. Claro que quando utilizamos esta expressão, não estamos querendo dizer fazer mal a alguém, causar danos físicos ou danos morais irreversíveis. Falo em alvo para lhe dar um ânimo maior e permitir que estudar na sexta-feira à noite se torne algo agradável, por exemplo. Justamente porque está atrás de uma recompensa. Hackers fazem isso quando enxergam um alvo e tentam driblar as brechas de segurança. Não será fácil, e isso lhe exigirá uma quantidade grande de horas de estudo. O pensamento hacker também lhe despertará a curiosidade. Por exemplo, ao ler sobre determinado assunto em uma fonte bibliográfica, não se limitará ao que está ali exposto. Seu cérebro irá lhe fazer indagações parecidas com: e se eu usar esse conhecimento juntamente com a API xyz que estudei na semana passada? E se o construtor dessa plataforma não pensou na abordagem xyz e eu puder construir algo fantástico? E se a biblioteca permitir configurar um path de mídia inexistente para um contato do smartphone? Percebam o uso do “e se” em quase todos os exemplos fictícios. Essas indagações e a sede por codificar soluções inovadoras farão com que você busque o conhecimento in-
// 63
dentro de um corpo humano destruindo células cancerígenas antes mesmo de saber que você as tem. Imagine passar por uma cirurgia enquanto assiste à televisão em casa. Conhecida como nanomedicina, essa nova tecnologia está transformando a ciência médica”. Aliado a tecnologias inovadoras, temos frameworks, bibliotecas e ferramentas que facilitam e agilizam o processo de desenvolvimento para IoT, biohacking, nanotecnologia e afins. A linguagem de programação JavaScript, por exemplo, fornece APIs que permitem seu uso para uma solução IoT de ponta a ponta. Node.js, Node Red, Johnny Five, Express e Cylon são só alguns exemplos. E o que falar do Firebase, um conjunto de serviços oferecidos pelo Google? Entre eles destaco o Realtime Database e o Firebse Push Notification. Ambos possuem biblioteca também para JavaScript. Para fechar este parágrafo, basta informar que o MIT criou uma linguagem de programação que permite a criação de circuitos de DNA complexos, para editar funções de células vivas – veja mais aqui: goo.gl/53IzeM.
Depois que essa cortina de possibilidades for apresentada para um profissional de TI com uma cultura hacker, o estudo e o desenvolvimento deixam de ser trabalho e se tornarão uma diversão sem fim. E para finalizar este pequeno artigo: você acredita que a cultura hacker é a chave do sucesso somente para a computação? No meu entendimento, não. Em qualquer área do conhecimento, quando o profissional é apaixonado pelo trabalho que desempenha, terá força e gás para estudar um pouco a mais que a maioria, para se empenhar além do normal e, consequentemente, estará mais apto que a grande maioria dos profissionais da sua área.
Ricardo Ogliari é co-autor do livro “Android: do básico ao avançado”. Autor de mais de 300 publicações. Especialista em Web: estratégia de inovação e tecnologia; MBA em Desenvolvimento de Aplicações e Jogos Móveis. Fundador do Things Hacker Team e eleito um dos 10 nomes de open-hardware em 2013. rogliariping@gmail.com iMasters #21 Fevereiro 2017
64 // LINUX
ARCH LINUX
A MELHOR DISTRO DE TODOS OS TEMPOS? Por Fabio Akita, Co-fundador da Codeminer 42
DESDE QUE DECIDI voltar do macOS para o Linux, eu não queria apenas voltar ao antigo Ubuntu (sim, eu fico entediado de fazer as mesmas coisas por muito tempo). Então, tentei o Fedora 25 e fiquei surpreso com a forma como o Gnome 3.22 evoluiu muito bem. Em comparação com o Ubuntu, os padrões do Fedora ficaram mais agradáveis. Na prática, você pode forçar qualquer distro para se tornar o que quiser, mas eu prefiro não ficar brigando com o que já vem por padrão. O Ubuntu é muito focado para Unity e eu realmentenão gosto disso. Parece mais um brinquedo do que um ambiente sério para trabalhar. O Fedora 25 parece bom com o Gnome 3, mas ainda me deu aliMasters #21 Fevereiro 2017
gumas dores de cabeça. Uma coisa que não funcionou de jeito nenhum foi o “Online Accounts” do Gnome. Também chamado de “GOA”, ele coleta tokens de autenticação depois que faz login em seus serviços como o Google. Em seguida, aplicativos compatíveis com ele, como o Evolution e o calendário interno, podem usar o mesmo login. Mas os tokens estavam expirando o tempo todo, então a integração era inútil. E a configuração manual do Evolution para o Google não é exatamente agradável. Agora a surpresa: no Arch Linux, eu também escolhi o Gnome 3.22 como o meu desktop. Eu loguei nas minhas contas do Google com o GOA e estou muito feliz em relatar que ele não está expirando
e “Simplesmente Funciona”! Este é o tipo de polimento que eu espero de uma grande distro, não o fiasco que é rotulado como “estável” no Fedora. Por que Arch Linux? A maioria das grandes distros é dividida entre “estável” (mas com pacotes muito antigos) e “instável” (mas com a as coisas mais legais e mais recentes). Se instalar as versões de suporte a longo prazo / Long-Term Support (LTS), você está condenado a ter apenas pacotes antigos de alguns anos atrás. Se instalar os repositórios instáveis, você está condenado a ter coisas explodindo em sua cara sem nenhuma explicação e perder horas navegando no Stackoverflow.
// 65
Agora, parece que Arch descobriu o nível exatamente “certo” de confiança entre estável e de ponta. Ele continua empurrando a versão mais recente do software sem quebrar todo o resto o tempo todo. Então, no Ubuntu 16.04 e no Fedora 25, se eu quiser instalar o Postgresql, estou limitado ao 9.4 ou 9.5, mas no Arch posso acessar o 9.6 dos repositórios oficiais do Pacman. (A propósito, “Pac” kage “Man” ager é o nome óbvio mais legal de todos os tempos). Você pode facilmente fazer pacman -Sy postgresql e está tudo certo! E se você está no Ubuntu 14.04 e agora você quer 16.04, boa sorte em dist-upgrade o seu caminho. É mais fácil começar do zero. Então, parece que a filosofia do Arch é ter a versão estável mais recente de todos os softwares que não irão quebrar seu sistema. Não existe tal coisa como uma atualização “big bang” a cada 6 meses, que quebra tudo. Em vez disso, você tem um sistema constantemente atualizado, onde estará sempre na versão mais recente, sem ter que esperar mais um ano para o próximo grande LTS ou se arriscar sozinho com repositórios instáveis de terceiros. Todas as distro principais têm repositórios “não suportados” para binários proprietários (codecs de multimídia, por exemplo) ou software diversos de terceiros. Para isso, existe o Arch User Repository / Repositório de Usuá-
rios do Arch (AUR): uma coleção de pequenos repositórios Git de usuários que mantém arquivos de texto PKGBUILD simples. O AUR é uma coisa muito esperta. Se você vem de macOS e está familiarizado com Homebrew, vai entender: ele se parece com Casks e Formulas. Um arquivo PKGBUILD descreve uma receita para baixar um pacote disponível DEB ou tarball, desmontá-lo e reconstruí-lo como um pacote compatível com Pacman. Ele descreve as dependências necessárias e torna o processo de instalação super suave. Por exemplo, Sublime Text apenas tem uma opção para baixar um pacote DEB ou um tarball com os binários. O mesmo acontece com Spotify, Franz, etc. Às vezes, você pode registrar Pacotes de Arquivos Pessoais / Personal Package Archives (PPAs) e depois fazer apt-get para instalá-los. Mas ainda vai precisar de alguém para construir, manter e distribuir esses pacotes corretamente. É muito trabalho, por isso poucos fazem. Agora, manter um repositório Git com um simples arquivo de texto PKGBUILD é bem mais fácil. O makepkg faz o trabalho pesado de construir o pacote que você precisa, em sua máquina e então o pacman pode instalar como qualquer outro pacote. Não mais fazendo wget de tarballs e configurando tudo manualmente! Finalmente, eu posso só fazer pacman -Syu e ter tudo “real-
mente” atualizado sem ter que me preocupar com o próximo grande LTS, que acabará me forçando a reinstalar tudo a partir do zero. Arch Linux é perfeito para “Iniciantes” Eu tenho ouvido sobre Arch faz tempo e seus usuários são muito entusiasmados em tentar convencer outros a participar. Sempre que você vê um grupo de fãs tão leal, deve haver algo interessante escondido por baixo. Atualizações em andamento / Rolling upgrades, Pacman, AUR são realmente razões muito importantes. Depois de usr por apenas um dia, eu percebi que Arch é bom para usuários avançados, mas também para iniciantes. Não porque é fácil. Pelo contrário: é porque é difícil na medida certa. A maioria dos “usuários de Linux” de hoje em dia só tem distros de instalação trivial, como o Ubuntu ou Elementary, e eles não têm ideia do que se passa por baixo. Cegamente clicando em “próximo” nos instaladores gráficos. A maioria não tem ideia do que são TTYs. Que você pode sondar dispositivos USB com ferramentas de linha de comando, como lsusb ou que você deve usar ferramentas como fdisk para partição e, em seguida, mkfs.ext4 para formatá-los. Que os arquivos de swap são partições com um formato especial. Eles não estão cientes de opções LVM para particionamento flexível ou mesmo que LVM sequer iMasters #21 Fevereiro 2017
66 // LINUX
existe. Que a “coisa” que você escolhe o seu kernel no menu de inicialização é chamado Grub e que você pode configurá-lo. Há muita coisa acontecendo na montagem de uma distribuição baseada em Linux. Mas os instaladores gráficos escondem a maior parte da diversão. O Arch Linux obriga você a ir passo a passo e realmente sentir que você “é o dono” da sua máquina e não o contrário. Se você é um “iniciante”, eu realmente recomendo a instalar rapidamente uma distro como Arch algumas vezes, em diferentes configurações de máquinas, para realmente entender como um sistema operacional funciona. O Arch Wiki é um repositório de informações muito abrangente e detalhado com tudo que você precisa saber sobre a instalação e manutenção de cada componente de um sistema Linux apropriado. Você vai aprender muito no processo. Mas se você é como eu e tem feito isso desde os meados de 1990 e início de 2000 (diabos, eu tive que abrir meu caminho através do Slackware 1.0. Ainda me lembro de ter que usar disquetes de boot e roote destruir meus discos rígidos não entendendo como configurar cilindros e setores através do fdisk), você pode pular tudo isto. Para você, usuários avançados / experientes, recomendo que use o Arch Linux Anywhere, que vai apresentar um instalador mais automatizado, similar ao das grandes distros mais famosas. Ele vai instalar o Arch por você, vai lhe dar a medida certa de automação para não desperdiçar muito tempo instalando uma configuração leve de Arch, sem bloatware. iMasters #21 Fevereiro 2017
Pacaur – a melhor maneira de lidar com AUR Os usuários do Arch adoram elogiar o Pacman. No geral, você pode basicamente fazer:
“Executar comando como shell de login / Run command as login shell”, caso contrário, haverá um problema PATH e o Cower falhará na instalação.
sudo pacman -S chromium
sudo pacman -S expac yajl --noconfirm gpg --recv-keys --keyserver hkp://pgp.mit. edu 1EB2638FF56C0C53 git clone https://aur. archlinux.org/cower.git cd cower makepkg -si cd .. git clone https://aur. archlinux.org/pacaur.git cd pacaur makepkg -si cd ..
E é só isso. E então você pode fazer sudo pacman -Syu para atualizar todos os pacotes instalados. Este é o básico. Se você é um desenvolvedor, também recomendo que instale os pacotes básicos de desenvolvimento:
sudo pacman -Sy --needed base-devel
Agora, você pode instalar manualmente os pacotes AUR. Você pode ir ao website deles e procurar por “terminix” (uma alternativa muito melhor ao Terminal, similar ao iTerm2 do Mac) por exemplo. Você vai acabar nesta página e terá que fazer, manualmente, o seguinte:
git clone https://github. com/gnunn1/terminix.git cd terminix makepkg -si
Parece simples, mas você pode fazer melhor que isso instalando o Pacaur, uma “carapaça” sobre o Pacman. Se você estiver usando um terminal gráfico como Terminal ou Terminix NÃO SE ESQUEÇA de editar o perfil para
Em resumo, o Pacaur pode ser usado não apenas como complemento para instalar pacotes AUR, mas também se quiser usar uma única ferramenta para gerenciar ambos - pacotes AUR e pacotes Pacman oficiais. Todos os comandos -S serão de Pacman. Então, em vez de fazer sudo pacman -Syu para atualizar todos os pacotes, você pode substituí-lo por pacaur -Syu. Todo o resto, em geral, “simplesmente funciona”. Quando tentar instalar um pacote com -S ele vai olhar para os repositórios oficiais primeiro. Se não encontrar, então vai tentar pelo AUR. Existe até mesmo um GUI se quiser:
pacaur -S pamac-pacaur
// 67
Agora, para instalar o mesmo Terminix, você pode fazer apenas isso:
pacaur -Sy terminix
Ele fará perguntas de sim / não simples, como “Você deseja editar o arquivo de compilação?” Você pode responder “n” a esses e confirmar “y” se ele perguntar se você quer instalar dependências. E é isso! Você pode pesquisar os repositórios AUR com:
pacaur -s spotify
Ele vai lhe dar um monte de opções, por exemplo:
$ pacaur -s spotify aur/spotify 1.0.47.13-1 (1037, 36.09) [installed] A proprietary music streaming service aur/playerctl 0.5.0-1 (127, 11.33) mpris media player controller and lib for spotify, vlc, audacious, bmp, xmms2, and others. aur/blockify 3.6.3-3 (106, 5.61) Mutes Spotify advertisements. ...
Bom senso, meus amigos. Leia, interprete, escolha. Arch exige que você seja uma pessoa inteligente e
por “inteligente” quero dizer: que saiba ler! A maioria das pessoas simplesmente não lêem e apenas clicam nas coisas como idiotas. Agora se você sabe o nome exato do pacote, basta instalá-lo normalmente assim:
pacaur -S spotify
Pacaur é um dos muitos assistentes de AUR. Eu comecei pelo Yaourt, mas após alguma pesquisa você descobre que só deve tentar aurutils, bauerbill ou pacaur. Eu prefiro o último porque é mais fácil soletrar.
pacaur -Syua
-S ruby ou pacaur -S ruby você eventualmente precisará voltar para o Ruby 2.1 ou mais antigo para um projeto de cliente, por exemplo. Você deve instalar RVM? Ou rbenv? E como você lida com diferentes versões de Clojure, Go, Rust, Elixir? Isso soa como mais um pesadelo de manutenção para lidar. Mas alguém decidiu resolver este problema de uma vez e de uma forma elegante. Conheça o asdf – e dê um abraço em Akash Manohar se um dia cruzar com ele. Vamos instalá-lo (a partir do README do projeto):
git clone https://github. com/asdf-vm/asdf.git ~/.asdf --branch v0.2.1
Isso deve manter seu sistema atualizado, tanto os pacotes oficiais quanto os pacotes AUR.
Em seguida, edite os arquivos de configuração do shell:
Asdf – o último gerenciador de versão de linguagens que você vai precisar Se você é um Rubista, está familiarizado com RVM, rbenv, chruby. Se você vem do Node.js, conhece o NVM para gerenciar suas diferentes versões do Node. Cada nova linguagem hoje em dia precisa de um gerenciador de versão, já que estão evoluindo rapidamente e porque, se você trabalha com projetos de clientes, acabará precisando usar uma versão antiga para lidar com software legado. Portanto, mesmo que você possa instalar o atual Ruby 2.3.3 estável apenas fazendo pacman
# For Ubuntu or other linux distros echo -e ‘\n. $HOME/.asdf/ asdf.sh’ >> ~/.bashrc echo -e ‘\n. $HOME/.asdf/ completions/asdf.bash’ >> ~/.bashrc # OR for Mac OSX echo -e ‘\n. $HOME/.asdf/ asdf.sh’ >> ~/.bash_profile echo -e ‘\n. $HOME/.asdf/ completions/asdf.bash’ >> ~/.bash_profile # For the Fish shell echo ‘source ~/.asdf/asdf.
iMasters #21 Fevereiro 2017
68 // LINUX
fish’ >> ~/.config/fish/ config.fish mkdir -p ~/.config/fish/ completions; and cp ~/.asdf/completions/ asdf.fish ~/.config/fish/ completions # If, like me, you like ZSH with YADR (you have to install YADR before this) touch ~/.zsh.after/asdf. zsh echo -e ‘\n. $HOME/.asdf/ asdf.sh’ >> ~/.zsh.after/ asdf.zsh echo -e ‘\n. $HOME/.asdf/ completions/asdf.bash’ >> ~/.zsh.after/asdf.zsh
Esta ferramenta é autoexplicativa. Vamos começar instalando um monte de plugins (tabela completa de links no arquivo README):
asdf plugin-add clojure https://github.com/vic/ asdf-clojure.git asdf plugin-add elixir https://github.com/asdfvm/asdf-elixir.git asdf plugin-add erlang https://github.com/asdfvm/asdf-erlang.git asdf plugin-add golang https://github.com/ kennyp/asdf-golang.git asdf plugin-add ruby https://github.com/asdfvm/asdf-ruby.git asdf plugin-add rust https://github.com/codelever/asdf-rust.git
iMasters #21 Fevereiro 2017
asdf plugin-add nodejs https://github.com/asdfvm/asdf-nodejs.git
Se você é como eu, deve estar super animado porque já sabe o que vamos fazer a seguir:
sudo pacman -Sy jdk8openjdk # you need Java for Clojure asdf install clojure 1.8.0 asdf global clojure 1.8.0 mkdir ~/bin wget https://raw. githubusercontent.com/ technomancy/leiningen/ stable/bin/lein -O ~/bin/ lein chmod +x ~/bin/lein export PATH=$PATH:~/bin # echo “PATH=$PATH” > ~/.zsh.after/binpath.zsh # if you use YADR+ZSH lein asdf install erlang 19.0 asdf global erlang 19.0 asdf install elixir 1.4.0 asdf global elixir 1.4.0 mix local.hex mix local.rebar asdf install golang 1.7.4 asdf global golang 1.7.4 asdf install ruby 2.4.0 asdf global ruby 2.4.0 gem install bundler asdf install rust 1.14.0
asdf global rust 1.14.0 asdf install nodejs 7.4.0 asdf global nodejs 7.4.0 npm -g install brunch phantomjs
É isso aí! Agora temos todas as linguagens que precisamos instaladas e prontas para usar! E se eu precisar do Ruby 2.3.1 para um projeto de cliente?
asdf install ruby 2.3.1 asdf local ruby 2.3.1
E agora eu tenho 2.3.1 localmente (eu posso mudá-lo para ser o padrão do sistema usando global). A maioria do esforço de manutenção se resume a isto:
asdf plugin-update --all # update the individual plugins asdf list-all [language] # to list all available versionf
E é só! Você tem quase tudo que precisa para desenvolver software. Softwares Úteis para Instalar Agora deixe-me recomendar alguns softwares:
# make sure you’re up to date
// 69
sudo pacman -Syu # install multimedia codecs sudo pacman -Sy gstreamer0.10-plugins sudo pacman -Sy exfatutils fuse-exfat a52dec faac faad2 flac jasper lame libdca libdv gstlibav libmad libmpeg2 libtheora libvorbis libxv wavpack x264 xvidcore gstreamer0.10-plugins flashplugin libdvdcss libdvdread libdvdnav gecko-mediaplayer dvd+rw-tools dvdauthor dvgrab pulseaudioequalizer# if you need japanese fonts like me sudo pacman -Sy adobesource-han-sans-otc-fonts otf-ipafont # some components that you will need sudo pacman -Sy fuseexfat # I personally like the Numix theme and Breeze Icons, change them with the Tweak Tool sudo pacman -Sy numixthemes breeze-icons # Ifnstall more good looking fonts sudo pacman -Sy ttfdejavu pacaur -S ttf-ms-fonts ttfvista-fonts ttf-liberation
adobe-source-sans-profonts ttf-ubuntu-fontfamily # Firefox and Java plugin sudo pacman -Sy icedteaweb firefox # for devs sudo pacman -Sy zsh the_silver_searcher gvim imagemagick htop pacaur -Sy ttf-hack # Native wrapper for Web apps such as Slack, Hangout, etc pacaur -Sy franz-bin # Best native Twitter client for Linux pacaur -Sy corebird # No need to explain pacaur -Sy spotify pacaur -Sy sublime-textdev # install these plugins http://www.hongkiat.com/ blog/sublime-text-plugins/ # If you like to read RSS pacaur -Sy feedreaderbeta # if you need Office-like support sudo pacman -Sy libreoffice-fresh # if you need Photoshoplike support sudo pacman -Sy gimp sh -c “$(curl -fsSL https://raw. githubusercontent.com/
doctormo/GimpPs/master/ tools/install.sh)” # if you want a really good video editor sudo pacman -Sy frei0rplugins dvdauthor vlc pacaur -Sy kdenlive # this can make CPUintensive software to behave better and guarantee better user experience pacaur -Sy ananicy-git # dropbox is the most horrible piece of software, but you may need it: pacaur -Sy dropbox dropbox-cli nautilusdropbox
Como de costume, eu gosto de substituir Bash por Zsh e configurar Vim com YADR:
sh -c “`curl -fsSL https:// raw.githubusercontent. com/skwp/dotfiles/ master/install.sh`” touch ~/.vimrc.before touch ~/.vimrc.after echo “let g:yadr_using_ unsolarized_terminal = 1” >> ~/.vimrc.before echo “let g:yadr_disable_ solarized_enhancements = 1” >> ~/.vimrc.after echo “colorscheme gruvbox” >> ~/.vimrc.after
iMasters #21 Fevereiro 2017
70 // LINUX Para instalar e configurar o Postgresql 9.6:
sudo pacman -Sy postgresql sudo -u postgres -i initdb --locale $LANG -E UTF8 -D ‘/var/lib/ postgres/data’ exit # do not do this in Production machines sudo sed -i.bak ‘s/ident/ trust/’ /var/lib/postgres/ data/pg_hba.conf sudo systemctl start postgresql sudo systemctl enable postgresql sudo -u postgres -i createuser --interactive # create with your username and superuser role createdb youruser exit sudo systemctl restart postgresql
Se você deseja instalar o Docker:
sudo pacman -Sy docker sudo usermod -aG docker $USER sudo systemctl start docker sudo systemctl enable docker logout
Nós sempre precisamos de Redis, Memcached. Então, vamos instalá-los:
sudo pacman -Sy redis
iMasters #21 Fevereiro 2017
memcached sudo systemctl sudo systemctl redis sudo systemctl memcached sudo systemctl memcached
start redis enable start enable
Depois de instalar e remover um monte de software, você pode acabar ficando com pacotes desnecessários comendo espaço em disco. Você pode limpar assim:
sudo pacman -Rns $(pacman -Qtdq)
E como eu disse antes, o Arch Wiki é super útil para continuar a ajustar o seu sistema. Por isso, certifique-se de ler artigos como esta página “Improving Performance” / “Melhorando o Desempenho”. Kernels para Desktop Uma coisa para se ter em mente sobre a maioria das distros do Linux é que o kernel é normalmente compilado para ser melhor otimizado para Servidores. Hardware moderno, especialmente com muita RAM e equipado com um SSD “deve” funcionar bem o suficiente. Mas nem sempre, você pode experimentar alguns “engasgos” ou mesmo total falta de responsividade. Há muitas razões do porquê disto, mas os 2 principais culpados são a memória de aplicativos sendo paginada para a troca de disco e o planejador de I/O do kernel do linux. Em um cenário de servidor, você quer que os processos tenham uma parcela justa de recursos, razão pela qual um planejador de
processos, como CFS – Planejador Completamente Justo / Completely Fair Scheduler – e CFQ – Queuing Completamente Justo / Complete Fairness Queueing – para I / O, são fantásticos. Mas no Desktop a história é totalmente diferente. Você está disposto a negociar alta taxa de transferência por menor latência, a fim de ter respostas mais rápidas, ou responsividade. Ninguém quer ter a sua interface do usuário e seta do mouse congelados ao copiar arquivos grandes para drives USB ou enquanto espera por aquele desagradável make -j9 para terminar de compilar seu também desagradável gcc-gcj. Você pode acabar ficando com sua interface gráfica congelada por horas! Isto é inaceitável! O que você quer para o uso do Desktop, com dezenas de processos aleatórios fazendo operações aleatórias, é configuração “de tempo real suave”. Uma preempção mais agressiva onde o Kernel dá algum controle de volta para a interface do usuário para que você possa fazer outras coisas – embora mais lentamente – e gerencie melhor a concorrência no acesso a disco. Baixa latência é a chave para ter uma experiência de usuário suave. Para aumentar a capacidade de resposta, a primeira coisa mais importante que você deve fazer configurar é isso:
sudo tee -a /etc/ sysctl.d/99-sysctl.conf <<-EOF vm.swappiness=1 vm.vfs_cache_pressure=50 vm.dirty_background_ bytes=16777216 vm.dirty_bytes=50331648 EOF
// 71
Reinicialize a máquina. Se quiser saber mais sobre essas configurações, leia isto. E você pode querer instalar um Kernel personalizado com um Planejador diferente. Existem 3 opções hoje em dia: Zen, Liquorix e CK. O Liquorix usa o planejador de processos e I/O do CK e o Zen é uma versão do Liquorix. Portanto você quer ficar com o Zen porque é mantido nos repositórios oficiais em formato binário (acredite em mim, você não quer esperar pela compilação de um kernel personalizado. Leva uma eternidade).
sudo pacman -Sy linux-zen sudo grub-mkconfig -o / boot/grub/grub.cfg
Reinicialize sua máquina e pronto. A principal alteração é provavelmente o Planejador de I/O, atualizando do CFQ padrão para BFQ. Se você estiver usando um disco rígido mecânico, vai querer usar o BFQ (que Zen habilita por padrão). Se estiver usando um SSD, vai querer o ‘deadline’ em vez disso (porque SSDs não tem problema de concorrência). NÃO INSTALE ESSES KERNELS EM SERVIDORES DE PRODUÇÃO! Eles são destinados apenas para usos em desktop! No geral, Zen tem o melhor equilíbrio entre estabilidade e conjunto
de ajustes. Você deve usá-lo especialmente em hardware mais antigo. Hardware moderno, como eu disse, talvez não faça tanta diferença. Conclusão Não tenho certeza se são os mantenedores do Arch que estão fazendo um super trabalho ou se é a RedHat a Canonical que estão vascilando com suas distros, em comparação. Quero dizer, Ubuntu, Fedora, OpenSuse, Elementary, são todas distribuições boas e agradáveis que, na maioria das vezes, “simplesmente funciona”, particularmente se você tiver hardware moderno. Mas para uma distro que muitos consideram somente para “usuários avançados”, Arch é muito é bem amigável. No mesmo hardware, a experiência do Gnome 3 sob Arch é melhor do que o mesmo Gnome 3 sobre o Fedora. Comparado ao Unity no Ubuntu, está milhas a frente. É rápido, fluido, bonito, todos os padrões funcionam bem. Eu estou testando com um velho Lenovo Thinkcentre Edge 71 com um disco rígido mecânico de 5400rpm e meros 8GB de RAM. No Fedora, a inicialização é super lenta. A configuração do Arch Linux faz com que esta velha máquina parece bem mais rápida! Eu realmente quero saber qual é o secredo. Talvez seja apenas que eles não bagunçam demais as configurações e oferecem pacotes sólidos sem muita “mexeção”. E, de repente, eu percebo que
não tenho que me preocupar com grandes atualizações. Rolling upgrades / atualizações em andamento, continuamente me traz outra camada de confiança. Arch me faz sentir como se eu estivesse realmente no controle novamente, sem exigir que eu desperdice horas ajustando coisas até chegar a meu gosto. Os padrões são sólidos e eu posso fazer pequenas melhorias sobre eles sempre que eu precisar. Meu cumprimentos aos mantenedores do Arch, esta é a melhor distro Linux com que já tive o prazer de usar. Espero que isso continue enquanto eu continuar usando isso como meus sistema principal. Mas, até agora, estou convencido de que esta é a escolha certa. Link original do artigo: http://www.akitaonrails. com/2017/01/10/arch-linux-best-distro-ever
Fabio Akita é co-fundador da boutique de software Codeminer 42. Desde 2008 também foi coorganizador da Rubyconf Brasil junto com a Locaweb. Ativista de Ruby on Rails desde 2006, publicou o primeiro livro do assunto. Já realizou quase 200 palestras pelo Brasil e pelo mundo. Trabalha como programador desde o começo dos anos 90 e passou por todas as principais tecnologias do mercado nesse período. Publica artigos no blog akitaonrails.com desde 2006.
fabio.akita@codeminer42.com iMasters #21 Fevereiro 2017
72 //
DROPS DO MERCADO
DEVOPS SUMMIT BRASIL REUNIRÁ OS PRINCIPAIS ESPECIALISTAS MICROSOFT DO PAÍS Pelo 2º ano consecutivo a desenvolvedora de software Lambda3, em parceria com a BR Soluções e Microsoft, organizará o DevOps Summit Brasil, evento que advém da junção dos consagrados Azure Summit Brasil e ALM Summit Brasil, reunindo os principais nomes nacionais na área de DevOps da Microsoft, em sua sede, nos dias 31 de março e 1º de abril. O destaque da edição será a participação de Igor Abade, maior especialista ALM do País e diretor comercial na Lambda3. A expectativa é reunir mais de 300 pessoas. Os palestrantes abordarão assuntos como Gestão de Releases, Docker, Qualidade de Software, Desenvolvimento, Performance de Aplicações, Governança de Processos e Cloud. “Além da excelente oportunidade para fazer networking, o evento apresentará aos líderes e tomadores de decisão os benefícios de um modelo moderno de desenvolvimento e as formas que essas tecnologias transformam os negócios”, diz Victor Hugo Germano, CMO da Lambda3. Inscrições e detalhes no site http:// devopssummitbrasil.com.
CONSULTA BIN – OBTENHA INFORMAÇÕES DO CARTÃO DO PORTADOR ANTES DE CONCLUIR O PAGAMENTO Com a funcionalidade Consulta BIN, a Cielo permite que o lojista obtenha algumas informações do cartão no checkout, após o portador informar os seis primeiros dígitos do cartão. As informações fornecidas ajudam a descobrir qual a bandeira, a modalidade de pagamentos que o cartão possui (crédito, débito, múltiplo, pré-pagos, vouchers, etc) e a nacionalidade do cartão. Com essas informações o lojista consegue minimizar a quantidade de recusas nas vendas e aumentar consideravelmente as transações aprovadas. A Cielo oferece soluções para que o lojista venda mais e com segurança, conheça a plataforma de E-commerce API 3.0.
iMasters #21 Fevereiro 2017
FIAP LANÇA 4 MBAS: 2 PRESENCIAIS E 2 ON-LINE A FIAP, o centro de excelência em tecnologia mais respeitado do país, tem MBAs premiados nas áreas de tecnologia, inovação e negócios. E ao terminar qualquer um deles você ainda pode fazer extensões internacionais na Hyper Island, Babson College e Nova School of Business. Gostou? Agora vamos às novidades. São 2 MBAs presenciais: Análise de Negócios com Práticas do BABOK e Business Innovation - Change Makers. E mais 2 MBAs on-line: Gestão de Projetos com práticas do PMI e Gestão da Tecnologia da Informação. É só escolher o seu. A FIAP também oferece mais de 50 cursos SHIFT de curta duração, presenciais ou on-line. FIAP. Future-se.
FERRAMENTAS PARA DESENVOLVEDORES SEREM MAIS ORGANIZADOS E PRODUTIVOS Como um desenvolvedor ou web designer, seu tempo é valioso, disputado e, provavelmente, curto. O ideal para gerenciar o tempo e seus clientes e, consequentemente, ser mais produtivo é integrar processos organizacionais em suas atividades de dia a dia. Dessa forma, você pode evitar confusão e esforços descomunais para tentar recuperar o que foi perdido. Atualmente, existem diversas ferramentas e aplicativos gratuitos que podem te ajudar na organização das atividades e gerenciamento de tempo da sua rotina, como o Slack, aplicativo de comunicação corporativa, que facilita no contato com seus clientes e parceiros; o Asana, ferramenta para gerenciamento de projeto, com visualização em dashboards de todas as etapas do trabalho; ContaAzul, ferramenta para gestão financeira; e o Zoom, aplicativo para videoconferência. Em sua versão gratuita, permite a conversa entre duas pessoas, que pode ser suficiente para um briefing com cliente, por exemplo.
// 73
iMasters #21 Fevereiro 2017
74 // INTELIGÊNCIA NADA ARTIFICIAL
Redes neurais artificiais: o que são? Onde vivem? Do que se alimentam? Por Alex Lattaro, Líder de Conteúdos do iMasters
A
ATUALMENTE, MUITO SE FALA em inteligência artificial. O Google investe, a Microsoft, a Amazon, a Uber, o Facebook, a Apple... E essa lista não para por aqui. Nós sabemos que é uma tecnologia pujante, que, juntamente com a correta análise do Big Data, certamente será uma das ferramentas mais poderosas que nós teremos no futuro próximo. A ideia deste artigo é falar um pouco da inteligência artificial, mais precisamente abordar os algoritmos das redes neurais artificiais (RNA), sua arquitetura, seu funcionamento e suas principais aplicações. Embora muitos tenham a ideia de que redes neurais são sistemas computacionais que imitam o cérebro humano, na realidade, essa ideia de rede neural não passa de uma metáfora. Essa metáfora é totalmente plausível, pois
iMasters #21 Fevereiro 2017
as redes neurais artificiais tomam por base as redes neurais biológicas associadas ao processamento paralelo do cérebro humano. A rede neural, em suma, é uma abordagem alternativa aos métodos estatísticos tradicionais utilizados para solucionar problemas de previsão de séries temporais. Apesar de parecer simples à primeira vista, é preciso sempre ter em mente a metáfora do cérebro humano, pois esse modelo matemático se baseia nesse funcionamento. O neurônio biológico Sendo assim, é necessário entender primeiramente como funciona o neurônio. Você pensou que aquelas aulas de biologia seriam inúteis né? Simploriamente falando, um neurônio é constituído por um corpo celular, que
// 75
possui algumas ramificações chamadas de dendritos. O mesmo corpo celular possui um alongamento chamado axônio, cuja extremidade é chamada de telodendro. A passagem do impulso nervoso se dá na região da sinapse. Isso mesmo, aquela que é acelerada com uma pequena dose de álcool (lembre-se, eu disse pequena!). Essa área é composta pelo encontro dos dendritos de um neurônio com os axônios de outro. E sempre ocorre no sentido axônio, dendrito.
Imagem: Fornecida pelo autor.
Você deve estar se perguntando por que isso é importante. Os neurônios funcionam baseados na lei do tudo ou nada. Ou seja, se o estímulo excitatório for muito pequeno, nenhuma propagação é efetuada. Por outro lado, desde que o limiar seja atingido, independentemente da sua intensidade, o potencial da ação do neurônio será o mesmo. Essa lei foi o primeiro passo para que se desenvolvesse o primeiro modelo matemático para o desenvolvimento das redes neurais artificiais. Primeiro modelo de neurônio artificial O primeiro modelo, concebido em 1943 por McCulloch e Pitis, é formado por um vetor de entrada, e as sinapses são representadas por pesos numéricos. Vide fórmula na próxima coluna:
Entradas P1 x1 P2 x2 . . . Pn xn
∂ Modelo matemático de um neurônio
Saída ∑
ϕ
y
Na figura, X1 a Xn representam as variáveis de entrada i do neurônio de saída j. A entrada líquida é dada pela somatória dos pesos sinápticos de i=1 até n, onde ϕ é o limiar sináptico. Posteriormente, muitos outros modelos matemáticos foram desenvolvidos: Perceptron, Adaline (extensão do Perceptron), Perceptron multicamadas (MLP), Algoritmo Backpropagation, Redes de Jordan e Elman, Algoritmo GDMH, Combinacional, Iterativo Multilayer, Multiplicativo-aditivo, Multilayer com Neurônio Ativo, Multiaplicativo-aditivo com Neurônio Ativo, Algoritmo Evolucionário, Rede ART, Rede Counter-propagation, Rede de Hopfield, Rede de Kohonen, Rede LVQ. Apesar do grande número de modelos de RNA, aqui vamos citar apenas o modelo inicial e o Algoritmo Evolucionário. O algoritmo de Darwin Outro algoritmo muito utilizado para a resolução dos problemas atuais é o Algoritmo Evolucionário. Ele é baseado nos princípios da evolução biológica de Darwin, no qual o mais apto sobrevive. Por conta desse modelo evolucionário, esse algoritmo é bastante utilizado na aprendizagem de uma RNA. Basicamente, ele busca os pesos sinápticos que melhor representam a solução do problema. Esse modelo utiliza muito bem a metáfora de Darwin. iMasters #21 Fevereiro 2017
76 // INTELIGÊNCIA NADA ARTIFICIAL
Oi? O que Darwin tem a ver com inteligência artificial? Vamos lá! À uma população inicial são aplicados operadores genéticos de mutação e cruzamento em cada indivíduo com o intuito de que eles evoluam e representem melhores soluções para o problema. O algoritmo se inicia com uma população inicial gerada aleatoriamente. Nessa população, é avaliada a aptidão à sobrevivência de cada indivíduo. Em seguida, a aptidão dá a cada indivíduo uma pontuação baseada na pontuação desejada para a resposta almejada. Aqui, o cálculo da aptidão de cada indivíduo é realizado pela função do erro médio quadrático a seguir. MSE =
1 N 2 1 N ∑e = ∑ (Y - F )2 N t-1 t N t-1 t t
Ao final do cálculo de aptidão, é formada uma nova população de filhos por meio do processo de seleção e cruzamento. Nesse ponto, o processo de seleção por torneio escolhe os filhos que serão pais para gerar o processo de reprodução. Em seguida, é aplicado o operador genético de cruzamento, o que permite a troca de material genético dos pais, possibilitando assim que os filhos recebam as características dos pais. Então, na nova população de filhos, é aplicado o operador genético de mutação, alterando aleatoriamente o valor de um gene do indivíduo que tenha uma probabilidade mínima de mutação. Ao final de todo esse processo, a nova população passa pelo processo de elitismo, no qual o indivíduo menos apto é substituído pelo melhor indivíduo da população anterior. As camadas Se você está acompanhando bem o artiiMasters #21 Fevereiro 2017
go, percebeu que todo algoritmo de RNA é baseado em um modelo matemático. E percebeu também que esse modelo matemático normalmente tem relações com modelos biológicos. Além disso, percebeu que ele é composto, muito rudemente falando, de somatórias, combinações, pesos e camadas. Vamos explicar agora o que são as camadas. Quando falamos de RNA, existem três tipos de camadas: camada de entrada, intermediária ou oculta e camada de saída. As camadas intermediárias são as responsáveis por receber os dados advindos do meio externo. Essas entradas normalmente são normalizadas por funções de ativação e implicam uma melhor acurácia numérica perante as operações matemáticas. Já as camadas ocultas são constituídas pelos neurônios que são responsáveis pela extração das características associadas ao sistema a ser inferido. Aqui é onde ocorre praticamente todo o processamento interno da rede. E, por sua vez, as camadas finais são constituídas pelos neurônios que são responsáveis por produzir e apresentar os resultados finais advindos dos processamentos das camadas anteriores. As camadas e a disposição dos neurônios são basicamente responsáveis pelos tipos de arquiteturas de RNA encontradas atualmente. Na página ao lado, segue um modelo de camadas e quantidade de neurônios. Arquiteturas e aplicações Essas arquiteturas são responsáveis pela performance da sua RNA. Ou seja, se você está querendo desenvolver um algoritmo de RNA para utilizar na sua aplicação, precisa pensar em qual arquitetura será mais útil na resolução do seu problema. A mesma arquitetura pode ser excelente para um problema, e
// 77 Hidden layer Input layer Input #1
Output layer
Input #2 Output Input #3 Input #4 ∂ Modelo de camadas e quantidade de neurônios
nem tão boa para outro. As RNAs são classificadas de acordo com a sua arquitetura em: Dinâmica; Fuzzy; Única camada; Múltiplas camadas. Quando utilizar uma RNA? Para a utilização de RNAs, você pode utilizar basicamente o seguinte critério de classificação, lembrando que isso não é uma receita de bolo. Reconhecimento de padrões e classificação; Processamento de imagem e visão; Identificação de sistema e controle; Processamento de sinais. Os itens acima podem ser considerados macrotemas. Abaixo, seguem algumas aplicações específicas: Reconhecimento de voz; Software de OCR; Identificação de spam; Cloud computing; Mercado financeiro; Agricultura; Previsão do tempo; Medicina.
Para se ter uma ideia do uso das RNAs
na medicina, Karabatak, em 2009, apresentou um sistema de diagnóstico automático para câncer de mama, utilizando a base de dados Breast Cancer, baseado nas regras de associação e em uma RNA multilayer perceptron. Espero que nestas poucas páginas eu tenha conseguido instigar a sua curiosidade sobre as RNAs. Caso você queira se aventurar neste mundo de IA, pense que as RNA são um modelo matemático que se apropria de padrões biológicos para desenvolver um sistema computacional capaz de evoluir por meio de treinamento. Sendo assim, você vai precisar estudar muita matemática para desenvolver seus algoritmos, praticar a observação da natureza para elaborar seus modelos matemáticos, e ter muita paciência para testar seu algoritmo e sua arquitetura. Não se esqueça: a tecnologia é apenas um meio para um fim. Saiba o que fazer com ela!
Alex Lattaro é formado em Análise e Desenvolvimento de Sistemas pelo IFSP, cursa MBA em Business Intelligence no IBTA e trabalha como líder de conteúdo no iMasters. É 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@imasters.com.br
iMasters #21 Fevereiro 2017
78 //
DROPS DO MERCADO STONE E MASTERCARD INOVAM E LANÇAM SOLUÇÃO DE PAGAMENTOS CONTACTLESS EM TRANSPORTE PÚBLICO
Quem utiliza transporte público nas grandes cidades do Brasil provavelmente já sofreu com as longas filas para comprar bilhetes ou recarregar o cartão de transporte. Pensando em oferecer uma experiência de pagamento cada vez melhor a Stone, em parceria com a Mastercard e Autopass, desenvolveu uma solução de pagamento que funciona por aproximação, via NFC (Near Field Communication). O usuário poderá pagar com cartões de crédito e débito da Mastercard ou ainda com a carteira digital do seu smartphone. “Entendemos que o mercado brasileiro está em evolução e a demanda por soluções inovadoras de pagamentos para os meios de transporte é crescente. Agora podemos proporcionar uma melhor experiência para o usuário” diz Augusto Lins, diretor da Stone. A tecnologia já está em teste em algumas linhas de ônibus da cidade de São Paulo e estações de metrô no Rio de Janeiro. Curitiba é a próxima parada e a expectativa das empresas é oferecer a solução em todas as grandes cidades do Brasil.
SEU SITE ESTÁ PREPARADO PARA 2017? A segurança de uma aplicação web passa por diferentes cuidados do webmaster, que além de olhar para a estrutura, precisa estar atento às aplicações externas utilizadas para melhorar o desempenho do site. Outro fator que colabora com a segurança é o Pentest, que é dividido em BlackBox - quando a análise é realizada sem acesso a logins e senhas - e GreyBox - quando são informados logins e senhas. Ao contratar o Pentest oferecido pela Site Blindado, o webmaster ganha segurança e uma auditoria completa para sua aplicação, que é realizada pelos principais profissionais do mercado, além da bonificação da Blindagem de Sites, um pacote completo de soluções que inclui: Scan de Servidor, Scan de Aplicação Web, Scan PenTest Automatizado, Certificado Digital SSL e Scan de SSL. O Pentest Site Blindado é realizado manualmente, o que aumenta a sensibilidade com relação às vulnerabilidades encontradas. Acesse nosso site e saiba mais.
GITHUB COM DEPLOY AUTOMÁTICO NO UOL HOST O UOL HOST acaba de lançar o deploy automático com o GitHub. Agora, basta atualizar os arquivos no repositório configurado e a sincronização com a hospedagem acontecerá automaticamente. Todo o processo pode ser feito direto pelo Painel de Cliente, de forma simples e rápida. O usuário acessa o Painel, escolhe o site que quer gerenciar, clica no card com ícone do GitHub e ativa a função “Deploy automático”. A partir de então, a cada push realizado no remote, o diretório escolhido será atualizado com seus updates automaticamente. Para saber mais acesse: www.uolhost.com.br/hospedagem
iMasters #21 Fevereiro 2017
Inovação, paixão e tecnologia: uma base forte que transforma negócios. Pessoas apaixonadas por inovação realizam grandes mudanças e colocam em prática as melhores ideias. A Lambda3 acredita na sua ideia e, com tecnologia, vai ajudar você a transformá-la em realidade.
Projetos de Software
DevOps
Nuvem
w w w. la m b da 3 . c o m . b r
80 //
COMUNIDADES Assim surgiu o InterNorte... Por Rodrigo “pokemaobr” Cardoso, Líder de comunidades do iMasters
Tudo começou no ano de 2008, quando, em meio às buscas por inovação, um grupo de desenvolvedores e apaixonados por tecnologia aceitou o desafio de participar do iMasters InterCon 2008. O desafio envolveu desde a primeira viagem do grupo ao sudeste, que durou quatro longos dias inteiros a bordo de um ônibus, entre a ida e a volta. Tudo era novidade, mas o cansaço não tirou a ansiedade, que só aumentava conforme se aproximava a oportunidade de vivenciar aquele momento. O momento chegou, e a experiência ainda é descrita como incrível. “A possibilidade de estar junto dos caras que, até então, só conhecíamos pela Internet, e que nos servem de referência no dia a dia foi demais!”, afirmou Marcivone J. Reis, organizador do Internorte. O resultado do encontro foi tão magnífico que, a partir dali, não ficava nenhuma dúvida de que aquilo precisava se repetir, precisava ir mais longe geograficamente falando, para que pudesse estar mais próximo de quem está fora dos grandes centros. Era uma nova forma de ver que a localização não impedia que as mentes pudessem estar sempre antenadas a novos conceitos. Nascia ali o desejo de colaborar com a própria região, tão carente nesse aspecto. Tudo aquilo poderia levar muito crescimento para muitas pessoas - inclusive para os próprios participantes, que não estavam, até então, ligados diretamente a essas comunidades um pouco mais distantes. O resultado de toda essa experiência começou a surgir logo no ano seguinte, em 2009,
iMasters #21 Fevereiro 2017
quando, ainda inspirado pelo que viu no InterCon, o grupo conseguiu realizar o primeiro encontro regional, na cidade de Redenção, no sul do Pará. Encontro de Tecnologia, Desenvolvimento e Design - ETDD foi primeiro nome adotado e, superando as expectativas, eles conseguiram reunir quase 100 participantes, que também tinham o desejo de compartilhar. Começou a surgir o senso de comunidade e integração que, até então, não existia. Para ajudar ainda mais a comunidade que nascia, em 2011 foi implantado em Redenção o curso de Tecnologia em Análise e Desenvolvimento de Sistemas pela UEPA - Universidade do Estado do Pará, o que contribuiu para o aumento da comunidade. A partir do primeiro encontro, começaram a surgir diversas oportunidades para a troca de ideias de forma coletiva. O Internorte, nome adotado pelo evento a partir de 2011, passou a ser realizado a cada dois anos, e se tornou o principal encontro entre os aficionados por tecnologia - até então, ele era o único encontro dessa natureza na região, sempre reunindo participantes de diversas cidades. Houve edições em 2011, 2013, 2015 e 2016, que reuniram grandes nomes da tecnologia, como Jenner Maciejewsky, MVP Microsoft, André Noel, do Vida de Programador, Anderson Casimiro, Rodrigo PokemaoBR e Thamara Hessel. Além dos eventos anuais, há encontros descontraídos no estilo de PUB, nos quais os participantes conversam sobre seu dia a dia, além de encontrarem outros desenvolvedores com os mesmos pontos em comum.
Imagens: Fornecidas pelo autor.
// 81
Hoje já existe também a Engetec - Empresa Júnior da Uepa -, que contribui realizando atividades voltadas para os estudantes e a comunidade de tecnologia. Através de alguns membros, há uma grande ligação com outros eventos de diversas partes do País, levando o conhecimento da comunidade para todos os cantos e grandes profissionais para a região, para promover networking e possibilitar a aproximação e a troca de ideias. Recentemente, está surgindo uma comunidade através de profissionais e amantes da linguagem PHP, o PHP-PA. O grupo já vem evangelizando e levando o conhecimento da tecnologia por diversos lugares, incluindo universidades e outros grupos. O que se observa é que as grandes comunidades têm um papel muito importante diante das comunidades menores, pois servem de direção e modelo. “Um excelente exemplo disso é a humildade da maioria das pessoas que fazem parte das comunidades e sempre nos recebem bem, abraçam a ideia de que estamos promovendo a troca de experiências, mesmo estando tão distantes dos grandes centros, colocam-se à disposição e acabam contribuindo de alguma forma. Algumas comunidades como o iMasters e o PHPSP têm nos dado uma atenção especial, além de força e motivação para continuar a promover esses encontros e aumentar ainda mais o potencial regional com a utilização e a propagação da tecnologia em todos os meios”, contou Marcivone J. Reis, organizador do Internorte.
Internorte Internorte: www.internorte.com.br Fanpage: www.facebook.com/internorte.com.br PHP-PA: https://www.facebook.com/elephants.para/
iMasters #21 Fevereiro 2017
82 //
DROPS DO MERCADO GOCACHE, A MELHOR CDN DO BRASIL ESTÁ ACELERANDO, VAMOS JUNTO?
A GoCache é uma empresa brasileira que oferece serviço de CDN de última geração, com tecnologia própria, para melhorar a disponibilidade, segurança e desempenho de websites, lojas virtuais, aplicativos móveis e APIs. Com foco no mercado nacional, a empresa se encontra em franca expansão e está executando um plano de investimentos agressivo para assegurar a posição de melhor CDN do Brasil. Recentemente a empresa lançou dois novos produtos: Web Application Firewall (WAF) que protege contra ataques como SQL Injection e Cross Site Scripting(XSS), além de permitir a filtragem dos acessos por geolocalização, user agent e outras opções; e SSL gratuito incluso, para utilização de HTTPS em todo o website sem custos com aquisição, instalação ou manutenção, assegurando a comunicação criptografada e também colaborando para melhorar o SEO. A empresa também possui diversos modelos de parceria comercial, para saber mais acesse o menu “Parcerias” no website.
SOLUÇÕES DE SEGURANÇA COM A BLUEHOST BRASIL A Bluehost, líder em serviços de hospedagem de sites, oferece o SiteLock, líder global em segurança de sites. Invasores de sites podem comprometer informações e dados confidenciais, injetar malwares em bases de dados SQL, dentre outras armadilhas. Tomar algumas medidas preventivas agora poderá salvá-lo de uma série de frustrações no futuro. Entra em cena o SiteLock: ferramenta que vasculha vulnerabilidades no seu site diariamente, remove quaisquer malwares que possam ter sido injetados e notifica você quando o problema for corrigido, além de estampar um Selo de Confiança para mostrar aos visitantes que seu site é seguro. Tudo isso com um painel simples e personalizável. O SiteLock não apenas previne contra scripts comprometidos, como também melhora o tempo de carregamento do seu site com recursos de aceleração de site (CDN Global). Proteja seus clientes e sua reputação. Conheça todas as vantagens da melhor solução de segurança web no mercado.
iMasters #21 Fevereiro 2017
MUNDIPAGG LANÇA NOVO PRODUTO EM PARCERIA COM A STONE Agora os clientes MundiPagg contam com mais uma forma de pagamento, o Boleto Stone. Ele já nasce adequado ao novo modelo de cobrança da Febraban que entra em vigor em 2017 e consiste no fim do boleto sem registro. O novo produto lançado em parceria com a adquirente, surge como uma opção mais segura, econômica e prática. O Boleto Stone não requer a interação entre lojista e banco e a conciliação é garantida pela Stone. Além do custo mais baixo, o novo produto vai ajudar na diminuição do número de fraudes, dando a possibilidade de contestação de boletos. “Nosso objetivo é trazer cada vez mais alternativas que melhorem a experiência de pagamento para lojistas e consumidores”, afirma João Barcellos, diretor da MundiPagg, empresa que realiza pagamentos para 40% das transações do e-commerce nacional.
APRENDENDO VR COM AS PRINCIPAIS EMPRESAS DO RAMO Realidade virtual é vista por muitos como o futuro do conteúdo criativo. E não estamos falando somente de games: arquitetos construindo novos edifícios, médicos simulando cirurgias de alta complexidade, ou viagens virtuais para qualquer lugar do planeta são algumas das possibilidades dessa nova tecnologia. Existe um crescimento enorme do setor e profissionais desta área estão em alta, dentro e fora da indústria dos jogos. Em parceria com as principais empresas no mercado de realidade virtual, como Google VR, Unity, Upload e Vive, a Udacity lançou mais uma especialização em português: o Nanodegree Desenvolvedor de Realidade Virtual. Todo o conteúdo deste curso foi construído para que o aluno esteja preparado para desenvolver aplicações de realidade virtual de altíssima qualidade. O Nanodegree é totalmente online. Durante o curso, o aluno desenvolverá diversos projetos e receberá feedback de especialistas em VR. Mais informações em br.udacity.com.
// 83
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õe para os participantes sua experiência e vivência com o assunto da vez. Os temas são definidos pela equipe de conteúdo do iMasters, liderada pelo Alex Lattaro. Se quiser dar alguma sugestão, escreva para setemasters@imasters.com.br. Confira o que rolou nas edições passadas e quais ainda estão por vir em setemasters.imasters.com.br
O 7Masters de outubro superou as expectativas de público, de debate e de nível dos nossos mestres. Não quer perder o próximo? Fique atento à nossa agenda e se inscreva: setemasters.imasters.com.br. Confira o que aconteceu:
Internet das Coisas A primeira fala do 7Masters Internet of Things foi de Afonso Coutinho, monitor e mentor do Redbull Basement. Afonso falou sobre o hardware do backend para IoT e suas diversas opções. http://ow.ly/kT3e306L5Pk
“Criando seu próprio dispositivo IoT” foi o tema da participação de Pedro Minatel, pesquisador de tecnologias de segurança e IoT na Samsung. Pedro discorreu sobre dispositivos embarcados: o que são, exemplos e como facilitam a vida do desenvolvedor. http://ow.ly/wAOm306L79s
Depois foi a vez da Rafaela Mancilha, engenheira elétrica que atua na área de prévendas de software, com foco na concepção e na arquitetura de soluções IoT. Sua fala girou em torno do tema “O Potencial e os desafios da IoT nas transformações da sociedade”. Rafaela falou sobre revolução industrial e a indústria 4.0. http://ow.ly/TRx6306L653
Pedro Godoy é cofundador da Krafty, empresa que usa IoT e Inteligência Artificial para experimentar o futuro. Ele trouxe para o público do 7Masters o tema “Hackeando São Pedro”. Apesar do nome engraçado, a palestra tratou basicamente disto mesmo: água. E enchentes, claro. Pedro apresentou o projeto Pluvi on, que é uma pequena estação de medição de chuvas, open source e de baixo custo. http://ow.ly/XAxr306L8vw
iMasters #20 Fevereiro 2017
// 85
POR AÍ Fazendo a Internet do Brasil pelo mundo Que os brasileiros têm feito muita coisa, a gente sabe. Mas quem está fazendo o quê e onde, nem sempre fica bem claro. A ideia aqui é que você apareça, com a sua equipe, sua turma, seus amigos, mostrando um trabalho, a participação num hackaton, palestra etc. Tudo o que signifique “fazer a internet do Brasil” para você, cabe aqui! Quer participar? Envie uma foto e descrição para redacao@imasters.com.br
Imagem: Divulgação.
PROFESSOR DA UNESP LANÇA LIVRO INTERNACIONAL João Paulo Papa, professor da Faculdade de Ciências da Unesp, em Bauru, em conjunto com o professor Xin-She Yang, da Middlesex University, no Reino Unido, publicou o livro “Bio-Inspired Computation and Applications in Image Processing”, traduzido em português como: Computação Bioinspirada e suas aplicações em processamento de imagens. O livro, um dos poucos que tratam o tema tão especificamente, foi lançado pela Editora Academic Press e é voltado principalmente para as áreas de Ciência da Computação, Engenharia Elétrica e Médica. Ele reúne o conhecimento das duas áreas diferentes para a resolução de problemas. São em torno vinte autores de todo o mundo envolvidos na colaboração da publicação. A publicação sugere o uso da computação bioinspirada para facilitar o processamento de imagens para depois inserir a inteligência artificial. Um exemplo disso é quando se tem uma placa de carro com as letras e números borrados, e com o uso das duas técnicas, consegue melhorar a nitidez para melhor visualização. Mais informações sobre o livro pelo e-mail papa@fc.unesp.br ou telefone: (14) 3103-6079, ramal: 7506. iMasters #21 Fevereiro 2017
86 //
POR AÍ
BRASILEIRO SURGE ENTRE APPLE E GOOGLE EM LISTA DE ‘MELHORES PROJETOS’ O Zeno Rocha figurou na lista dos donos dos 10 maiores lançamentos de projetos open sources do planeta, segundo o GitHub. O brasileiro apareceu ao lado de empresas como Facebook, Google, Microsoft e Apple. Dos Top 10 divulgado pelo GitHub, oito são empresas e apenas dois são “pessoas físicas”, sendo Zeno Rocha - criador do Clipboard.js - um deles. “Desenvolvi esse projeto sozinho, mas ele tem código aberto e por isso que está lá e todo mundo usa (...). Eu nem acredito que o meu nome está nessa lista junto com Apple, Microsoft, Google, e Facebook”, afirmou Zeno, que é articulista do Portal iMasters.
iMasters #21 Fevereiro 2017
A versão estável (1.0) do livro “Docker para Desenvolvedores” foi lançada nesta semana. Essa versão reúne o conteúdo mínimo para entendimento do funcionamento básico do Docker para um desenvolvedor de código que nunca interagiu com essa tecnologia de virtualização usando container. Além disso, ela trata das melhores práticas para construção de imagens Docker, através da utilização de exemplos e evolução de uma base de código simples usada para ilustrar cada boa prática. O livro foi escrito por Rafael Gomes (Gomex), hacker soteropolitano, consultor de infraestrutura, formado na Universidade de Salvador no curso de Gestão de Redes, mestrando pela Universidade Federal da Bahia em Ciência da Computação. Atualmente, ele trabalha como Arquiteto de Soluções na Superintendência de Tecnologia da Informação da Universidade Federal da Bahia, focado em aplicações, monitoramento e segurança. Certificado em LPIC-1, MCSO e Zabbix Certified Specialist. Caso sejam encontrados problemas no livro, o autor pede que eles sejam registrados no repositório do livro: https://github.com/ gomex/docker-para-desenvolvedores e o material pode ser baixado através do link: https://leanpub. com/dockerparadesenvolvedores.
Imagens: Divulgação.
∑
VERSÃO ESTÁVEL DO LIVRO “DOCKER PARA DESENVOLVEDORES” É LANÇADA
Você sabia que pode testar nossa API em Sandbox sem nenhum compromisso? Experimente nossa API REST, com diversas SDKs para agilizar sua integração. A documentação completa está no nosso DevHub. Acesse: http://docs.mundipagg
www.mundipagg.com.br | contato@mundipagg.com Capitais e Regiões metropolitana: 3003-0460 | Outras regiões 21 3513-2802 SP - Rua Fidêncio Ramos, 308, 10º andar - Vila Olímpia RJ - Av. General Justo, 375, 9º andar - Centro facebook.com/mundipagg
linkedin.com/company/mundipagg
88 //
POR AÍ
BRASILEIRO INVENTOR DE APP QUE TRADUZ PORTUGUÊS PARA LIBRAS ENTRA PARA LISTA DOS JOVENS MAIS INOVADORES DO MIT
Imagens: Divulgação.
Ronaldo Tenório está entre as 35 pessoas com menos de 35 anos mais inovadoras do mundo. A lista “35 Innovators Under 35” é feita anualmente pelo Instituto de Tecnologia de Massachusetts, nos Estados Unidos. Tenório é o único representando da América Latina desta edição e sua participação se deve ao aplicativo Hand Talk, que traduz o português para Libras. O app ajuda deficientes auditivos ou com problemas na fala a se comunicarem com pessoas que não sabem Libras. Hugo, o avatar do aplicativo, também traduz a linguagem de sinais para mensagem de texto ou de voz. No Brasil, mais de um milhão de pessoas já utilizam o Hand Talk. De acordo com Tenório, o próximo passo é deixar o avatar mais parecido com o usuário. Tenório quer fazer diferentes versões do avatar, dando a possibilidade ao usuário de mudar a raça, o gênero e outras características visuais.
iMasters #21 Fevereiro 2017
Não basta proteger seu site contra invasores, é preciso deixar seu usuário confortável para comprar online
Conheça a suíte de soluções de segurança que a Site Blindado oferece
83% dos sites apresentam brechas de segurança críticas identificadas na primeira análise da Site Blindado
Blindagem de sites
Certificado SSL
Blinde seu site contra invasores e exiba o selo Site Blindado
Proteja as informações em tráfego dos seus clientes e usuários
54% dos consumidores acreditam que pagamentos realizados offline são mais seguros que os pagamentos online
Pentest
WAF
Faça um teste manual de invasão e descubra as falhas do seu site
Filtre os tráfegos suspeitos em seu site evitando ataques
84% dos consumidores brasileiros ainda tem medo de realizar compras online por
comercial@siteblindado.com.br | www.siteblindado.com.br
insegurança
UM PROJETO PATROCINADO POR
next-gen CDN