Criando grandes cases para o ROI de User Experience (UX)

Você sabia que User Experience (Experiência do Usuário/UX) pode ser mensurado e mostrar retorno sob investimento (ROI)? Mesmo que o cálculo do ROI seja desafiador por si só, é perfeitamente possível e muito valioso para justificar o investimento em UX.

Abaixo, trouxemos números interessantes para serem considerados na hora de construir seu case. As informações foram baseadas no infográfico Making a Strong Business Case for The Roi of UX, da Experience Dynamics, empresa americana de consultoria em UX.

User Experience (UX) melhora a eficiência do desenvolvimento

Em fábricas de software, a velocidade é imprescindível. Atividades de UX podem reduzir em 50% o desperdício de tempo no desenvolvimento. Isso acontece porque elas ajudam a definir requisitos de usabilidade logo de início, prevenindo o retrabalho.

O tempo de desenvolvimento, por si só, já é reduzido em cerca de 33% a 55% quando o usuário é envolvido no processo. É assim pois a tomada de decisão e a priorização de atividades dos desenvolvedores ganha mais clareza. Leia mais

Classificação de imagens com deep learning e TensorFlow

Hoje em dia técnicas de machine learning são utilizadas para resolver problemas em praticamente todo domínio imaginável. Um uso muito popular é no reconhecimento e classificação de imagens, onde técnicas de deep learning podem apresentar ótimos resultados.

Para entender conceitos como redes neurais, deep learning e classificação de imagens, preparei um exemplo onde ensinaremos um algoritmo a separar fotos de gatos de acordo com suas raças.

Relembrando a teoria discutida no artigo anterior (O que é Machine Learning?), nosso algoritmo será de classificação (classificar uma entrada entre determinadas categorias), com aprendizagem supervisionada (treinamento com entradas que possuem um label associado, ou seja, dizemos ao computador o que significa aquela entrada).

Mas antes de implementar o algoritmo, primeiro vamos entender algumas definições:

Rede Neural Artifical

Uma rede neural artifical (ANN) é uma estrutura que simula o funcionamento de um conjunto de neurônios. A ANN mais simples é aquela composta de apenas um neurônio, chamada perceptron. Um perceptron possui:

  • diversas entradas com seus respectivos pesos
  • um valor limite, utilizado para decidir se o perceptron “dispara”, ou seja, se sua saída será igual a 1
  • e o valor de saída, que pode ser 0 ou 1

Exemplo de deep learning, redes neurais, neural networks

Fonte: http://video.udacity-data.com.s3.amazonaws.com/topher/2017/November/5a01aef2_neural-networks/neural-networks.pdf

Ao juntar muitos perceptrons, formamos uma rede, uma rede neural artificial.

Para treinar um perceptron, comparamos o resultado obtido com o resultado esperado, e mudamos os pesos das entradas com o objetivo de minimizar o erro obtido.

Por exemplo: imagine que vamos treinar uma rede neural para classificar se um e-mail é ou não spam. As entradas podem ser:

  • O tamanho do e-mail
  • O horário em que foi enviado
  • Se conheço ou não quem o enviou
  • Se já recebi outros e-mails do mesmo remetente
  • As palavras no assunto e no corpo do e-mail

E a saída é 0 (não spam) ou 1 (spam). Conforme a rede é treinada (usa a diferença entre o resultado obtido e o resultado esperado para alterar os pesos que agem sobre as entradas, afim de minimizar o erro), ela aprende as características e a relevância de cada característica para indicar se um e-mail é ou não spam.

Ou seja, treinamos a estrutura para gerar o resultado correto por meio do ajuste dos pesos que agem sobre as entradas. Este ajuste é feito ao comparar o resultado obtido com o resultado esperado, e calcular a diferença. O ajuste tem o objetivo de diminuir esta diferença. Quanto menor a diferença, mais o algoritmo aprendeu a classificar corretamente.

Rede Neural Convolucional

Rede Neural Convolucional (Convolutional Neural Network – CNN) é uma classe de rede neural utilizada para processamento e análise de imagens. Foi proposta em 1998 em um paper do cientista Yann LeCun, que propôs uma arquitetura capaz de reconhecer dígitos manuscritos com precisão de 99,2%. Esta arquitetura foi inspirada em uma pesquisa de 1968 feita por David Hunter Hubel e Torsten Wiesel sobre o funcionamento do córtex visual dos mamíferos.

A pesquisa sugere que mamíferos percebem visualmente o mundo de forma hierárquica, através de camadas de clusters de neurônios. Quando vemos algo, clusters são ativados hierarquicamente, e cada um detecta um conjunto de atributos sobre o que foi visto.

A arquitetura da CNN simula clusters de neurônios para detectar atributos daquilo que foi visto, organizados hierarquicamente e de forma abstrata o suficiente para generalizar independentemente de tamanho, posição rotação, etc.

Exemplo de Rede Neural Convolucional (Convolutional Neural Network - CNN)
Fonte: https://github.com/llSourcell/Convolutional_neural_network/blob/master/convolutional_network_tutorial.ipynb 

Deep Learning

Acima explicamos o conceito de rede neural. Deep Learning é o uso de uma rede neural com muitas camadas. Usando a mesma lógica, mas com mais níveis, podemos utilizá-la para modelar conceitos mais complexos.

Convolucional

Já entendemos o que é uma rede neural, e que rede neural convolucional é uma classe de redes neurais. Mas qual o significado de convolução? Para nós neste exemplo, convolução pode ser visto como sinônimo de combinação. É o procedimento de combinar duas fontes de informação.

Imagem

O input da CNN é uma imagem, representada como uma matriz. Cada elemento da matriz contém o valor de seu respectivo pixel, que pode variar de 0 a 255. Para imagens coloridas em RGB temos uma matriz “em três dimensões”, onde cada dimensão é uma das camadas de cor (red, green e blue). Assim, uma imagem colorida de 255px por 255px é representada por três matrizes de 255 por 255 (255x255x3).

Atributo

Um atributo é um padrão que a CNN aprende. Normalmente este padrão se repete nas imagens, tornando-o proeminente. O contorno dos objetos (linhas, formas, abstrações) é um exemplo de atributo.

Aplicando a convolução

Um pouco acima explicamos que convolução é a combinação de duas fontes de informação. E que estamos tentando aprender e identificar padrões nas imagens. Neste exemplo, queremos aprender os padrões que diferenciam duas raças diferentes de gatos, quais características diferenciam uma raça da outra. E como treinar nosso algoritmo para identificar estas características.

Pois bem, para isto utilizamos um kernel/filtro que será aplicado à partes da imagem original, com o objetivo de identificar padrões.

Pense nela como uma matriz menor composta de valores. Ela é aplicada à imagem (convolução), para obter regiões de ativação, ou seja, regiões onde atributos específicos deste filtro foram encontrados.

Por exemplo, podemos imaginar um filtro de 16 x 16 percorrendo uma imagem de 256 x 256 x 3. A cada etapa pegamos uma porção de 16 x 16 da imagem e fazemos a convolução (ou seja, calculamos o produto escalar entre as duas matrizes). O valor obtido é adicionado à matriz de ativação. Este processo é repetido até todas as três matrizes terem sido percorridas completamente.

Tutorial de rede convolucional
Fonte: https://github.com/llSourcell/Convolutional_neural_network/blob/master/convolutional_network_tutorial.ipynb 

 

Os valores do filtro mudam a cada iteração de treinamento, com o objetivo de melhorar a identificação de quais regiões contém atributos significativos (da mesma forma que os pesos em um perceptron de uma rede neural são atualizados no treinamento).

Mas como essa série de multiplicações nos ajuda a detectar os atributos de uma imagem? Conforme o filtro aprende a detectar um atributo (através do processo de aprendizado), seus valores se ajustam de forma que o resultado da convolução seja um valor que indique que o determinado atributo foi encontrado. É o mesmo mecanismo utilizado na detecção de spam/não spam explicada anteriormente, só que agora sendo aplicado a uma imagem.

No exemplo abaixo, estamos tentando identificar o ratinho na imagem. O filtro irá trabalhar na detecção daquela curva destacada em amarelo. A representação em pixels do contorno do ratinho contém valores da cor onde ocorre o contorno, e zero (branco) onde não ocorre.

Tutorial de rede convolucional

Quando fazemos o produto escalar entre o filtro e o contorno que procuramos, o resultado é um número bem grande.

Tutorial de rede convolucional

Este resultado sempre é menor em outras partes da imagem, pois o produto escalar é menor.

Tutorial de rede convolucional
Fonte: https://github.com/llSourcell/Convolutional_neural_network/blob/master/convolutional_network_tutorial.ipynb 

 

Ou seja, quando o resultado da convolução é um número grande, o atributo foi detectado. Já quando é um resultado 0 ou muito pequeno, o atributo não foi encontrado.

Treinando nossa CNN

Neste exemplo não iremos escrever uma CNN do zero, mas sim treinar uma pronta utilizando um processo chamado Transfer Learning. Com Transfer Learning, usamos uma CNN já treinada, e adicionamos uma camada a mais, treinando apenas esta camada para nosso objetivo.

No nosso caso, usaremos a CNN Inception-V3 do Google, que foi treinada em cima da base de dados ImageNet, e a ensinaremos a classificar a raça de gatos.

Crie uma pasta em algum lugar do seu computador, abra uma linha de comando nela e siga os passos abaixo.

Passo 1

Baixar e instalar o Docker. Uma vez instalado, podemos executar o seguinte comando para conferir se está tudo ok:

docker run hello-world

Passo 2

Baixar a imagem do TensorFlow:

docker pull tensorflow/tensorflow

Passo 3

Iniciar o container baseado na imagem do TensorFlow, mapeando um diretório entre a máquina física e o container:

docker run -it --volume ${PWD}:/tf_files --workdir /tf_files --publish 6006:6006 tensorflow/tensorflow:1.1.0 bash

Parâmetros:

  • -it: processo interativo
  • --volume <host>:<container>: monta um volume, linkando uma pasta no host com uma no container
  • --workdir <dir>: diretório no container onde vamos executar os comandos
  • --publish <host>:<container>: mapeamento entre porta do host e a porta no container

Passo 4

Colocar neste diretório os arquivos necessários para treinar a CNN (veja as observações abaixo para pegar os arquivos):

  • Uma pasta chamada cats, contendo uma pasta para cada categoria que queremos treinar. No nosso caso teremos uma pasta para cada raça de gato. O nome da pasta será o nome da categoria, o nome da raça do gato. Dentro das pastas, teremos as imagens dos gatos.
  • Script retrain.py que contém os comandos para treinar a CNN.
  • Script label_image.py que usaremos para consultar a CNN treinada, ou seja, passaremos a imagem de um gato e perguntaremos qual sua raça.

Obs 1: Você deve montar ou utilizar um conjunto de dados com as imagens das raças desejadas. Eu utilizei um subconjunto do desafio Dogs vs. Cats do Kaggle.

Para este exemplo, separei mais ou menos 200 imagens de cada raça. Vamos trabalhar com a Birman e a British Shorthair:

Gato Birman, Gato British Shorthair em exemplo de deep learning
Fonte: https://www.kaggle.com/c/dogs-vs-cats 

 

Obs 2: Para baixar os scripts, execute os seguintes comandos:

curl -O https://raw.githubusercontent.com/tensorflow/tensorflow/r1.1/tensorflow/examples/image_retraining/retrain.py
curl -L https://goo.gl/3lTKZs > label_image.py

Feito isto, sua pasta deve estar mais ou menos assim:

Exemplo de deep learning e tutorial de rede convolucional

Passo 5

Iniciar o treinamento:

python -m retrain \
  --bottleneck_dir=bottlenecks \
  --how_many_training_steps=500 \
  --model_dir=models/ \
  --summaries_dir=training_summaries/"${ARCHITECTURE}" \
  --output_graph=retrained_graph.pb \
  --output_labels=retrained_labels.txt \
  --architecture="${ARCHITECTURE}" \
  --image_dir=cats

Este script irá baixar o inception model e depois iniciará o treinamento com base nas imagens e categorias que informamos. Irá iterar 500 vezes para treinar o modelo, e salvará o resultado no arquivo retrained_graph.pb.

O tempo de execução varia de acordo com a quantidade de imagens para treinar e a velocidade do computador. Em um teste que fiz com 12 raças, cada uma contendo em torno de 200 imagens, o treinamento demorou mais ou menos 30 minutos em um i5 com 8 GB de RAM.

Treinamento finalizado:

Exemplo de deep learning e tutorial de rede convolucional

Passo 6

Consultar o modelo gerado. Podemos pesquisar no Google a imagem de um gato qualquer (dentre as duas raças que escolhemos), e colocar na pasta tf_files. Para perguntar ao modelo treinado qual a raça deste gato, basta executar:

python label_image.py gato.jpg

Onde gato.jpg é o nome da imagem que você pesquisou e baixou.

Fiz um teste com o gato da imagem abaixo, e o resultado foi 99,29% British Shorthair, ou seja, o resultado correto!

Exemplo de deep learning e tutorial de rede convolucionalCheezburger cat
Fonte: http://mentalfloss.com/article/16205/lol-cats-i-can-has-cheezburger

Próximos passos

Podemos pegar o modelo que treinamos e criar uma aplicação para disponibilizar uma API que recebe a imagem de um gato e retorna sua raça fazendo consulta a este modelo. Ou podemos também criar uma aplicativo para celular, onde tiramos a foto de um gato e consultamos o modelo para saber a sua raça.

Estes são alguns exemplos de como utilizar isto no mundo real, e lembre-se que podemos utilizar este modelo também para outros tipos de imagens e classificações.

Fontes e créditos

Este tutorial não seria possível sem o estudo das seguintes referências:

Scripts:

Os scripts utilizados fazem parte do tutorial TensorFlow for Poets, e foram obtidos com os segiuntes comandos:

curl -O https://raw.githubusercontent.com/tensorflow/tensorflow/r1.1/tensorflow/examples/image_retraining/retrain.py
curl -L https://goo.gl/3lTKZs > label_image.py

Leia mais

Como criar um projeto com User Experience (UX), Usabilidade e Acessibilidade

Sem User Experience (UX), Usabilidade e Acessibilidade, a qualidade do sistema é altamente comprometida. Imagine um software com todo o potencial de se tornar referência no mundo, mas que não vai para frente porque os usuários não entendem como usar (ou não conseguem por alguma deficiência). Nunca vale dizer “na minha máquina funciona”, ou culpar o usuário: é o software que deve ser adequado.

A experiência do usuário, quando considerada, é capaz de tornar um sistema muito mais receptivo, abrangente e interessante de ser utilizado por um público muito maior. A Usabilidade e a Acessibilidade são essenciais para que ninguém seja impedido de utilizar seu software, aplicativo ou gadget.

Nesse Ciclo de Capacitação, você aprenderá os fundamentos e grandes dicas para aplicar UX no seu dia a dia. Assim, poderá se orgulhar de produtos com ainda mais qualidade! Não importa se é um desenvolvedor, analista ou tester: todos podem contribuir para uma melhor experiência do usuário. Leia mais

Definidos os Campeões da ‘Copa dos Agasalhos’: mais de 4 mil peças foram arrecadadas

Com temperaturas na casa dos 16 graus em Maringá, no Paraná, nada melhor (e necessário) que ajudar a quem precisa. Por meio da campanha do agasalho com o tema da Copa, que teve início em 15 de março, meses antes do frio chegar, a DB1 Global Software, multinacional de tecnologia sediada em Maringá, bateu todos os recordes de arrecadação por meio de uma disputa saudável entre times formados por colaboradores da empresa.

A “Copa dos Agasalhos” reuniu muito da missão da DB1: desenvolver as melhores soluções em TI, criar e evoluir as práticas de gestão da organização no aspecto socioambiental, envolvendo e engajando os colaboradores, incentivando a competitividade e, claro, atendendo a sociedade organizada em parte de suas necessidades. Leia mais

Gratidão: você já foi grato(a) hoje?

O texto de hoje fala sobre gratidão! Se você leu o texto anterior deve estar pensando: “de novo”? Sim, de novo! Contudo, se você já leu sobre gratidão, você sabe também sobre a importância de ser grato para a construção da resiliência. Por isso, esse texto apresentará novas maneiras de vivenciar a gratidão. Bora treinar? 

Primeiro, respire fundo, se acalme e vamos lembrar o que é gratidão. Gratidão, segundo o dicionário, é o sentimento experimentado por uma pessoa em relação a alguém que lhe concedeu algum favor, um auxílio ou benefício qualquer, ou seja, é uma espécie positiva de reconhecimento. Na vida, a gratidão é um pouco mais que isso: é a emoção responsável por sermos capazes de expressar apreço por aquilo que temos, e não pelo que desejamos ter. Na psicologia positiva, a gratidão também é conhecida como uma emoção que pode ser cultivada e as consequências desse cultivo são, além de maior bem-estar e felicidade, também mais energia, otimismo e empatia, quando a direcionamos para quem nos cerca. Vamos cultivá-la?  Leia mais

Facilitando retrospectivas e melhorando a comunicação da equipe baseada na Metodologia LEGO® SERIOUS PLAY®

Os times são compostos por pessoas de diferentes culturas e valores. Chegamos nos meios corporativos, onde passamos a conviver em grupos com pessoas que não conhecemos, temos que aprender a trabalhar em conjunto em prol de um objetivo a ser alcançado.

Porém, fatores que influenciam na performance das nossas atividades são os ruídos na comunicação, pois além de muitas vezes não validarmos o entendimento de uma informação recebida ou de uma informação repassada, lidamos com vários tipos de pessoas que registram as informações predominantemente de forma visual, auditiva e/ou sinestésica.

Mas o que tudo isso tem haver com o tema?

No final das contas, a base para bons relacionamentos inicia-se com uma boa comunicação. E aqui inicia a minha história: Fui convidada para facilitar a retrospectiva de um time de infraestrutura que já trabalhava há muito tempo junto, porém os membros estavam tendo dificuldades na condução da transmissão de avisos importantes para os colaboradores da empresa. Essa dificuldade ocorria, principalmente, com os times de desenvolvimento de software. Esse time se sentia desmotivado e tinha a sensação de que não era valorizado pelos colegas, pois sempre ouvia reclamações da prestação de serviços que estava realizando.

Ao saber dessa história, eu trabalhei com uma dinâmica onde os integrantes do time poderiam validar as dificuldades e qualidade utilizada na comunicação efetuada por eles.

Adaptei a dinâmica da tartaruga, baseada na Metodologia LEGO® SERIOUS PLAY®, onde o time percebeu primeiramente a existência de diversos fatores que interferem em sua comunicação e nos relacionamentos, como ruídos, falta de clareza na emissão ou recepção da informação e/ou a falta de validação dessa comunicação. Leia mais

O porquê de escolher a área de Teste de Software como carreira

Existem alguns MITOS referentes à escolha da área de Teste de Software como carreira, tais como:

  • Qualquer pessoa pode testar;
  • A área de Desenvolvimento é melhor que a área de Teste;
  • Os salários dos Testadores serão menores do que os dos Desenvolvedores;
  • Somente as pessoas que não gostam ou não sabem programar escolhem a carreira de Testes;
  • Não haverá crescimento profissional nessa área.

Eis as DESMISTIFICAÇÕES para os itens acima:

  • Nem todos podem testar. É necessário ter paciência, uma boa capacidade analítica e de comunicação para reportar incidente, para então se tornar um testador de software, além de ser observador, curioso, atento aos detalhes, criativo, etc;
  • O salário de Testador pode ser menor quando inicia-se nessa carreira. Porém, testadores experientes estão ganhando o mesmo nível em comparação com os Desenvolvedores, principalmente os Testadores especializados em Automação;
  • Não somente pessoas que não gostam ou não sabem programar escolhem a carreira de Testes. Existem automatizadores e esses escrevem código para automatizar os scripts de testes;
  • Há crescimento profissional na área de testes. Um Testador pode se tornar Líder de Teste, Líder de Projeto, Arquiteto de Automação, Gerente de Teste, etc, ou seja, assim como em outras áreas, nessa também pode-se crescer profissionalmente e chegar ao nível de gestão.

 

Leia mais

O que é Machine Learning e como funciona

Dirigir, investir, detectar fraudes, classificar doenças e criar medicamentos. Há pouco tempo essas atividades eram feitas somente por seres humanos. Hoje, com o desenvolvimento de técnicas de aprendizado de máquina (machine learning), podemos ensinar sistemas a executá-las com precisão igual – ou superior – a nossa.

Machine learning usa algoritmos para entender o modelo (a lógica, o padrão) que dá origem a um conjunto de dados para conseguir prever ou classificar novos valores.

A programação tradicional baseia-se em definir cada etapa que o programa deve executar para obter um resultado. Com machine learning, a ideia é fazer com que ele aprenda os passos necessários para isto.

A grande vantagem ocorre quando trabalhamos com problemas complexos, onde o algoritmo não é bem definido. Como identificar pessoas em uma foto. É muito difícil escrever um programa que faça isto bem feito, pois a variedade de cenários possíveis é muito grande. Existe uma infinidade de poses, locais, ângulos, iluminação e cores em uma foto. Preparar um algoritmo para trabalhar com todos estes cenários é muito trabalhoso. Com machine learning podemos ensinar o computador a fazer esta tarefa sem programar o passo a passo, apenas ensinando com base em exemplos.

Podemos separar os algoritmos de machine learning conforme seu tipo de aprendizagem, ou seja, a forma como aprendem.

Leia mais

Minha empresa não tem um propósito para transformar o mundo. E daí?

Hoje está na moda toda empresa ter um propósito gigante, tipo o da Google: “Organizar as informações do mundo!”. Do contrário, você está por fora. Mais que isso: não vai ter sucesso porque não conseguirá contratar pessoas leais a esse propósito, não conseguirá engajar pessoas nessa missão e nem definir metas “moonshot” (aquelas metas dos sonhos que engajam todo mundo, por mais que não sejam atingidas). Ou seja, a empresa está condenada a ser uma empresa mediana, pequena. Não é exponencial e será difícil alcançar sucesso.

Não tenho nada contra, pelo contrário, tenho muito a favor de quem conseguiu encontrar esse propósito. Não somente para efeito de marketing, mas porque ele é real e profundo. Torna público e engaja pessoas com ele.

O que sou contra é juntar um monte de executivos em uma sala, em um planejamento estratégico, e obrigá-los a sair no final do dia com um propósito definido.

Leia mais

Lightning Talk – Docker Swarm e Traefik

Você conhece o Docker Swarm e o Traefik? São muito úteis para quem trabalha no ambiente de produção ou homologação, e sabe o quanto é sofrido lidar com a perda de uma máquina: horas de trabalho pelo ralo, e mais várias outras para conseguir atualizar todos os serviços, arrumar os IPs, e por aí vai. Containers como o Docker estão aí para evitar esse tipo de situação.

Docker? O que é isso?

Antes de falarmos de Docker Swarm, é importante que você saiba o que é o Docker por si só.

O Docker possibilita ambientes isolados e de fácil portabilidade: você configura um ambiente dentro de um container e pode transferir para qualquer outra máquina, ou ambiente, onde o Docker esteja instalado. É um grande aliado para quem busca resiliência: um ambiente sempre voltando ao estado normal, superando falhas de serviço ou de máquina. Se você precisa entender mais a fundo como funciona um container, aqui no blog da DB1 já trouxemos uma explicação completa sobre o conceito de Container, DockerFile e Docker Compose.

Agora, vamos para o Docker Swarm!

A partir do momento em que você possui o Docker instalado nas máquinas, o Docker Swarm te ajudará a gerenciar e orquestrar todas elas em modo de Cluster. Leia mais