terça-feira, 11 de novembro de 2014

Evolution 3 em 5 Passos

A cada mudança de versão do Genexus temos sempre uma boa expectativa de que teremos muitas coisas novas para aprender e tambem para turbinar nossos projetos. Esta sensação causa certo calafrio, pois sempre precisamos nos organizar para aprender coisas novas, aumentar um pouco nosso esforço em ajustar as coisas nos projetos, enfim, coisas que somente a evolução tecnológica traz.

Buscando ajudar você na migração para esta nova versão, pelo menos conceitualmente, montei uma lista, que reflete sob o meu ponto de vista,  quais as principais inovações nesta nova versão.

Módulos

Genexus está ficando orientado a objetos? Na pratica o produto gerado atualmente ja é orientado a objetos, visto que os geradores programam as Classes, Namespaces, Objects, ..., nos respectivos códigos fonte.  A organização dos objetos dentro do Genexus não era 'muito' orientado a objetos até este momento.

Genexus Ev3 traz implementado um novo recurso que promete revolucionar a forma com que organizamos nossos projetos, e apesar de sentir a falta de alguns pequenos detalhes, é possível ver que já temos um recurso que vai muito além da nossa necessidade imediata. O nome deste recurso: MODULO, leia-se 'Encapsulação'.

Seu objetivo fundamental é organizar a KB de forma a agrupar objetos que pertençam a uma certa classificação ou funcionalidade, que você mesmo determina, isso com o objetivo de permitir que possamos gerenciar (ou proteger) melhor a informação manipulada por estes.

Um detalhe apenas, para frustrar o pessoal mais da antiga, Módulos não é suportado para objetos Windows (workpanel, menu,...).

Módulos seguem os mesmos conceitos de encapsulação de dados da Programação Orientada a Objetos, de forma que certo recurso somente pode ser acessado na KB se o mesmo for definido como Públicos, uma propriedade adicionada em cada objeto. Na aba Interface, permite visualizar os objetos públicos do tipo Service (Procedures, Data Provider, External Objects), Data (Transações, SDT, Business Components) e User interface (Webpanel, Master Page, WebComponents).

Na aba Diagrama temos uma visualização da interligação do Modulo com outros Módulos na KB.

Enfim, esse recurso esta na minha lista de mais importantes, e acredito que esses poucos parágrafos, despertou em você o mesmo que em mim, uma certa vontade de começar a usar isso.  Então vamos por a mao na massa.


RWD

Dia desses me perguntaram o que era Bootstrap, imediatamente me lembrei da minha mamãe me dizendo para colocar uma bota para não enfiar um estrepe no pé, duro né! que imaginação fértil.  Enfim, falando sério, o pessoal da Twitter inventou uma forma de fazer mágica nas paginas web, fazendo coisas inúteis desaparecerem de acordo com a dimensão da tela.  O que significa que uma pagina apresentada em um dispositivo pequeno deveria apenas mostrar o que é mais importante, eliminando-se o desnecessário, pelo menos para os usuários desses dispositivos.

Essa mudança também reflete algo inovador no Genexus, pois temos um novo editor de interfaces Web chamado de Abstract, que permite que se monte telas responsivas,  esse é o significado de RWD, Responsive Web Design.


Smooth Web Experiencie

A frase é impactante, e na prática representa um conjunto de características que em suma querem dizer o seguinte: não precisamos atualizar a pagina inteira somente porque o usuário pressionou um singelo botão.  Nada mais desejável não? Pois é, uma das características irritantes dos sistemas web é o excesso de comunicação entre browser e servidor, que faz com que qualquer virgula alterada na interface represente a necessidade de execução de alguma coisa no servidor, e pior, toda pagina se reconstrói, alias seria muito bom se evoluíssemos para uma Web Offline, com a qualidade da nossa internet aqui no Brasil seria um sucesso.

No modelo de interface web Smooth, o que temos é uma mudança radical na ordem de execução dos eventos no servidor, pois ao invés de termos a execução de START-USER EVENT-REFRESH-LOAD, toda vez que ocorre uma comunicação com o server, temos na pratica neste novo modelo apenas o USER EVENT disparado.  Como consequência, teremos uma comunicação mais 'rápida' e mensagens mais curtas trocadas com o cliente, o que significa maior velocidade.

Por outro lado, migrar todas as interfaces do seu sistema para o modelo Smooth não é coisa simples de ser feita, pois devido a mudança da ordem de disparo dos eventos, a maioria das interfaces deixaria de funcionar, pois para a carga dos Grids, Componentes, e outros controles, teríamos que programar o Refresh dos mesmos, conceito que não existia nos idos do já antigo Genexus Evolution 2 para traz.  Por essa razão temos uma propriedade Web Form Defaults que é marcada como Previous version compatible, para que permaneçamos protegidos na caverna, enquanto não sairmos a caça para implementarmos esse magnifico recurso.

Novos comandos, que falam por si só:
  - WebComp1.Refresh()
  - Grid1.Refresh()
  - Refresh()

Outro mecanismo implementado neste modelo permite que somente o conteúdo do Content Place Holder de uma Master page se altere, enquanto que o conteúdo da própria Master Page permanece fixo, evitando-se, por exemplo, que o menu do sistema seja constantemente reconstruído.  Alem das transições que trazem um efeito cinematográfico na mudança das paginas.

Outro recurso digno de um parágrafo são as Web Notifications, que possibilitam o envio de mensagens para as paginas dos usuários que as leem sem que se precise realizar Refresh na interface. O único problema até o momento deste recurso: somente para a versão mais recente do IIS.


For each [<BaseTrnList>]

Temos aqui um recurso impactante, mas não sob o ponto de vista de nossas aplicações, pois ja passamos pela dificuldade de apontar para uma certa tabela base no modelo, mas creio que essa nova sintaxe vai auxiliar não apenas na melhoria da performance da especificação dos objetos, mas tambem para a compreensão na aprendizagem do comando for each,  pois não precisamos mais pensar em tabela mínima estendida, basta apontar o para a transação que origina a mínima estendida, e veja ai que podemos definir uma List, ou seja, podemos definir mais de uma tabela base no for each.


Single Sign On com GAM

Que tal criarmos um provedor de acesso a sistemas no protocolo OAUTH, assim como o disponibilizado no Facebook, por exemplo, isso para ingressar em vários sistemas distintos com apenas um único login. Este é o recurso implementado e que ja esta a sua disposição, bastando aplicar o GAM e ajustar um par de propriedades.

Ao realizar o login em um sistema, se dispara o acesso ao Single Sign On e se tudo estiver correto, será possível utilizar outros sistemas, desde que estejam sob o controle do mesmo GAM, ingressando nos mesmos sem a necessidade de realizar novamente o login.



Offline SmartDevice Application

O recurso mais esperado pela comunidade com certeza era a possibilidade de uma aplicação SmartDevice executar desconectada da Web, isto porque o mundo real não tem Internet em todo lugar, e ao contrario, as aplicações precisam executar em qualquer lugar.

Este recurso entrega não apenas um banco de dados local instalado no dispositivo, mas tambem um interessante mecanismo de sincronização dos dados com o servidor, que pode ser executada automaticamente ou não, e assim atualizar as informações manipuladas na aplicação.

Se você ja desenvolve Smartdevices com Genexus, tenho quase certeza que ja estudou este recurso e o esta utilizando, por outro lado, se não desenvolve, então creio que esse é um bom ponto de partida e motivador para iniciar na plataforma Genexus Evolution 3.

  • Para saber mais:  


  • Alem desses recursos temos muitos outros, mas creio que para um inicio no estudo desta nova versão, ja trazem uma boa experiência.
    Que tal sair da caverna?





    *.   Imagem 1: Fonte: http://mancave.cbslocal.com/2011/09/06/evolution-of-the-mancave/
    **. Imagem 2: Fonte: http://www.sleepwarrior.com/the-cavemans-guide-to-quality-sleep


    sábado, 8 de novembro de 2014

    iGenexus

    Sugestivo o titulo?  Na minha humilde opinião, seria muito bom se tivessemos o Genexus rodando com um formato de iGenexus, em um Mac, não?  Que tal voce entrar na Apple Store, digitar Genexus e receber um belo link para baixar o Genexus Evolution 3, rodando na ultima versão do OS X Yosemite.  Sonho! não custa nada né!


    Recentemente adquiri meu primeiro Mac, e tirando a infelicidade, agonia, e quase desespero de ter que esperar a maquina chegar dos Estados Unidos, coisa que levou cravados dois meses, dizem porque eu exagerei na dose de ter pedido uma top de linha, o resto é só alegria, tirando alguns pequenos detalhes (como a falta do Paint, por exemplo, :( )

    A decisão foi tomada devido a duas razões: 1) para criar Apps sérios para o iPhone/iPad precisamos de um Mac, e 2) estava cansado de formatar minha maquina a cada 3 meses.  Espero conseguir superar essas duas questões, pois o investimento foi alto.

    Vale a Pena?
    Muitas duvidas surgiram a respeito das possíveis e inúmeras incompatibilidades existentes entre esses mundos, questões relacionadas a desempenho, enfim, pela primeira vez na vida se aventurando fora do mundo windows é meio difícil.

    O fato e que tirando as questões relacionadas com acentuação, que eu creio que um dia vou conseguir resolver, o que pude perceber e que marte e terra não são tão diferentes assim. Sabe porque? ambos utilizam o mesmo processador (Intel i7 no meu caso), e por incrível que possa parecer o Windows roda muito bem no Mac, quase que nem percebemos que estamos em uma plataforma totalmente diferente.

    Portanto, se o seu receio é deixar suas lindas aplicações Windows quando migrar para o Mac a resposta que eu tenho é que voce pode continuar a usar todas, mesmo que isso possa constranger os puristas do Mac que, em sua maioria odeiam o Windows, não me pergunte porque.

    Genexus
    O mundo ideal seria se tivessemos o próprio Genexus rodando no Mac, coisa que acho que ainda nem esta nos planos do Sr. Jodal, de forma que pudessemos simplesmente baixar e instalar o iGenexus, mas na situação atual, temos que rodar o Genexus com Windows em uma maquina virtual no MAC.

    Temos duas opções: 1) particionar o disco do Mac e instalar o Windows, 2) rodar uma maquina virtual com Windows instalado.

    Em ambos os cenários a primeira questão que pode surgir tem a ver com desempenho, pois teríamos dois sistemas operacionais controlando a aplicação: OS X + Maquina Virtual + Windows.  Na pratica a Maquina Virtual é um computador virtual que gerencia seus próprios recursos no equipamento como CPU, Rede, RAM, Disco, ...) e que aceita não apenas o Windows, mas qualquer outro sistema operacional, e também permite dimensionar seus recursos.

    Se eu senti alguma diferença entre rodar o Genexus na máquina virtual no Mac e no PC, vou dizer para vocês que absolutamente são exatamente iguais, creio que pela atualização tecnológica, na maquina virtual esta mais rápido. Mas não podemos esquecer que estamos rodando uma aplicação Mac Os, e neste caso acho que é bem interessante porque temos o recurso de SnapShot que permite fazer um backup integral da maquina.

    Outro detalhe que passa despercebido é que estamos com dois sistemas operacionais, portanto precisamos das licenças originais para ambos, que envolve também um acréscimo de custo no projeto.

    Qual Virtual Machine?
    Existem muitas opções no mercado, eu optei por uma desenvolvida especificamente para o Mac que foi a Parallels (versão 10), e o resultado é ótimo, existe um modo Coherence que simplesmente faz com que os programas instalados no Windows apareçam no Mac como se fossem aplicações nativas, ou seja, são executadas independentemente de se montar a maquina virtual como se estivessem rodando no próprio OS X, que eu acho coisa de maluco, a que ponto chegamos com os sistemas.

    Lenda do Boot
    E aquela historia do boot no Mac ser mais rápido que no Windows? cronometrando aqui, entre o boot no Mac (estando a maquina em shutdown) e a disponibilização do Genexus para começarmos a trabalhar levam 20 segundos. Se isso é bom, acho que não, estou trabalhando uns 15 minutos a mais por dia.

    Conclusão
    Enfim, estou diante de um novo mundo, e posso dizer que algumas coisas ja fazem falta quando tenho que voltar ao notebook, o teclado do Mac é mais macio, a tecla command do Mac, depois que se aprende as funções, faz uma falta danada, e até mesmo a maluca sequencia CTRL + COMMAND + SHIFT + 4 para recortar uma imagem na tela agora não me parece coisa de marciano.

    Enfim, fica valendo a maxima de que coisa boa acostumamos fácil, fácil!