Spending time planning a perfect pre-launch stage

The recent rocket launch Falcon Heavy taught World the importance of get everything ready and well tested before press the launch button, because after it, there is no going back. And even if you have the best and well payed engineers, fail is a part of the process, like the fail of third rocket in getting back to soil.

We are a small and lean startup, but for us, our rocket’s have as many technology as Falcon 9, and it is even more important to us then any other rock lauch. We are focusing so much effort in testing and getting early feedback as we can, it is a hard and tedious task, nobody want to do it for many time and we are waiting for lauching for so long, since 2010, that maybe the anxiety was something to be care of nowadays.

We are not in a technology rush (for while) with any competitors, since we dont even have market yets, we dont care about market growth, we only focus on make the best technology for our target public, getting feedback on early stages and having many ways to get it.

So in our blog it is possible to see how many posts talking about launch expectations, as we get closer and closer to launch we also getting huge priorities shifting. But the official release of our first USA & Global product, with massive marketing campaign, will be near at the end of the year, before many tests in Brazilian market.

Nova Ferramenta Para Controle de Volume Com Interface Amigável

Quando vou fazer novas ferramentas e funções de código, se preciso desenvolver uma parte nova da interface, procuro sempre por seguir minha intuição no sentido de tentar prover a melhor usabilidade possível entre dispositivos e níveis de usuários. Fazer uma interface com elementos que o usuário já é habituado a usar, como barras deslizantes, facilita o aprendizado do programa e permitindo ao usuário desfrutar de maior potencial do sistema.

Então quando a tarefa de ligar/desligar o som do sistema se tornou prioridade, não optei pelo caminho fácil de fazer um simples input do tipo checkbox, onde bastaria deixar selecionado para dar mute e des-selecionar para retornar o áudio. Não deixa de ser uma excelente e compacta solução, porém optei por utilizar uma barra deslizante, assim o usuário pode escolher qualquer valor entre 0 e 100 para o volume de forma amigável, para desligar basta posicionar a barra no 0, não é necessário checkbox. O trabalho de uma hora levaria então um dia, mas por dificuldade adicionais.

Tudo poderia ser mais fácil se eu já tivesse implementado uma barra destas anteriormente, precisei me atualizar muito sobre as tecnologias disponíveis, até mesmo seu nome em inglês eu desconhecia, range bar. Descobri também que o HTML5 possui suporte nativo para isto e achei uma biblioteca JavaScript RangeSlider.js para renderizar o elemento em navegadores antigos e sem suporte, como IE8.

E lógico que tudo poderia terminar por aqui, mas queria levar o teste ao extremo e descobri vários serviços pagos na internet para simular navegadores antigos, dispondo de orçamento zero e com algum tempo para investir, pude atualizar meu wine e winetricks, instalando a versão ubuntu/linux nativa do IE8. Porém este teste ficou para um segundo momento, já que é “impossível” debugar JavaScript neste navegador e o resultado é que o Pomodoros não funciona (ainda) em IE8, tentei instalar o debugbar mas acho que só pelo VirtualBox ou dual boot, portanto outro momento.

Além disto utilizei ícones bootstrap glyphicons e assim dispensei o uso de rótulos para som desligado e som no máximo volume, as indicações são feitas pelos ícones, que de “bater o olho” já são entendidos rapidamente pelo usuário. Com o sistema de grid do bootstrap inseri uma linha com configuração 1-10-1 para um ícone em cada ponta da barra. Assim o usuário enxerga ícone (som desligado) – barra – ícone (som ligado).

Uma dificuldade adicional era salvar o estado desta opção, cada usuário quer regular a altura do som de forma personalizada, assim (obviamente) se eu abaixar o som do meu aplicativo, isto não pode afetar a configuração dos outros usuários. A opção foi adotar rapidamente o update_user_meta() e get_user_meta(), com o current_user_id(), funções nativas do WordPress, embarcando o envio e recebimento destas informações em uma função já existente, que armazena os dados da interface no banco de dados via AJAX, a cada 15 segundos.

Por último os testes no Android 4.3 estavam me desanimando, não só não funcionou inicialmente, como quebrou o aplicativo que já estava no ar. Em um ambiente de testes isso é necessário, mas gostaria de terminar esta tarefa com tudo funcionando perfeitamente, assim precisei voltar para a prancheta e refazer vários trechos do código para não ter nenhum problema, um stress extra.

Pretendo fazer um vídeo ensinando a debugar JavaScript no Chrome do Android, para isto precisa-se conectar por adb (talvez seja necessário root), um emulador de terminal no celular e configurar o serviço para conexão remota. No computador, após instar o abd (apt-get install adb), conecta-se de forma remota e abre o Chrome, tanto no celular quanto no computador, em ferramentas de desenvolvedor você poderã abrir a aba do celular no computador e sua vida vai ficar muito mais fácil (após tanta dificuldade rs).

Este momento de testes ficou registrado como a imagem de miniatura deste post, momento onde consegui enfim terminar os testes e lançar no ar esta nova ferramenta de configuração do volume, muitas dificuldades para a biblioteca Artyom.js, já que ainda não 100% suportada e tanto no Firefox, quanto no Chrome apresenta comportamentos diferentes, algumas coisas funcionando melhor no segundo, mas por incrível que pareça o melhor desempenho para fala e audição é o Android.

Não sei se para o público no geral era prioritário configurar o volume, mas para mim, desenvolvedor, precisava urgente de uma forma de testar rapidamente o sistema sem as constantes falas e sons, que, se repetidos a exaustão podem ser mais torturantes do que uma torneira pingando gotas na cabeça de um refém.

Mais um Pequeno Bug Corrigido do Sistema Pomodoros/Focalizador

Um pequeno bug vinha me incomodando desde o lançamento do Pomodoros, que era em alguns casos o sistema continuava funcionando mesmo “quebrado”, em termos técnicos, quando o cookie que mantém o usuário logado no site era deletado o sistema não redirecionava para o usuário refazer o login.

Uma situação típica era do usuário que entrava no sistema, mas por algum motivo perdia a conexão, seja pela validade do cookie, seja por questões de segurança, entre outras situações que podem exigir que o usuário refaça o login, e o mesmo “bugava”, o usuário não percebia mas estava perdendo seu progresso, pois não estava pronto para este tipo de situação.

Assim, se o usuário continuasse usando o sistema “quebrado”, pomodoros sem nomes e autores continuavam sendo publicado, em alguns casos resultavam em vários pomodoros “perdidos”. Como sou administrador do sistema podia entrar pelo back-end e corrigir, mas os usuários via de regra perdiam parte do progresso, viam seus suados pomodoros atribuídos a ninguém, como se algum usuário sem conta tivesse feito.

Então, após muitos anos, tive tempo para corrigir esse bug, já que agora, após alguns meses no ar, além de mim, tenho uma outra usuária retornando a utilizar fortemente o pomodoros, assim preciso garantir desde já um uso suave e sem problemas. Agora, se o usuário perder o cookie, via AJAX o sistema recebe uma mensagem e então redireciona o usuário para que o mesmo possa logar de novo.

Login Com Facebook e Google: Rede Fnetwork Conectada

Em 2016 iniciei o projeto da FNetwork, foi um retrocesso em muitos termos, o primeiro passo foi unificar todos os usuários de vários projetos num banco de dados único. Para isso todos os sites foram desativados por meses, após conseguir essa unificação tinha disponível somente o formulário padrão de registro do wordpress em cada projeto.

Os usuários do Pomodoros já utilizam de forma “pesada” a integração com o Facebook, sempre soube da importância de se deixar pronto esta integração novamente, mas de que adiantaria apenas um site conectado com o Facebook? Um usuário que logar com o Facebook no Pomodoros terá acesso a todos os nossos serviços, atuais e futuros.

Parte Técnica: Plugin wp-social-login (fork)

Fazemos aqui uma indicação deste excelente plugin para fazer login com redes sociais, nós avaliamos como 5 estrelas no diretório do WordPress. Existe serviços de terceiros que são oferecidos para isso, integração de  sites com redes sociais, com altos custos, basta você pesquisar no Google para perceber que este é um novo filão.

Mas os criadores deste plugin se mantiveram “raíz”, permitindo aos próprios usuários configurarem seus domínios para se conectarem diretamente com os servidores das redes sociais. Ao final, quando tudo corretamente configurado, o usuário clica em um botão e se torna um membro registrado do site.

Como utilizamos uma configuração especial com uso intenso da pasta mu-plugins, já que plugins que são colocados nesta pasta são automaticamente ativados/desativados pelo WordPress. Assim não precisamos entrar no painel, porém, a maioria dos plugins exige uma configuração inicial mínima, por isso fazemos forks de vários plugins, adicionando scripts que se auto-configuram para cada domínio.

Graças a API do Google e Facebook ficou muito fácil configurar vários domínios, já que o mesmo aplicativo permite diversas URLs de retorno. Assim agora temos configurado para nossos domínios o login do Facebook e Google. Com isto esperamos aumentar (e muito) (e muito rápido) nossa base de usuários.

Nova Ferramenta de Seleção de Etiquetas de Projetos Facilita a Escolha do Projeto

O Pomodoros está passando por uma rodada de melhorias e “de repente” muitas novidades começaram a surgir, porém todas estas novidades estão sendo planejadas há anos, como a mais recente instalação de uma nova ferramenta para a seleção das tags ou etiquetas de projeto.

Primeiro entenda o conceito de “etiqueta do projeto”, uma tarefa ou pomodoro pode ser etiquetada, assim, dentro do Pomodoros os projetos são representado por tags ou etiquetas, assim várias tarefas compartilham a mesma tag e assim, esta tag representa o projeto, onde basta realizar um pomodoro com a tag do projeto para o mesmo contabilizar o tempo automaticamente no relatório.

Select2: A Biblioteca de JavaScript

A ferramenta implementada chama-se Select2, é de código-aberto e muito usada por agilizar a criação de um sistema de etiquetas. Assim um campo de HTML do tipo SELECT se transforma “como mágica” num sistema de tags como da imagem ao topo desta publicação.

Este sistema de tags é usual em muitas interfaces e é como se o usuários “já soubesse” usar e rapidamente entenderia seu funcionamento. Dentro do sistema pomodoros foram feitas diversas funções para que a integração pudesse funcionar dentro do sistema de tags do custom post type, com ferramentas padrão do WordPress e AJAX, integrados sempre com o nosso custom plugin F5 Sites Shared Post Types.

Assim agora os usuários terão um salto de qualidade na usabilidade, facilitando o uso intenso da ferramenta, aumentando o poder do usuário e tornando o app mais preparado para o uso em situações reais de trabalho e projetos realmente complexos. Para quem usa o app em celular com telas pequenas o ganho foi ainda maior, ficando muito fácil escolher as tags dos projetos, além de evitar digitar errado e criar dois projetos com o mesmo nome, já que escolhendo as tags prontas não corre esse risco.

Pomodoros Nova Tela de Visualização de Tarefas

Ao utilizar o WordPress o desenvolvimento do sistema pode ser mais rápido, no sentido em que é possível chegar a um MVP mais rapidamente, mas isso por si não significa muita coisa.

Em outros termos podemos pensar que já vem muita coisa pronta e semi-pronta no WordPress, então “menos” é preciso ser feito para o sistema “parar de pé”, aqui os termos em aspas pois representam estágios e esforços fictícios.

No caso da tela de visualização de tarefa antiga o que tinha era herança do WordPress, era simplesmente a página padrão de visualização de post, assim utilizando essa solução provisória (por 7 anos rs) pude concentrar esforços em outras partes do sistema.

Agora no estágio de fechamento e documentação, todas estes detalhes estão sendo revistos para poderem ser incorporados na próxima versão final do sistema, onde outros programadores poderão entrar para a equipe e contribuir com o projeto.

Novidades

Nesta nova tela é possível ver os detalhes do pomodoro de uma forma mais organizada, ao topo a imagem do autor, o título da tarefa e o nome do realizador.

Abaixo temos uma seção com os detalhes do pomodoro e os projetos que ele pertence. Os detalhes dos pomodoros são diferentes dos detalhes da tarefa, a última seção, logo abaixo da tela.

A tarefa soma todos os pomodoros com o mesmo título, se você fizer dois pomodoros para a tarefa “escrever post” a tarefa ira mostrar a duração de 1h e o total de 2 pomodoros. Observe que o pomodoro pode ter anotações diferentes, mas os detalhes das tarefas são sempre iguais para qualquer pomodoro com o mesmo título.

Atenção grandes empresas: Documentação do Pomodoros em estágio avançado de conclusão

Foi-se priorizado “subitamente” a criação da documentação para assim poder finalmente entrar em um período de estabilidade de uma versão nova do software, o chamado Pomodoros Black, novo momento do site www.pomodoros.com.br.

Assim a documentação puxou uma série de melhorias “bruscas” no código, para acompanhar a documentação foi-se revisto quase que todo o código do projeto e como prioridade absoluta foi-se removido todos os comentários, excluindo assim muitas linhas de código antigas.

A dificuldade na remoção era porque os comentários misturavam no código as ideias de funcionalidades, misturando planejamento e produção, foram todas retiradas e catalogadas no nosso sistema de controle de novas funcionalidades e bugs.

O código ficou mais leve e ao se documentar também acabei percebendo muitas oportunidades de melhorias imediatas, como simplificação de comandos e redução de lógica redundante. Assim páginas php com dezenas de linhas de códigos foram reduzidas a poucas linha.

Uma nova estrutura exigiu grandes mudanças, assim cada parte de código quando revista era renomeada e o que “ficou para trás” podia então ser excluído. No decorrer do processo também foram otimizados e atualizado os comandos de WordPress, para os mais recentes e adequados para cada cenário.

Ao se fazer a navegação também tive a oportunidade de rever cada página e fazer as pequenas correções que cada uma exigia. Assim a documentação trouxe muito mais qualidade para o usuário e o software final.

Por que documentar?

Vários projetos existem sem documentação, dependendo do estágio e objetivo do projeto a documentação pode ser considerada uma tarefa desnecessária, que consome muitos recursos, principalmente em situação de muitas mudanças, pois o custo de se adequar a documentação a cada mudança implica em prejuízo no desenvolvimento.

Assim, o projeto Pomodoros foi feito a “queima roupa”, com um planejamento mutante, que se transformava “a cada esquina”. Porém, após semanas e rodadas de decisões técnicas e estratégicas no final de 2017, a documentação passou a ter maior importância.

A nova documentação vai permitir uma manutenção mais precisa e eficaz no código, permitindo que programadores façam melhor uso do código e que grandes empresas possam olhar para o sistema com bons olhos.

Além de uma boa documentação grandes empresas exigem um bom suporte, então estas são as prioridades atuais do Pomodoros em termos técnicos, atingir rapidamente o mercado das grandes empresas e assim “puxar” uma série de inovações importantes para o futuro da plataforma.

Um agradecimento especial a todos os usuários históricos do sistema, desde o primeiro dia que entraram na plataforma, minha maior satisfação é saber que de alguma forma ajudei cada um a atingir seus objetivos pessoais, acadêmicos e profissionais.

F5 Sites Strategy For 2018: Expected Our First Product Release For USA and Europe

We are more than never focusing on USA and Europe market, there are tons of tests beside an official entrance. As a CEO I often repeat the same mistake, underestimate the time for long projects, I was expecting the first official F5 Sites products launches for 2017, but we did not released officially a single project, we focused more on IT infra-structure and primary code releases, and even exhaustive testing of new routines and process for backup and data synchronization in large data clusters.

I did not mean I did not worked well or I do not have capacity to preview, It just mean we must set some strategic milestones on initial planning, for products built up from zero it is impossible to address all uncertainties in the beginning.

For Brazilian market we make a great progress, besides it’s not our main focus, to make software in Portuguese, we just reprogrammed an old product, our principal product for Brazil in the period 2011-2015, the Pomodoros.com.br webapp. It is back online, after two years offline, but it is still in alpha stage, just for tests and costumers feedback, we will proceed in the next months with a small online campaign for getting new users and promote a donating campaign for support the project.

The webapp have an English version, but we will launch a different and much improved version for USA and Europe, a new software is being made, we started it in the last years and probably I will launch it in 2018, now we have well stabilized our servers and backup routines. That is why I am, in January 2018, thinking that this new year will finally be the most important year in F5 Sites history, our first Brazilian turtle is expecting to reach California sea or some Europe bay.

But some things can again late market entrance, we are passing trough our must difficulty founding moments, with few sources of founds and no costumers revenue, we are struggling in a mess state of priorities and expected that it become even more difficult for next months because of time-pressure. We are chasing the most relevant investors for the projects stages, it iss clear for me that the entrance of new interest parts can speed-up some parts of project, but in other hand it can rearrange our launch schedules.

O Ranking de Pomodoros voltou, entenda porque demorou tanto

O Ranking sempre foi umas das ferramentas mais “queridas” pelos os usuários, afinal, era para muitos a fonte de motivação, os mais ambiciosos disputavam a liderança e os estreantes também entravam na competição, tentando subir os primeiros degraus.

Dentro da visão de negócios o “ranking” aparece como parte de um inovador processo de gamificação (gamefication), após diversos estudos e análises, Francisco Matelli Matulovic, criador do aplicativo percebeu que existiam formas de transformar a experiência do usuário por meio de ferramentas e sistemas baseados em jogos.

Francisco que tentou produzir vários games entre os anos de 2004 e 2006, com várias demos jogáveis em Flash + PHP, nunca conseguiu os recursos necessários para finalizar e “empacotar” seus games. Porém com os conceitos bem definidos sobre usabilidade e jogos, quando produziu o pomodoros, uma ferramenta bastante séria, introduziu estes elementos.

Para os usuários mais antigos do site, ainda existia um sorteio de um Mp3 Player para quem chegasse a 1000 pomodoros, outro item que com certeza está próximo de voltar, teremos também muitos sorteios pela plataforma.

Novidades também vão surgir, o Pomodoros está aos poucos se tornando o que era no seu auge, quando tinha muitos usuários brigando pelo topo do ranking. Um agradecimento especial a Camila, uma antiga usuária que me contatou por email e perguntou se o projeto estava no ar de novo, antes mesmo de eu divulgar, visitou o endereço por conta própria.

Em suas considerações relatou que teve dificuldade em me contatar, por isso mesmo agora já tem um ícone do WhatsApp, a direita da tela, em todo o momento, basta clicar para iniciar um contato. Após recuperar seu usuário e seus pomodoros ela completa dizendo sentir falta do ranking, em homenagem a ela estou agora anunciando: o ranking voltou!

Entenda porque demorou tanto

A segunda parte deste post é bastante técnica, refere-se a programação e banco de dados. O projeto Pomodoros.com.br, após seu auge em 2013 e 2014, havia sido quase abandonado durante meu curso de mestrado. Devido aos custos, em 2016 era quase inviável manter muitos sites no ar, muitas reformas foram feitas e migrações para servidores mais em conta.

Então, no final de 2016 eu comecei a re-programar projetos antigos, porém, logo de cara percebi que precisaria inicialmente refazer o processo de criação, não dava mais para administrar tantos projetos sem algumas integrações e melhorias nas práticas. Foram meses para unificar a base de usuários de todos os projetos, criando uma conta única para ter acesso a muito serviços, o que chamei de Fnetwork, conheça mais sobre esta iniciativa.

Após centralizar os usuários tive uma segunda ideia, que acabaria novamente por atrasar todos os projetos, unificar todos os blogs e compartilhar os mesmos posts, publicando em vários domínios de maneira centralizada. Com certeza o desafio era enorme, pude testar várias formas e muitos plugins, nada parecia funcionar e então criei meu próprio plugin, conheça mais sobre o F5 Sites Shared Posts & Taxonomies, após exaustivos meses na incerteza, o resultado final foi satisfatório e agora tenho muitos domínios nesta rede.

Neste momento estou usando esta plataforma unificada para escrever este post no blog do Pomodoros, o mesmo post também aparecerá no site da F5 Sites Brasil. Era então chegada a hora de trabalhar no Pomodoros, foi quando me deparei com um banco de dados muito bagunçado, os projetos foram “jogados” lá quando unificados, havia muita informação desnecessária e duplicada, foram semanas “escovando” tudo, de 100mb passou para 10mb comprimido, assim a rotina de backup ficaria muito mais econômica, rápida e fácil.

Então atrasei o Pomodoros novamente, eu já havia estourado  todos os prazos inimagináveis para relançar o aplicativo online, os usuários estavam cada vez mais distantes, é praxe do mercado saber que quanto antes fazer o lançamento, antes recuperaria os usuários e cresceria.

Mas uma terceira ideia exigiria novamente todo meu tempo, um software criado para agilizar a rotina de manuteção e sincronização de instância de banco de dados MySQL, formatado para operar com o modelo de dados do WordPress, assim por meses todos os recursos se concentravam novamente em um projeto interno, que não traria lucro a curto prazo e nem visibilidade e projeção grandes, para atender e agilizar o servidores da F5 Sites nasceu o F5 Sites WordPress MySQL Manager.

Assim tudo estava pronto, podia finalmente voltar a desenvolver novas ferramentas para o Pomodoros, em primeiro lugar de lista, como prioridade estava uma tarefa esperando por anos, lançar o blog.

Enfim o motivo do atraso para lançar o blog, pois desde a primeira versão do projeto Pomodoros, em 2011, que pode ser conferida aqui, para agilizar, eu fiz um tipo de gambiarra no código, tecnicamente não criei um post_type especial para o sistema, usei o padrão do WordPress, assim todas as ferramentas e widgets funcionaram sem necessidade de configurações e edições muito avançadas.

Contudo, ao usar uma “gambiarra”, o projeto acabou sofrendo sem seu blog. Durante este impasse optei por adiar o lançamento do blog e preservar o sistema funcionando, mas quando o sistema caiu e perdeu os usuários, pude re-trabalhar tudo com certa calma, de forma mais controlada, mas ainda com muitas preocupações, porém tentando não deixar arestas.

Assim, agora, dentro do blog terão muitas novidades e informativos, ranking da semana, sorteios, anúncios da plataforma, novidades do projeto, muita informação que antes estava perdida.

Logo após lançar o blog, pude me concentrar no Ranking, refazendo aquela “gambiarra” e deixando tudo da forma mais certa e dentro dos padrões WordPress. Então foram nos últimos dias somentes que trabalhei de fato no projeto Pomodoros, agora sim sendo novamente atualizado.[:en]O Ranking sempre foi umas das ferramentas mais “queridas” pelos os usuários, afinal, era para muitos a fonte de motivação, os mais ambiciosos disputavam a liderança e os estreantes também entravam na competição, tentando subir os primeiros degraus.

Dentro da visão de negócios o “ranking” aparece como parte de um inovador processo de gamificação (gamefication), após diversos estudos e análises, Francisco Matelli Matulovic, criador do aplicativo percebeu que existiam formas de transformar a experiência do usuário por meio de ferramentas e sistemas baseados em jogos.

Francisco que tentou produzir vários games entre os anos de 2004 e 2006, com várias demos jogáveis em Flash + PHP, nunca conseguiu os recursos necessários para finalizar e “empacotar” seus games. Porém com os conceitos bem definidos sobre usabilidade e jogos, quando produziu o pomodoros, uma ferramenta bastante séria, introduziu estes elementos.

Para os usuários mais antigos do site, ainda existia um sorteio de um Mp3 Player para quem chegasse a 1000 pomodoros, outro item que com certeza está próximo de voltar, teremos também muitos sorteios pela plataforma.

Novidades também vão surgir, o Pomodoros está aos poucos se tornando o que era no seu auge, quando tinha muitos usuários brigando pelo topo do ranking. Um agradecimento especial a Camila, uma antiga usuária que me contatou por email e perguntou se o projeto estava no ar de novo, antes mesmo de eu divulgar, visitou o endereço por conta própria.

Em suas considerações relatou que teve dificuldade em me contatar, por isso mesmo agora já tem um ícone do WhatsApp, a direita da tela, em todo o momento, basta clicar para iniciar um contato. Após recuperar seu usuário e seus pomodoros ela completa dizendo sentir falta do ranking, em homenagem a ela estou agora anunciando: o ranking voltou!

Contact us now

After putting our blogs and startups online, testing everything we was then ready to starting receive leads contacts for project development. We are growing up our service capacity, ramping up and scaling os customized customer service.

Putting contact forms on sites was an easy task years ago, but we are now surrounded by tons of bots, simple contact forms can receive a lot of spam, besides annoying it can make tedious for fast response receiving notifications of spams.

After testing the Google reCaptcha, with great results for spam control, we are moving for a new and simple solutions, Honey Pots, bots are dumb and putting an hide field for then is a trick way to prevent it. We are using 3 wordpress plugins for our contact form:

  • Contact Form 7
  • Contact Form 7 Honey Pot
  • Contact Form 7 Database
  • F5 Sites Bug & Correction Plugin

The last one was custom made to “unify” all contacts from multiple domains under the same table, now we can use the same contact form on multiple sites, speeding up development and launch of services, centralizing contacts from multiple sources.