Tuesday, July 28, 2015

Slack - O que é e formas de usar


1 - Índice
2 - Por que foi feito
3 - Como foi feito
4 - O que foi feito
5 - Exemplos de uso
5.1 - Integrando com sistemas suportados
5.2 - Implementando integração com novos sistemas
5.3 - Outgoing WebHooks e Comandos
6 - Conclusão

Com o crescente número de sistemas que utilizamos e assuntos que lidamos no dia-a-dia, passamos a distribuir as informações através de várias formas de comunicação,  e-mails, arquivos e documentos na nuvem. Essa distribuição prejudica a comunicação e eficiência geral da equipe.
O Slack permite que uma empresa/grupo de pessoas possa se comunicar de forma eficiente.

Algumas coisas que o Slack utiliza, para melhorar a eficiência da comunicação:

1 - Conversas por tópicos (canais)
2 - Filtro de notificações
3 - Integrações com outros sistemas
4 - Busca inteligente

Através da criação de canais, combinado com filtro de notificações e integração com outros sistemas, permite que um assunto seja visto de forma completa,  com acesso rápido a arquivos do Dropbox (só arrastar ou colar o link que ele já "entende"), arquivos do Google Docs e dezenas de outros sistemas.

Exemplos de uso

Nós da Martin.labs, trabalhamos com o desenvolvimento de software. Para gerir esse desenvolvimento, utilizamos um software chamado Jira.
Todos nossos projetos existem neste sistema. Nós usamos um "quadro" que resume tudo que deve ser feito até determinada data (um ciclo destes leva em média 2 semanas), e neste quadro, ficam coisas como "Design tela do mapa", "WS - Cadastro App".
Este sistema é ótimo e supri todas as nossas necessidades, porém, coisas como e-mail, Skype, Google Docs e Dropbox continuam sendo necessárias, principalmente para nos comunicarmos com pessoas de fora da empresa.
Em resumo, nossa comunicação era:
Jira para trabalho, Skype para conversas e dúvidas, E-mail para falar com o Cliente, Dropbox para arquivos, Google Docs para documentos compartilhados fora da empresa.

Não conseguia lembrar qual era aquele site importante, que eu mandei para um grupo ou pro meu colega. Não encontrava coisas que precisavam ser encontradas. As vezes era necessário buscar em todos sistemas para encontrar uma informação. A solução? Slack.

Integrando com sistemas suportados.

Para integrar com sistemas suportados pelo Slack, como Google Docs, Dropbox, JIRA e muitos outros, basta acessar seu Slack e ir em "Configure Integrations". Selecione o serviço que deseja integrar, e em alguns segundos você já terá tudo funcionando. É necessário autorizar o Slack a acessar seus arquivos (Dropbox, por exemplo).
Assim que você integrar com Dropbox, faça um pequeno teste, jogue um link do Dropbox em uma conversa e veja o que acontece :)

Integrando com novos sistemas -
Incoming WebHooks - Enviando informações para o Slack

Para seu sistema falar com Slack, é extremamente simples. Na maior parte dos casos, exige um mínimo de conhecimento em programação.
Para seu novo sistema poder falar com Slack, primeiro vamos criar a porta de entrada nas integrações do Slack.
Vá até Integrações, e procure por "Incoming Webhooks".  Adicione um novo hook e selecione o canal para onde as notificações serão enviadas.
A seguir, personalize um pouco a integração, alterando as propriedades como nome, descrição e ícone, e muito importante, salve a URL do hook.

O segredo do Slack, é que toda autenticação está embutida na URL gerada, você não precisa adicionar headers a requisição, OAuth 2.0, nada disso. Basta enviar a mensagem formatada para a URL e ela irá aparecer no Slack.
Um exemplo disso, é o nosso site. Anteriormente, todos contatos eram enviados para nosso servidor, que enviava para uma caixa de e-mail. Como era uma caixa de e-mail "alternativa",  as vezes levavam algumas horas até que detectássemos que algo havia chegado.
Alteramos para, invés de mandar e-mail, publicar em um canal do Slack utilizar Slack, e os ganhos foram instantâneos. Com um web-service muito simples, e pouquíssimas linhas de código, nosso site agora envia informações direto para nosso canal de atendimento do Slack, onde é visível para todos e ainda é possível conversar sobre o assunto.


O código para fazer isso é muito simples, basta enviar uma requisição POST, com um parâmetro chamado "payload".  Muito fácil de fazer.
Esta é a classe Java que nós utilizamos para enviar requisições para o Slack:

import com.goebl.david.Webb;
import com.google.gson.Gson;

/**
 *
 * @author ricardoprado
 */
public class SlackUtils {
    public void publicarEmCanal(String mensagem, String url){
        Webb webb = Webb.create();
        Gson gson = new Gson();
        Payload payload = new Payload(mensagem);
        webb.post(url).param("payload", gson.toJson(payload)).ensureSuccess().asVoid();
    }
}

class Payload{
 
    private String text;

    public Payload(String text) {
        this.text = text;
    }
 
}


Outgoing WebHooks e Comandos

As funções Outgoing Hooks e comandos são muito similares. Ambas permitem que o Slack notifique um sistema externo, a partir de uma instrução dada no Slack.
A principal diferença entre comandos e outgoing hooks, é que os comandos são pessoais, apenas você vê o resultado do seu comando, já os outgoing hooks, publicam resultados em um canal compartilhado.

Os comandos e os outgoing hooks funcionarão da mesma maneira: você digita uma palavra / frase e, ao detecta-la, o sistema irá acionar a URL que você configurou, enviando junto com o comando, todo o texto que foi digitado. É o seu papel, ao desenvolver a integração, "interpretar" o que foi enviado junto com a mensagem.
Exemplo:

'/CalcularTrajeto' e 'trajeto:' são respectivamente um comando e um trigger para outgoing hook.
Para usar essa função, a pessoa precisará digitar "trajeto: rua teodoro sampaio, 744, sp, até avenida Bartolomeu de Gusmão, 540, Santos, sp". Neste caso, o formato precisa ser este, caso contrário, o servidor não conseguirá interpretar os dados (cada um implementa da forma que achar melhor).

 public String calcularTrajeto(SlackIncomingPayload payload){
        String origemEscapada, destinoEscapado;
        String urlGoogle = "http://maps.googleapis.com/maps/api/directions/json";
        String[] origemDestino = payload.getText().split(" ate ");
        origemDestino[0] = origemDestino[0].replace(payload.getTrigger_word(), "");
     
        origemEscapada = origemDestino[0].replace(" ", "+");
        destinoEscapado = origemDestino[1].replace(" ", "+");
     
        Webb webb = Webb.create();
        Response<String> response = webb.get(urlGoogle)
                .param("origin", origemEscapada)
                .param("destination", destinoEscapado)
                .param("units", "metric")
                .ensureSuccess()
                .asString();
        GoogleMapObject mapObject = gson.fromJson(response.getBody(), GoogleMapObject.class);
     
        String texto = "Distância de " + origemDestino[0] + " até " + origemDestino[1] + " estimada em " + mapObject.routes.get(0).legs.get(0).distance.text;
        SlackOutgoingPayload payloadSaida = new SlackOutgoingPayload(texto);
        return gson.toJson(payloadSaida);
    }
 



Neste caso, não está trazendo muita utilidade, porém essa ferramenta pode ser utilizada para melhorar a eficiência de alguns processos, como enviar um e-mail ou fazer deploy de sua aplicação em um servidor de testes.


Conclusão

O Slack é uma poderosa ferramenta de comunicação de integração. Além de ter uma interface extremamente bem cuidada, uma grande atenção para os detalhes, a facilidade de integração com novos serviços e a disponibilidade de um ótimo plano gratuito torna o Slack uma ótima opção para qualquer grupo de pessoas que pretende melhorar sua eficiência e comunicação.
Não deixamos de utilizar nenhuma das ferramentas que utilizávamos antes, porém, passamos a obter um valor maior de cada uma delas.




Friday, July 3, 2015

Xamarin

O que é?

É uma ferramenta que possibilita criação de aplicativos NATIVOS para Android, iOS e Windows Phone.

O que é aplicativo nativo?

É aquele aplicativo que utiliza os componentes de hardware diretamente, ou seja, tem acesso a todas as funcionalidade de um dispositivo. Além disso, existem mais dois tipos de aplicativo que são: Híbrido e WebApp. WebApp na verdade é um site responsivo que simula um aplicativo, ou seja, quem irá interagir com os componentes de hardware é o navegador, então não possui total acesso as funcionalidades de um dispositivo, além disso como é o navegador que fará esse intermediário entre o hardware haverá uma perda de perfomance significativa. Por fim um aplicativo híbrido é aquele que utiliza ambos, normalmente é mais utilizada onde possui um local para exibir notícias que são recorrentes e que precisam ter uma estrutura diversificada e de fácil leitura dessas informações, porém para o restante do aplicativo é utilizado estrutura nativa.

Por que usar?

Porque possibilita que o core business seja único, toda requisição para Web, para o banco local e a regra do negócio será compartilhada entre as plataformas, assim não será necessário escrever diversas vezes os mesmos trechos de código em linguagem diferente em IDE separado. Isso também facilitará na hora de realizar os testes e alterações, pois como o código principal é único, não será necessário testar diversas vezes a mesma funcionalidade para plataforma diferente e só será preciso alterar em um só lugar. Assim torna o seu aplicativo mais homogêneo e menos chance de possuir bugs com fácil alteração para futuros updates.

E a IDE?

Eles possuem a próprio IDE "Xamarin Studio" é bastante parecida com Visual Studio, para quem possui o Mac não terá outra opção. Agora para aqueles que tem o Windows, além do Xamarin Studio você poderá utilizar o próprio Visual Studio, através de plugin, porém para isso será necessário adquirir pelo menos a licença "business".

E a linguagem de programação?

É utilizado C#.

E as telas?

O Xamarin possui duas maneiras de criar as telas.
Uma delas é a forma antiga, onde você irá desenhar a tela do iOS no próprio XCode (o próprio Xamarin abre para você), no caso do Android será através de xml (como é feito normalmente), então um profissional que já é dessa área não terá dificuldade nenhuma em criar e desenvolver as telas.
A outra forma de criar as telas é o chamado "Xamarin Forms", onde você poderá escrever um código único e será renderizado nativamente para cada plataforma, não se preocupe, quando for necessário customizar uma tela para cada plataforma será totalmente possível, é só criar renderizações de uma view para cada plataforma.

E as bibliotecas antigas que possuo?

O Xamarin possui uma funcionalidade chamada "Binding", onde você referencia sua biblioteca e dependendo da API é necessário fazer as marcações para expor as classes e os métodos.

Quem são os donos do Xamarin?

São o pessoal do Mono, que primeiramente deu iniciativa a projeto para rodar a linguagem Microsoft no sistema operacional Linux. Além disso atualmente o Xamarin possui uma parceria com a própria Microsoft.

Para saber mais sobre o Xamarin e o preço, entre no site https://xamarin.com/