Arquivar 2016

Novidades do Geoadmin

O Geoadmin está sempre evoluindo. Nossa equipe extremamente talentosa tem adicionando funcionalidades que enxergamos como necessárias para nosso clientes e parceiros.

De acordo com os relatos e nossas pesquisas de mercado, conseguimos compreender um pouco sobre gestão de conformidades ou compliance.

E nossos clientes, principalmente os das áreas de agroindústria e energia, possuem dificuldades de gerenciar essas conformidades, ambientais e fundiárias, simplesmente pelo volume enorme de informações necessárias para uma boa gestão.

Estes clientes nos inspiraram a construir alguns módulos interessantes.

Gerenciamento de Ocorrências

Através do Geoadmin, agora, será possível de criar e delegar ocorrências, sejam elas de quaisquer tipos, para indivíduos em sua organização.

Estas ocorrências, como o restante dos dados no Geoadmin, são georreferenciadas, permitindo que sua equipe no escritório e no campo, consigam resolver as situações do dia a dia.

O módulo, permite uma grande flexibilidade no monitoramento destas ocorrências e te avisa quando uma ocorrência de seu interesse é alterada, é finalizada ou delegada para você.

Como estamos aumentando a quantidade de informações disponíveis no mapa, criamos uma segunda legenda, mais completa, para que você localize rapidamente o que precisa.

Ocorrências

Gerenciamento de Reserva Legal

Uma das conformidades mais complexas de serem gerenciadas, são, sem dúvida, as conformidades ambientais.

O módulo de gerenciamento de reserva legal, vem para ajudar sua organização neste gerenciamento complexo.

A lei brasileira é bastante extensa e foi alterada há alguns anos atrás, ampliando as possibilidades de na escolha e averbação de reservas legais.

A reserva legal está caracterizada por uma porcentagem de mata nativa, preservada dentro da propriedade em questão, de acordo com o bioma em que a propriedade está localizada.

Existe um porém importante: você pode localizar esta reserva legal em outra propriedade no mesmo bioma.

Mas como saber qual propriedade “exportou” sua reserva para qual propriedade receptora?

Através de uma interface simples, o Geoadmin, permite que vocẽ diga quais frações das reservas legais serão alocadas em outras propriedades, sendo o sistema responsável por validar:

  1. Tamanho da reserva legal;
  2. Porcentagem de reserva alocada;
  3. Porcentagem de reserva disponível, de acordo com todas as propriedades existentes;
  4. Bioma da reserva;
  5. Sobreposição da reserva legal com outra reserva legal;

Existem alterações bacanas no dashboard, onde você consegue todas as informações relativas a suas reservas legais, com um clique!

Gerenciamento de Status Fundiário

Empreendimentos agroindustriais, minerários e de outras naturezas trabalham prioritariamente no espaço.

E este espaço, é por definição de alguém.

Estes empreendimentos necessitam gerenciar um fluxo de dados fundiários enorme. Estes dados são originados em diversas fontes, como cartórios, em campo e em escritório, possuindo diversos formatos.

Implementamos uma maneira simples para que estas organizações possam rastrear esses dados e transformá-los em informações.

O usuário basicamente, constrói seu fluxo de dados, informando quais status fundiários são possíveis e quais transições podem existir, como, por exemplo:

  1. Compromisso de Compra e Venda;
  2. Compra da propriedade;
  3. Registro do Imóvel;

O sistema, automaticamente, entende que o registro é a fase final do processo e libera o cadastro de matrícula e proprietários, bem como dos anexos que acompanham o processo.

Durante a tramitação entre estes três status (você pode criar os status que mais encaixam em sua organização), o usuário é informado através de notificações e pode atuar nestes registros.

Apesar de ser um fluxo simples, criamos esta funcionalidade para ser flexível, já que a gestão fundiária no Brasil é complexa e cheia de casos de exceção.

Legal, mas como posso testar estas ferramentas?

Você, meu caro usuário, pode se registrar para um teste gratuito, sem compromisso. Temos certeza que o Geoadmin irá te ajudar.

O que é o Geoadmin?

Bem, finalmente, nosso querido Geoadmin foi lançado. Mas vamos por partes!

Neste post gostaria de explicar para vocês o que é o Geoadmin, quais foram as principais motivações para a construção do mesmo e, principalmente, como ele pode te ajudar.

Principais Motivações

O Geoadmin tem algumas motivações principais. A Sigma, criadora do sistema possui em sua rede de contatos, diversos prestadores de serviços, gestores ambientais e agroindústrias com uma dificuldade imensa de gerenciar seus empreendimentos (ou de seus clientes), do ponto de vista fundiário e ambiental.

Não é por falta de capacidade destes prestadores ou destes gestores, mas sim pela própria natureza dos serviços executados.

São diversos tipos de documentos, em diversos formatos, para uma gama de atividades a ser cumprida muito ampla. Só organizar estes documentos já é uma tarefa complicada.

Alguns fatos:

  1. Geralmente estes dados estão “organizados” em um planilhão do Excel;
  2. Os arquivos que realmente são necessários durante a execução ou com o fim do trabalho, estão em pastas no sistema operacional. No máximo distribuída na rede interna;
  3. Não é possível gerenciar os metadados destes arquivos – você deve procurar uma lista enorme de documentos e abrir um a um até encontrar o correto;
  4. Não existe controle de acesso ou se existe é bastante deficitário;
  5. Não existe um controle de revisões. Sempre devemos procurar qual é o arquivo final mais atual (você provavelmente já viu arquivo_final_1, arquivo_final_1_final, arquivo_final_1_final_de_verdade);
  6. Falta de integração entre membros da mesma equipe;

É aí que entra o Geoadmin.

Com ele, você elimina estas falas de organização e permite a colaboração entre os diversos membros da equipe, através de um repositório de arquivos centralizado (e seguro!), onde as pessoas que mais precisam, podem encontrar o que precisam de forma rápida e eficiente.

Podemos resumir os pilares do Geoadmin:

  • Organização;
  • Colaboração entre equipes;
  • Rastreabilidade;

Como me registro?

O registro para avaliação é gratuito!

Após o cadastro, iremos construir sua conta para você e enviaremos um email assimq ue a mesma estiver pronta. Todo o processo não leva mais de um minuto.

Como funciona?

O Geoadmin é um sistema web, totalmente online, que permite que você, proprietário, prestador de serviço, agroindústria ou parte interessada na gestão fundiária e ambiental de um empreendimento, gerencie suas informações em único lugar.

Certo, mas quais informações posso gerenciar?

O sistema permite que você gerencie, imediatamente, as seguintes informações:

  1. Empreendimentos;
  2. Licenças;
  3. Condicionates;
  4. Ocorrências e não conformidades;
  5. Proprietários;
  6. Propriedades;
  7. Prestadores de Serviços;
  8. Serviços (a serem prestados);
  9. Eventos de serviços;
  10. Anexos;
  11. Documentação fundiária (matrículas e registro de imóveis);
  12. Documentação processo licenciamento;

O sistema é todo georreferenciado, permitindo que você visualize todas estas informações em um mapa completo, visualizando a distribuição de seus dados no espaço.

Mapa Interativo

mapa

Na figura acima, estamos mostrando para vocês a tela principal, onde você consegue visualizar todas as propriedades administradas, bem como os serviços em execução na mesma.

O mapa é interativo, permitindo que você navegue pelo mesmo, pesquise por propriedades e/ou proprietários, bem como faça medições rápidas.

Legal, mas quero usar minhas imagens no sistema. É possível?

Além destas camadas, podemos fazer upload das suas imagens, sem custo, possibilitando que você integre as imagens que você já possui no sistema.

Calendário, notificações e agenda

O Geoadmin possui um perfil gerencial muito interessante. Através dele é possível agendar
tarefas e/ou eventos e controlar as etapas de execução dos serviços relacionados.

Um cenário fictício: o gestor de um empreendimento precisa regularizar a outorga de água de um pivô central.

Através do sistema, você pode agendar um serviço, informando data de início e data de fim, bem como as etapas que compreendem este serviço, através de eventos.

calendario

Existem duas formas de você ficar antenado nas tarefas que você precisa cumprir (ou cobrar)
de um terceiro:

  1. Notificações via email;
  2. Integração da Agenda;

O sistema, todos os dias durante a noite, verifica quais são seus compromissos dos próximos dias e envia um email com links diretos para eles.

Neste email de notificação, existem os seguintes itens:

  1. Atividades Realizadas (lista de atividades realizadas no sistema, como por exemplo: usuário A cadastrou nova propriedade B);
  2. Serviços e eventos próximos (lista de eventos mais próximos, de acordo com a data atual);
  3. Licenças próximas do vencimento (para cada serviço, olhamos as licenças que estão para vencer e te alertamos);

A integração de agenda, permite que você integre sua agenda, seja ela do Google, Outlook ou qualquer outro calendário, através de um botão de download.

Você faz o download de seus compromissos e importa este calendário em seu software de agenda específico.

Esta integração te informa os mesmos dados que estão disponíveis nas notificações via email, com a vantagem de você poder levar onde quiser, seja em sua agenda do smartphone ou qualquer outro programa que deseje.

Anexos

O Geoadmin permite que você faça upload de diversos arquivos, relacionados a diferentes objetos do sistema.

É possível incluir anexos de diversos foramtos (PDF, DOC, imagens, etc)
a propriedades, proprietários, entre outros.

Esses arquivos são armazenados de forma segura, em nossos servidores e os backups são realizados diariamente.

Além disso, o sistema possui uma interface de pesquisa de anexos fantástica, permitindo que você pesquise não só pelo nome do arquivo, mas pelo contexto que o mesmo está inserido, seja em uma propriedade, proprietário e até mesmo licenças.

Dashboard

O sistema possui um dashboard ou painel de controle, de forma que os gestores tenham informações rápidas sobre o que estão administrando.

Abaixo segue uma figura de como o dashboard funciona. Existem estatísticas específicas sobre suas informações do sistema e ainda estamos construindo outras, conforme desenvolvemos
novas funcionalidades.

dashboard

Conclusões

Após ler sobre as capacidades do Geoadmin te convido a se cadastrar.

Temos certeza de que o Geoadmin irá ajudar você e sua organização e trabalharem melhor, com mais eficiência.

Celery e Tarefas assícronas com Python

O Celery é um aplicação, escrita em Python, que permite que você delegue tarefas a diversos workers, localizados em outros servidores.

O Celery é uma forma bastante de realizar estes jobs ou tarefas de forma assíncrona, sem ter de quebrar muito a cabeça com conceitos complicados e difíceis de serem acertados.

Primeiramente, vou explicar como o Celery funciona, em termos de arquitetura.

Temos alguns componentes principais envolvidos:

  1. Aplicação – este carinha aqui é a sua aplicação normal, a qual o usuário ou outra máquina interage;
  2. Broker – este componente é uma fila de mensagens, utilizada para transportar mensagens entre os processos que estamos descrevendo aqui. O Celery permite o uso de diversos brokers, como redis e RabbitMQ. Usamos o redis por aqui, mas é uma preferência;
  3. Worker – este é o componente que trabalha de verdade. Qualquer tarefa agendada pela aplicação no broker, será executada pelo worker;
  4. Beat – é um componente opcional, mas funciona como um agendador de tarefas, que dispara de tempos em tempos as tarefas para o broker, como uma aplicação;

Com esta arquitetura, é bastante fácil escalar a coisa toda para funcionar em várias máquinas, bastando adicionar mais workers conforme a frequência das tarefas aumentam. O Celery é muito customizável e tem opções importantes, como controle de filas (algumas tarefas só podem ser processadas uma a uma, em uma única fila, sem concorrência alguma, enquanto outras podem ser paralelizadas), aplicaçoes de monitoramento (como o Flower) e extensões de biblioteca para os desenvolvedores (como o Jobtastic).

Vamos hoje dar um exemplo bastante simples, integrado a um projeto Django. Não vamos entrar em muitos detalhes de como subir os workers ou o broker, pois vai depender muito do seu ambiente.

Imagine que sua aplicação manda emails. Quase todas as aplicações (web) mandam emails, mas algumas mandam mais emails que outras e com maior frequência. Entre o ponto em que uma requisição feita pelo usuário é processada e uma resposta é retorna, vários segundos podem se passar e não queremos deixar o usuário esperando. Então decidimos delegar o envio do email, que é mais demorado, para uma tarefa assícrona no Celery.

Como fazer isto?

Bem, primeiramente é necessário configurar sua aplicação Celery. Fazemos (aqui na SIGMA) por meio de um arquivo celery.py, localizado junto wsgi.py do projeto. Ele é mais ou menos assim:

# coding: utf-8
"""Configuração inicial do Celery"""
from __future__ import absolute_import
import os
from django.conf import settings

if not "DJANGO_SETTINGS_MODULE" in os.environ:
    os.environ["DJANGO_SETTINGS_MODULE"] = "settings.local"  # aqui na SIGMA usamos settings separados para cada ambiente

from celery import Celery
app = Celery('nome-da-app')

app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

Com esta configuração batuta, podemos iniciar um worker, por exemplo. Além disso, usamos o autodiscover do Celery, que percorrerá todas as INSTALLED_APPS e cadastrará todas as tarefas dentro dos módulos tasks.py.

Ok, com o Celery configurado, podemos startar um worker.

celery -A projeto worker -l info

Agora, vamos criar nossa task e chamar ela de dentro de uma view qualquer. Crie um arquivo chamado tasks.pyem uma de suas apps, por exemplo, sistema.

Para definir a task, utilizaremos um decorador:

from projeto.celery import app  # lembre do nosso arquivo celery.py?


@app.task()
 def email_async(email, assunto, template, contexto):
    template_html = get_template(template)
    template_txt = get_template(template.replace('.html', '.txt'))
    if isinstance(contexto, dict):
        contexto = Context(contexto)

    contexto['email_header_image'] = get_random_image()
    html = template_html.render(contexto)
    txt = template_txt.render(contexto)
    if isinstance(email, basestring):
        email =[email]

    send_mail(assunto,
              txt,
              'remetente',
              recipient_list=email,
              html_message=html)

Com a tarefa definida, podemos invocá-la de forma assícrona. O Celery tem muitas formas de se invocar uma tarefa. Existe um negócio chamado canvas que permite você combinar as tarefas de forma assícrona, paralelas, etc. Confira a documentação do canvas.

Vá em uma de suas views que enviam emails:

from .tasks import email_async

def view_qualquer(request):

    # faça alguma coisa útil

    email_async.delay('novo email', 'sistema/email.html', {'variavel_contexo_a': 'foo', 'b': 'novo email maroto'})

O segredo da chamada assícrona está no método delay, que irá usar o broker para agendar a tarefa e futuramente será executada por um worker.

É um resumo muito curto para mostrar todas as capacidades do Celery, mas é um projeto muito bem mantido, utilizado por muita gente.

O exemplo que demos, apesar de parecer bobo, é bastante significativo quando estamos falando de uma aplicação que envia centenas ou milhares de emails por dia, diminuindo muito o impacto nos servidores de aplicação e permitindo que você lide com uma carga bem mais alta.

Iremos fazer uma pequena série sobre o Celery. Tem jeito de consultar o status da tarefa, agendar tarefas periódicas, controlar exceções e um monte de coisa legal.

Fique ligado e obrigado!

Automação de Infraestrutura com Puppet

Let the computer do the repetitious, the mundane – it will do a better job of it than we would. We’ve got more important and more dificult things to do.
Trecho retirado do livro Programador Pragmatico.

O profissional de desenvolvimento de software conta com um grande trunfo em sua manga que é frequentemente negligenciado, um trunfo que vem sendo utilizado vastamente por outras áreas em que sua complexidade é maior do que a encontrada na área de software. Com a automação pode ser alcançado o que economia chama de lucro, pois um profissional aumenta sua produtividade e a qualidade do que é produzido. Estes dois parametros trarão uma enorme mudança em sua carreira, então a partir deste momento se torne um profissional que se vale deste trunfo e se destaca dos demais, simplesmente aplicando em seu trabalho o que de melhor fazemos: automatizar tarefas.

Durante os ultimos anos vemos as práticas DevOps se tornando cada vez mais a cultura dos desenvolvedores e administradores. Neste artigo faremos uma comparação da utilização de uma das tecnologias de escrita de infraestrutura como código criada pela empresa Puppet, o produto escolhido se chama puppet-agent e vamos escrever em uma dsl de mesmo nome, que tenta tornar este processo tão simples como listar quais software serão utilizados.

#####Aplicamos esta prática em dois cenários:

#####Windows:

Neste cenário o cliente utiliza Windows, embora esta arquitetura seja compatível com ambientes linux o cliente tinha mais experiência com Windows e o utilizava em todos ambientes do desenvolvimento à produção. Para prover serviços de mapa e hospedar a aplicação web map é utilizado IIS 7.5, Geoserver, Postgresql e Postgis. Nós escolhemos o puppet-agent e o script será aplicado em uma maquina existente preparada para receber as instalações oriundas do script puppet.

O primeiro passo é instalar o puppet para poder executar o script, que como dito é uma dsl simples

A script que criamos é composta por resources, cada resource tem funções como: instalação de pacote, execução de comandos shell, agendamento de tarefas, administração de serviços, criação de usuários, operações no sistema de arquivos e etc.

Os resources podem ser combinados de forma a determinar qual é o resource requerido para que um outro seja executado, ou assim que determinado resource for executado ele pode notificar outro para que este seja executado.

Uma dificuldade ao utilizar o puppet para instalação de sistemas é que o windows não possui um gestor de pacotes, os instaladores são individuais e distribuídos individualmente por cada fornecedor. Desta forma o processo de instalação exige que em alguns casos seja utilizado o processo de instalação headless que é disponibilizado pela ferramenta de empacotamento utilizada pela empresa que provê o instalador do software. Infelizmente por não haver uma padrão isto é o que mais dá trabalho durante a redação do script.

Após as instalações é necessário configurar as aplicações instaladas, iniciar serviços ou agendar tarefas.

Basicamente utilizamos o resources exec, que permite executar comandos shell, o file, que permite copiar arquivos e o scheduled_task para agendar tarefas.

Com o exec nós configuramos o postgres, executamos os scripts sql de criação das feições espaciais, com o file copiamos arquivos, como por exemplo o diretório data_dir do geoserver e com o scheduled_task configuramos a tarefa de execução do geoserver.

Utilizamos também o Hiera para criar um arquivo de configuração externo e permitir que o script fosse executado independente dos diretórios em que os arquivos existiriam ou do local em que desejamos instalar.

A grande desvantagem foi o tempo que levamos para montar este script. É bastante trabalhoso e em por utilizarmos o windows neste cenário, tivemos pouca documentação disponível principalmente para as instalações headless de cada instalador. Porém quando este desafio foi ultrapassado a grande vantagem foi conseguir instalar com pouquissima dificuldade quatro maquinas diferentes, uma maquina na cloud (Windows Server 2012 R2 ) e três estações de trabalho com Windows 7. O primeiro grande beneficio é que temos a certeza que todas as maquinas possuem a mesma versão e configuração e uma vantagem é que nossa equipe é distribuída e podemos contar com o apoio de outros desenvolvedores que não estejam geográficamente perto e eles conseguirão replicar o ambiente com rapidez e poderão efetivamente apoiar o desenvolvimento do software.

#####Linux:

Montar a maquina servidora de um web map escrito em python e javascript, que consulta um banco de dados geográfico.

De cara podemos dizer que só há vantagens ao utilizar vagrant e puppet para montar ambientes em Linux (dist Ubuntu) não tivemos um décimo das dificuldades apresentadas no Windows e o tempo transcorrido para redigir os scripts foi muito menor.

O maior desafio que encontramos é que algumas versões disponíveis por padrão nos repositórios do apt-get podem estar com uma grande defasagem, o que pode induzir ao erro ao usar uma versão antiga que contém bugs que já foram resolvidos, porém uma vez que você configura o repositório correto do pacote e instala as versões mais recentes o restante é muito prático.

Nós utilizamos postgres e postgis e é excelente ter um repositório de pacotes, fizemos todas as configurações, criação do database e configuração da extensão postgis.

Uma novidade foi utilizar um provider diferente ao utilizar o resource package, pois utilizamos o pip3 para instalação dos pacotes python, porém não tivemos problema algum.

Não identifiquei desvantagens ao escrever o script puppet para uma maquina linux, basta ter atenção às versões que são instaladas pelos repositórios default do apt-get e na dúvida utilize o repositório da fornecedora do software.

Para não dizer que a experiência foi livre de problemas, perdemos um tempo para instalar corretamente o puppet, pois às maquinas ubuntu disponíveis não trazem mais esta instalação por padrão.

A grande vantagem neste caso é que a replicação para outros provider do vagrant se torna fácil, permitindo que eu utilize o virtualbox, vmware, amazon aws ou digital ocean.

Spatialite Ubuntu 16

A biblioteca e o projeto spatialite são bastante especiais. Ela permite que você use um banco de dados SQLite como repositório de dados espaciais, com várias tabelas e relações.

Ela é bastante poderosa neste sentido, pois facilita que usuários GIS armazenem e compartilhem seus dados de forma mais simples, ao invés de enviar um monte de shapefiles para cima e para baixo.

No nosso caso, o problemas são com o Django, não com a biblioteca em si. Devido a algumas mudanças, o Django não consegue rodar, usando ela.

Bem, de acordo com a nova versão do Django e da SpatiaLite, algumas coisas mudaram de lugar e nem sempre o Django consegue encontrar a biblioteca.

Se vocẽ ver um erro do tipo:

Unable to load the SpatiaLite library extension “libspatialite.so.7” because: /usr/lib/x86_64-linux-gnu/libspatialite.so.7: undefined symbol:
sqlite3_spatialite_init

você encontrou o mesmo problema que nós.

Isto foi experimentado na versão do Ubuntu 16.04 e provavelmente afeta a todos os derivados (no nosso caso, afetou o Mint).

A resolução é simples. Instale algumas coisas e defina uma variável de ambiente:

Instale:

sudo apt-get install libspatialite3-mod-spatialite

Configure sua variável de ambiente:

echo SPATIALITE_LIBRARY_PATH="mod_spatialite" >> ~/.bashrc

Reinicie seu shell para que ele possa ler a configuração (ou dê um source no mesmo, tanto faz :D).

No Django, configure:

SPATIALITE_LIBRARY_PATH = 'mod_spatialite'

E aí, tiveram problemas com essa atualização?

Abraços