segunda-feira, 18 de janeiro de 2021

Iniciando com o Kafka

 Atualmente podemos encontrar alguns problema comuns nas integrações entre sistemas. Por exemplo, se possuir três sistemas produzindo informações e três consumindo, você precisaria escrever nove integrações diferentes. E cada integração por si traz suas dificuldades, como o protocolo (TCP, HTTP, REST, SOAP, JDBC), formato (Binário, CSV, TXT, JSON, XML...), schema e evolução dos dados. Além de que cada sistema de destino receberá cada vez mais conexões. 


O Kafka centralizaria essas mensagens, ele é uma plataforma de streaming de dados, que permite publicar e subscrever os streams de registros, como uma fila. Ele armazena os streams de forma durável e tolerante a falhas, e processa os streams na medida em que ocorrem.


Usado basicamente para construção de sistemas onde a comunicação entre eles ocorre em tempo real, para construir sistemas que transformam ou reagem ao fluxo de dados.

Conceitos chaves
  • Para cada necessidade de comunicação criamos um tópico diferente;
  • As mensagens permanecem armazenadas mesmo apos terem sido consumidas, podendo ser lidas novamente por outros interessados;
  • O kafka armazena bytes. Tanto faz se iremos armazenar um JSON, um array de bytes ou qualquer outra coisa. Não há qualquer tratamento no payload, para otimizar a performance;

Tópicos, partições e offsets

Tópico é a unidade principal de um apache kafka: é uma fila de dados, similar a uma tabela em um banco de dados, onde você guarda registro com a mesma estrutura e eles são armazenados de forma sequencial. Você pode criar quantos tópicos desejar, um para cada necessidade, além disso ele é  definido pelo seu nome, que será utilizado para enviar ou receber dados;

Os tópicos são subdivididos em partições. No momento em que você cria um tópico você define quantas partições ele vai ter. Cada nova mensagem é inserida de forma ordenada, dentro da partição (por padrão o kafka define uma unica partição, mas isso não é o recomendado). 


Cada partição tem um identificador incremental, chamado offset, é um identificador único de cada mensagem dentro de cada partição de um tópico, similar a um marcador de onde você parou de consumir os dados daquela partição daquele tópico, e é gerenciado pelo próprio kafka. E cada consumidor controla seus próprios offsets a medida que consome os dados. Normalmente o consumo ocorre de forma linear, mas o consumidor pode retroceder ou avançar a posição atual, para reprocessar dados ou passar a consumir os dados a partir de determinado ponto. 

Produtores e consumidores





quinta-feira, 23 de maio de 2019

Gamification

Gamification, vem invadindo ambientes corporativos e transformando objetivos e tarefas do dia-a-dia em atividades lúdicas e atrativas.

No Brasil, esse termo já foi aportuguesado e é conhecido como gamificação, a arte de aplicar elementos de games em um contexto que não é um jogo.

Segundo a Bunchball, “Gamificação é o processo de pegar algo que já existe – como um website, uma aplicação corporativa, uma comunidade on-line – e integrá-la com mecânicas de jogo com o intuito de motivar participação, engajamento e fidelidade. A gamificação aplica técnicas orientadas à informação que os designers de jogo utilizam para engajar jogadores, e as aplica em experiências que não são jogos, motivando ações que agregam valor ao negócio”.

O termo “gamificar”, no entanto, tem origem nos anos 1980, quando Richard Bartle, professor da Universidade de Essex, o utilizou para definir o processo de “tornar algo que não é um jogo em um jogo”. Entretanto, foi somente em 2010 que o termo se tornou largamente adotado no contexto tratado aqui.

Mas ai vem a pergunta: Por que gamificar?
Aplicar componentes de um jogo em um processo de trabalho ou de relacionamento com o cliente tem como objetivo o engajamento dos participantes, cujo envolvimento deve ser voluntário – jogar é, portanto, aceitar voluntariamente as regras.
Elementos como caráter lúdico, colaboração, competitividade e reconhecimento devem motivar o participante a agir da maneira planejada.

Existem três grandes categorias nas quais a implementação da gamificação pode agregar grande valor.

Gamificação Externa
Trata-se da aplicabilidade externa à organização, sendo assim destinada geralmente aos atuais ou futuros consumidores. É possível ter bons resultados utilizando-a em contexto de vendas, marketing ou quando há necessidade de engajar consumidores por outra razão, como cultivar lealdade ou identificação com o produto.
Uma gamificação externa pode contar com toda a infraestrutura e as metodologias modernas de marketing, sendo uma aliada poderosa para a motivação do consumidor.

Gamificação Interna
Em situações como essa, as empresas usam a gamificação para melhorar a produtividade ou estreitar laços dentro da própria organização, envolvendo, portanto, funcionários e colaboradores. Pode-se incluir aqui o crowdsourcing, que seria o uso de recursos voluntários em grande quantidade (ou “multidão”), dividindo uma grande tarefa em partes menores que serão feitas por essas pessoas. Obtêm-se bons resultados em treinamentos de recursos humanos e melhorias de produtividade em algumas tarefas.
As empresas devem levar em consideração que, no ambiente corporativo, os funcionários já fazem parte de uma comunidade: a organização em si. Os interesses deles devem girar, portanto, em torno dessa comunidade. É importante também que as dinâmicas motivacionais desse modelo estejam alinhadas com a gestão interna da própria companhia.

Mudança Comportamental
As empresas devem levar em consideração que, no ambiente corporativo, os funcionários já fazem parte de uma comunidade: a organização em si. Os interesses deles devem girar, portanto, em torno dessa comunidade. É importante também que as dinâmicas motivacionais desse modelo estejam alinhadas com a gestão interna da própria companhia.

Mas será que a Gamificação é eficaz? 
Bom, temos muitos casos de sucesso. Como o Stack overflow: fórum técnico automoderado, Duolingo, Foursquare, Waze, Linkedin, Superbetter,World Without Oil, Foldit e o Microsoft Language Quality Game.

O verdadeiro mérito da gamificação é mostrar o propósito da realização da tarefa e mostrar que o participante é competente para realizá-lo – ou, se não for, por que não criar mecanismos para torná-lo capaz? A Gamificação não é exatamente uma novidade. Há indícios de implementação de competições em pirâmides do Egito, além de estudos realizados há décadas a respeito de motivação humana. A verdade é que esses elementos estão presentes em abundância nos jogos, e é por isso que gostamos tanto deles.
Embora o uso da gamificação não seja garantia de sucesso – os elementos devem ser escolhidos com cuidado, implementados em processos que realmente signifiquem alguma coisa – a implementação dessas mecânicas pode gerar o engajamento e a motivação esperados de nossos usuários além de muitas vezes ajudar até na criação de novos hábitos. 

Agora que você já sabe o que é gamification e para que essa prática serve, tente aplicá-la na sua empresa, e tornar seu dia a dia mais divertido e motivador. 

Acessibilidade web - OpenDyslexic

Acabei de concluir um curso de acessibilidade web. E vou compartilhar com vocês algumas coisas bem legais. Uma delas é o OpenDyslexic, é um tipo de letra projetada contra alguns sintomas comuns da dislexia. E você pode baixar gratuitamente, e ainda tem a licença para fazer o uso pessoal, uso comercial, educação, comercial, livros, leitores de ebook, aplicativos, sites e qualquer outro projeto ou propósito que você precisar. Para você ter uma ideia da importância dessa fonte, esse site: https://geon.github.io/programming/2016/03/03/dsxyliea simula como uma pessoa com dislexia vê, é bem interessante. Você pode baixar a fonte aqui: https://opendyslexic.org

quarta-feira, 28 de fevereiro de 2018

Apache Camel

Resultado de imagem para Apache Camel logo


Apache Camel é um framework de integração que ajuda a diminuir a complexidade e o impacto dessas integrações. Como um framework de integração, seguimos boas práticas que foram identificadas e descritas nos padrões de integração.

Em vez de escrever manualmente o código de integração, usaremos componentes para isso, que podemos facilmente configurar com o Camel. Essas configurações são feitas na rota (routing engine). Ou seja, o Camel não implementa os padrões como SOAP e WSDL ele apenas configuram o componente que trabalha com isso.

O desenvolvedor principal do Camel, Claus Ibsen, descreveu o Camel da seguinte maneira:

Apache Camel é um framework Java de código aberto que tenta deixar a integração mais simples e acessível para todos os desenvolvedores. Ele faz isso através de:


  • Implementações concretas dos padrões de integração (EIP)
  • Conectividade com uma grande variedade de protocolos e APIs
  • Uso de uma Domain Specific Languages (DSLs) para amarrar os EIPs e protocolos]
Segundo os autores do framework, o significado de Camel é: - Concise - Application - Message - Exchange - Language.

Roteamento entre endpoints com Apache Camel

Essencialmente, Camel é um roteador (routing engine), ou seja o Camel roteia os dados entre dois endpoints. Um endpoint é um serviço web ou um banco de dados, podendo ser um arquivo ou file JMS. Em geral, é um ponto onde pegamos ou enviamos dados. A tarefa do desenvolvedor é configurar, por meio de um Builder, os endpoints e as regras de roteamento. O desenvolvedor decide de onde vem as mensagens (from()), para onde enviar (to()) e o que fazer com a mensagem no meio desse processo (mediation engine).

domingo, 11 de junho de 2017

Como criar uma Extensão para o Google Chrome

Projeto simples, para criar uma Extensão para o Google Chrome

  • O arquivo manifest.json

Todos os projetos que você criar tem que ter o arquivo manifest.json na pasta raiz do mesmo. Esse arquivo não é nada mais que um JSON, onde ficarão as informações relacionadas à sua extensão: nome da extensão, descrição, versão, permissões, etc. Tudo que você pode incluir no manifest.json, você encontra aqui nesse link.

Para nossa primeira extensão, vamos usar as seguintes informações:

As informações obrigatórias são somente o manifest_version, name e version, onde:

manifest_version: Representa a versão do manifesto que você está usando. Hoje (junho/2011), é obrigatório usar a versão 2;
name: Representa o nome da sua extensão;
version: Representa a versão da sua extensão. A versão deve ser separada por pontos.

As informações adicionais sobre nossa extensão Hello World presentes no nosso manifesto são:

description: É uma descrição para nossa extensão;
browser_action: Representa ações que executaremos no navegador. Para nosso exemplo, iremos apenas apresentar um popup quando o usuário clicar na extensão;
default_popup: Informa qual HTML o navegador deve carregar quando o usuário clicar no ícone da extensão.
icons: Representa todos os ícones que sua extensão irá utilizar.


  • POPUP

Para servir de popup da extensão, use a seguinte página HTML simples abaixo, chamada index.html (ou crie uma página sua, com o mesmo nome):
Essa pagina será exibida quando o usuário clicar no ícone da nossa extensão.

  • Ícone
Você pode usar qualquer ícone que desejar, no tamanho:  16 pixels. E salvar na pasta images do projeto. Se quiser usar a mesma que eu só copiar daqui: Icone. Quando você for publicar sua extensão, é recomendado que você tenha ao menos o tamanho de ícone em 128x128px. Se possível, passe todos os tamanhos pedidos (16x16, 48x48, 128x128), pois o Chrome irá selecionar o que for mais apropriado para o momento que ele precisar ser apresentado.
  • CSS
Dentro da pasta CSS, você colocar o seu arquivo style.css onde você pode customizar da maneira que desejar. 
  • Testando sua Extensão
Testar a extensão é bem simples, basta abrir seu Google Chrome e navegar até Menu > Mais ferramentas > Extensões.

Na página de extensões, habilite o modo desenvolvedor, clicando na caixa de seleção:

Clique em Carregar extensão expandida:
Na janela que abrir, escolha a pasta onde está seu projeto. E pronto, a extensão foi instalada! Se você reparar vai aparecer um registro novo com as informações da nossa extensão e o ícone dela já está disponível ao lado da barra de endereços.
Para testar, basta clicar no ícone da extensão:
Pronto! Agora você já pode começar a brincar e colocar mais funcionalidade na sua Extensão. O projeto completo pode ser baixado no Github: Extensão para o Google Chrome.

quinta-feira, 23 de março de 2017

Webinar introdutório para aprender o básico e começar com a AWS


Segunda feira, 27 de Março, vai ter um Webinar "how-to" para aprender o básico para começar com a AWS. Depois de uma breve visão geral, esta sessão irá mergulhar em discussões de serviços AWS básicos, como os servidores virtuais (Amazon EC2) e o armazenamento escalável em nuvem (Amazon S3), e fornecerá demonstrações de como configurar e utilizar esses serviços.

Objetivos:

  • Entender as melhores práticas para começar a utilizar a nuvem da AWS
  • Aprender a construir aplicações eficientes e confiáveis
  • Conhecer mais sobre segurança, administração de contas e acesso
  • Saber mais sobre otimização de custos e utilização das zonas de disponibilidade

Meetup Java São Paulo

Mais um Meetup Java São Paulo. Hoje às 19h30 na Caelum - Ensino e Inovação, perto do Metrô Vila Mariana.

Agenda:

  • 19h30 - Análise de qualidade de código com Sonar - Fernando Boaglio
  • 20h30 - Coffee break / Networking!
  • 20h45 - 5 técnicas para acelerar o desenvolvimento e reduzir bugs em aplicações web - Rafael Chinelato Del Nero

Local: Rua Vergueiro, 3185 - Segundo andar

Confirmar presença em https://www.meetup.com/pt-BR/Sao-Paulo-Java-Meetup