Rumo à um framework de sincronização para aplicações móveis

Em 2014, adentrei o universo das aplicações para dispositivos móveis ao capacitar-me em desenvolvimento em Android SDK e como de costume, logo me defrontei com as limitações técnicas desta nova plataforma. Se a baixa qualidade da conexão com a Internet no Brasil  já é um limitador forte para aplicações web, a situação se agrava bastante em aplicações para celulares que precisam conviver com a baixa qualidade e o alto custo das conexões 3G e 4G. Por isto, antes de embarcar no desenvolvimento de aplicações ambiciosas, tomei algum tempo para criar um modelo de gestão de dados que permitisse o uso eficiente das aplicações mesmo em situações de péssima conectividade, ou mesmo de total indisponibilidade de conexão com a Internet e ao mesmo tempo o máximo de interação remota para os momentos em que a rede encontra-se disponível e com qualidade.

O NUNO é um sistema de automação de de auto-centers/postos/ oficinas mecânicas composto de um catálogo eletrônico de peças e serviços automotivos que auxilia o mecânico à identificar rapidamente quais as peças adequadas à cada um dos diferentes modelos e configurações de veículos que rodam em nossas ruas e também um aplicativo pessoal, voltado aos proprietários para auxílio no acompanhamento e planejamento da manutenção de veículos. Na sequência padrão, o mecânico identifica os veículos atendidos em seu auto-center, posto ou oficina através da placa e do modelo, consulta as peças e serviços adequados à aquele veículo e registra os serviços realizados. Na outra ponta, o proprietário recebe em seu celular as atualizações dos serviços realizados e informações da agenda de manutenção.

Para o sucesso deste projeto é necessário atender requisitos estritos de atualização constante de informações e, ao mesmo tempo, confrontar a realidade de auto-centers e oficinas mecânicas que muito comumente não possuem uma boa infra-estrutura de conectividade. Desta forma, tanto a aplicação em modo “mecânico” quanto a aplicação em modo “proprietário” utilizam uma estrutura de “store and foward” que armazena localmente tanto os dados catalográficos de veículos e peças, quanto s históricos de serviços realizados. Estes bancos de dados locais são fragmentos de uma base de dados remota na qual cada dispositivo precisa sincronizar oportunamente.

Este projeto encontra-se em desenvolvimento. Os primeiros testes deverão começar a ser realizados em meados de julho/2015.

Em busca de um padrão MVC ortodoxo para aplicações Web

27O desenvolvimento de uma aplicação Web geralmente engloba aplicação de uma série de ferramentas  que vão desde um sistema de bancos de dados, uma aplicação server-side, uma especificação formal da interface com usuário e uma programação comportamental client-side desta interface.Ferramentas como a linguagem PHP prometem “facilitar” o trabalho dos desenvolvedores agrupando todas as ferramentas do ambiente Web em um único local, entretanto, para que se possa embarcar em projetos maiores e mais ambiciosos é sempre necessária a adoção de boas práticas e de padrões de projetos adequados.

Outro aspecto importante das aplicações web são a atenção dada à qualidade das interfaces. Uma aplicação Web nada mais é do que um website interativo, compostos por várias páginas que apresentam o conteúdo do sistema ao usuário de forma interativa. Esta característica, entretanto, dificulta o controle comportamental sobre as interfaces e limitam a usabilidade dos sistemas, além de conferir um aspecto nada profissional às interfaces Web que ficam “pulando” de tela em tela como um verdadeiro hipertexto e não uma aplicação. Um grande avanço nesta área, contudo, foi a introdução das técnicas AJAX de comunicação de dados entre cliente e servidor dentro do contexto de uma única interface.

Com estes limitadores em mente, comecei a desenvolver uma metodologia de desenvolvimento baseado no padrão de projeto MVC (model-view-controller) que se caracterizasse pela separação total entre as três camadas, inclusive no que diz respeito à tecnologia de implementação (daí a ortodoxia). Meu padrão MVC se baseia nas seguintes regras:

  • Camada de Modelo: Base de dados implementada inteiramente dentro do banco de dados, não só pela modelagem relacional mas também pela especificação das regras de acesso aos dados através de rotinas armazenadas (stored procedures).
  • Camada de Controle: Implementada pela linguagem Server-side (PHP, Java, C# ou VB.Net, etc), especifica regras de negócio e faz a ponte entre a interface cliente e a base de dados.
  • Camada de Visão: Implementada inteiramente em HTML5, com forte utilização de recursos de JavaScript e da biblioteca jQuery. As interfaces da aplicação são sempre carregadas de forma estática e todos os dados da aplicação são carregados apenas através de técnicas AJAX à partir de uma interface com o servidor seguindo o padrão Factory.

Com esta abordagem foi possível trazer um pouco do universo de aplicações desktop para dentro do ambiente Web, racionalizando a comunicação de dados entre cliente e servidor e melhorando a qualidade das interfaces. Veja abaixo algumas telas desenvolvidas com o padrão MVC ortodoxo. Estas telas são do painel de controle do sistema NUNO, apresentado no post seguinte.

intranet01 intranet02
intranet03 intranet04

Sistema de monitoramento de quiosques interativos

5057344099_b13aab7543_o_blur

Em 2010, recebi um novo desafio com quiosques interativos: o desenvolvimento de um sistema de informações turísticas para terminais multimídia geograficamente distribuídos. A rede de quiosques interativos ficaria disposta em locais de visitação turística, especialmente em como em saguões de hotéis, e outros lugares públicos, espalhados por várias cidades turísticas pelo litoral nordestino e também em algumas cidades do interior de São Paulo.

Para este projeto foi desenvolvido um sistema web pra gerenciamento de conteúdo dos quiosques, gerenciamento de anúncios e monitoramento de acesso e de interatividade com os usuários dos terminais. Também foi crada uma interface de monitoramento em tempo real dos quiosques de forma que qualquer irregularidade no funcionamento de cada terminal pudesse ser identificada o mais rápido possível, gerando uma ação que poderia ir desde o acesso remoto ao terminal falho até a abertura de uma chamada para a equipe de suporte local.

5041492395_e8e309e254_o_blur

 

Este projeto não chego a ser implementado em todas as cidades originalmente programadas, mas foi implantado com sucesso um projeto piloto na cidade de Fortaleza, gerenciado remotamente pela sede da empresa no interior de São Paulo.

5057962572_a477130ea0_o_blur

Fabricando quiosques interativos

No segundo semestre de 2008, em parceria com uma equipe de parceiros e fornecedores, empreendemos o desafio de projetar e construir quiosques interativos. Para o projeto do quiosque foram utilizadas modernas ferramentas de modelagem 3D, além de uma criteriosa seleção de componentes e periféricos para o equipamento. No processo de fabricação, o modelo 3D viabilizou a utilização das melhores técnicas de metalurgia com os processos de corte a laser e dobra realizados de forma automática. A soldagem e a pintura completaram a fabricação do chassi de aço. Por fim, a montagem dos componentes no chassi e a configuração de software encerraram o processo de fabricação dos equipamentos.

edrawing

totem02

totem01

 

Projetos na Softsul

mgpdiEntre 2006 e 2010, atuei como desenvolvedor Web e consultor de Tecnologia da Informação para o Centro Tecnológico (CTEC) da SOFTSUL e membro da equipe do projeto MGPDI que estudou a definição de uma metodologia de gestão da inovação e desenvolveu uma ferramenta de software para a aplicação desta metodologia.

A metodologia de Gestão de Pesquisa, Desenvolvimento e Inovação, MGPDI, baseia-se em processos definidos nos modelos internacionais de inovação buscando atender a necessidade de implantar nas empresas os princípios da inovação, de forma adequada ao contexto das empresas brasileiras e estando em consonância com as principais abordagens para definição, avaliação e gestão de produtos e serviços inovadores. Foi desenhada em concordância com a Lei de inovação e de modelos de análise de melhores práticas (MPSBR, TRIZ, CMMI, OSLO, PMI, RBS).

Na Softsul, também atuei em outros projetos de consultoria SOFTSUL e desenvolvi aplicações Web para uso interno da instituição, incluindo o portal de informações da instituição. Clique na imagem abaixo.

softsul_cut

Soluções em quiosques interativos

totem_blur
Interfaces sensíveis ao toque estão hoje presente em todos os lugares, e aplicações para dispositivos móveis se proliferam em todas as plataformas. Entretanto, não faz muito tempo, a realidade do mercado era completamente diferente. No final de 2007 o primeiro iPhone havia acabado de ser lançado, nossos telefones celulares ainda se restringiam a teclados numéricos e telas com resolução muito baixa. Neste cenário, fui chamado a desenvolver uma solução para quiosques interativos e auto-atendimento equipados com telas sensíveis ao toque (touchscreen) tendo como tema a divulgação de informações turísticas sobre o estado do Rio Grande do Sul e serviços disponíveis ao turista em todas as regiões.

Para tal, desenvolvi em parceria com o arquiteto Thiago Pessato, um estudo de usabilidade de interfaces adequadas à interação pela tela. Onde levamos em conta aspectos de ergonomia, controle através de gestos, etc. Tópicos ainda muito incipientes naquela época. Para o desenvolvimento da aplicação optamos fugir do uso de Flash, ainda tão em voga naquela época, e escolhemos a implementação em HTML/JavaScript utilizando recursos que hoje compõem o que é chamado de HTML5.

Veja nas imagens abaixo alguns exemplos de projeto gráfico do sistema, layout do totem e uma foto do equipamento já instalado.

tela01_blur  tela02_blur 
tela03  DSC_3824

Em seguida, a tecnologia desenvolvida para os totens de informações turísticas foram utilizadas no desenvolvimento de quiosques temáticos para grandes eventos locais como a Expointer, Expodireto Cotrijal, Festival de Cinema de Gramado, Fenavinho, Feira do Livro de Porto Alegre, etc.

TELA01_blur 08-08-08_1830_2_blur
feiradolivro_blur tela03

Factory: exemplo de Design Patterns em PHP

cards

O uso adequado de padrões de projetos (design patterns) é fundamental para o sucesso de projetos de desenvolvimento de software, especialmente em se tratando de sistemas que lidam com informações sensíveis em tempo real. Esta entretanto não era a realidade de sistemas desenvolvidos em linguagem PHP há uma década atrás. Naquela época, a linguagem PHP era vista não muito além de uma ferramenta para a criação de recursos interativos em websites e não como uma plataforma para a especificação de regras de negócio complexas. Sistemas em PHP eram geralmente compostos por dezenas de “páginas interativas”, vários arquivos de extensão “.php” que poderiam representar, cada um, uma porta para a rede à ser explorada em busca de vulnerabilidades.

Em 2003, fui contratado para desenvolver um sistema de gestão de convênios múltiplos de compra e venda. Este sistema deveria gerenciar  transações financeiras realizadas com cartões de compras, disponibilizados para associados de diferentes redes de convênio, habilitados para realizar compras em uma rede de estabelecimentos comerciais conveniados. O sistema deveria implementar regras de negócio específicas para cada cartão e cada estabelecimento comercial (valores disponíveis, número de parcelas, compras sem entrada, etc) e processar, em tempo real, pedidos de autorização de compras. Estas autorizações poderiam ser solicitadas através de diferentes canais: via call center, pelo telefone através de um sistema URA, pela internet. O projeto também contemplou o desenvolvimento de uma interface web para consulta customizado para cada tipo de usuário (usuários dos cartões, estabelecimentos credenciados e administradores de convênio).

Para vencer este desafio, escolhi a adoção do padrão de projetos Factory. Este padrão é provavelmente um dos mais utilizados em linguagens modernas atualmente, como o Java e C#, mas não naquela época, muito menos em projetos em PHP. Ele permite ao cliente solicitar a uma fábrica a criação de determinado objeto provendo informações do tipo de objeto que necessita, sendo que ele retorna para cliente um objeto que é utilizado como uma classe abstrata, Este pattern tem como objetivo criar objetos sem expor a lógica de instalação ao cliente e referenciar objetos criados a partir de suas interfaces.

Uma vantagem da utilização desse padrão é que podemos adicionar novas subclasses ao sistema sem nenhum tipo de alteração no framework da aplicação. Este foi uma característica fundamental para o desenvolvimento de todo o sistema, o que ao longo do tempo incluiu novos tipos de regras de negócio, novos canais de solicitação de autorização de compra (como a adoção de terminais POS e um autorizador Mobile), etc. Como resultado, este sistema desenvolvido em 2003 seque em operação até hoje mantendo sua estrutura principal inalterada.