Tuesday, January 12, 2016

Pausa na aplicação - Controlando versões de código: conheci o BitBucket!

Fala Pessoal, tudo bem?

Enquanto estou travado no desenvolvimento da minha aplicação por um problema que irei descrever assim que resolvê-lo, quero compartilhar mais uma que aprendi nessa nova empreitada de criar código. :)

Sempre escrevi minhas macros, alguns códigos, etc, mas nunca me preocupei em ser organizado, guardar versões antigas do que eu já tinha feito, etc. Eu ia fazendo, aprendendo, errando e acertando e uma hora o código funcionava e eu ficava satisfeito.

Com o desenvolvimento dessa aplicação estou indo mais a fundo em me organizar como "desenvolvedor". Tenho arrancado os cabelos por alterar um código que funcionava e que depois de algumas alterações parou de funcionar e eu não consigo voltar ao que era antes. Isso até descobrir o BitBucket, que é uma plataforma para controle de revisões de projeto.

Soube do BitBucket por acaso, conversando com uma pessoa lá no SJC Hacker Clube. Estava pedindo umas dicas na minha aplicação e ele pedu para compartilhar o código. Me explicou como funcionava e pronto... Criei uma conta, configurei o repositório e a mágica se fez!!

Claro que para qualquer desenvolvedor que ler isso vai saber disso desde o primeiro dia em que se entitulou desenvolvedor, é arroz com feijão. Mas para desenvolvedores eventuais como eu, esse conceito não é tão intrínseco. Eu sabia do conceito, já tinha interagido com SVN aqui na empresa mas não conhecia uma plataforma free para criar times e não fazer o código 100%  público (como é o GitHub).

Além de manter um histórico das versões, dá pra fazer uma comparação do que mudou, como no exemplo abaixo:


Volto a dizer: não é a descoberta da roda aqui, mas vai ser uma coisa que me ajudará muito. A plataforma é free até certo ponto e fácil de usar.

Agora posso alterar o código à vontade.. Estou protegido!

Era isso.. só queria compartilhar.

Cheers.. Keep it up!
Ewerton


Tuesday, January 5, 2016

Alterando uma extensão do ThingWorx - Update I

Fala Pessoal,

Continuo minha luta para fazer uma extensão para o ThingWorx. Tem sido uma experiência bacana: quanto mais eu penso em adicionar funcionalidades, as dificuldades vão aparecendo e eu vou descobrindo melhor como o mecanismo de extensões funciona.

Meu último post antes de falar de autenticação foi sobre a alteração do código de runtime para que a extensão funcionasse. E funcionou só que com um porém: não consegui fazer com que a atualização fosse dinâmica, ou seja, a possibilidade de escolher campos diferentes a serem plotados no mapa.

Minha versão anterior dependia de que o a propriedade fosse definida na criação do Mashup e não em tempo de execução.

Bom, depois de uma pergunta aqui e outra ali e alguns fios de cabelo a menos cheguei em uma versão de código que faz o que quero.

A API (se é que posso chamá-la assim) possui um método chamado updatePropertyInfo.Esse método captura as mudanças de valor na propriedade. Eu já tinha usado antes sem saber para que serve (resultado de CRTL+C, CTRL+V), mas aos poucos vou entendendo.

Também tive que declarar algumas variáveis como globais, fora do bloco if, ou seja, se uma variável não estiver declarada no bloco abaixo ela foi declarada globalmente.

O código ficou assim.

if (updatePropertyInfo.TargetProperty === 'CustomLayerDataField'){
    customLayerDataField = updatePropertyInfo.ActualDataRows;
    return;
}
if (updatePropertyInfo.TargetProperty === 'CustomLayerData'){
    customLayerDataRows = updatePropertyInfo.ActualDataRows;
    var nRows = customLayerDataRows.length;
    var heatmapData=[];
    for (var rowNumber = 0; rowNumber < nRows; rowNumber++) {
        var row = customLayerDataRows[rowNumber];
        heatmapData[rowNumber] = 
{location: new google.maps.LatLng(parseFloat(row[this.getProperty('CustomLayerLocationField')].latitude) , parseFloat(row[this.getProperty('CustomLayerLocationField')].longitude)), weight: parseFloat(row[customLayerDataField[0].SelectedValue])};
    }  
    var heatMapDissipating = this.getProperty('heatMapDissipating');
    var heatMapGradient = this.getProperty('heatMapGradient');
    var heatMapOpacity= this.getProperty('heatMapOpacity')
    var heatMapRadius=this.getProperty('heatMapRadius')
    var heatmap = new google.maps.visualization.HeatmapLayer({
            data: heatmapData,
            dissipating: heatMapDissipating,
            opacity: heatMapOpacity,
            radius: heatMapRadius
        });
    heatmap.setMap(this.map); 
    return;
}

E o resultado:
Mapa para Temperatura
Mapa para Chuvas
 Ainda são apenas testes preliminares e não a aplicação final mas vou atualizando vocês conforme eu evoluir!

Keep it Up!
Ewerton