segunda-feira, 17 de setembro de 2012

Acentuacao ou Acentuação, eis a questão? ou questao?


Pois é nossa língua portuguesa continua riquíssima, e apesar de todos os esforços para torná-la mais simples, ainda temos que estudá-la por longos anos, para que no final, ainda cometermos muitos erros gramaticais. Tem gente que passa a vida estudando-a, e em profundidade seus advérbios, particípios, pleonasmos, e vamos parar por aqui, pois me lembrei da Dona Cristina, minha querida professora.  Isso sem contar os 'idiomas' regionais que também nos ajudam, como por exemplo: o piá da prenda gostar de comer macaxeira, ou ainda assei o vazio na herdade para comer com a fuleragem.

De fato trata-se de um dos nossos maiores patrimônios, mas quem não se sente tentado a passar o texto pelo corretor do MS-Word para descobrir aqueles acentinhos faltantes, antes de cometer a gafe de publicar algo errado.  Mesmo com todo esse esforço ainda cometo essas gafes com grande frequência aqui no Genexando, mas fazer o que, os que não tiverem pecados que atirem a primeira caneta.

Mas voltemos ao nosso problema original que é acentuação, usá-la ou não, e o grande esforço que tal detalhe ocasiona na questão das pesquisas no banco de dados, pois, agora mesmo no search do Genexando tive que escrever frases acentuadas e sem acento para tentar encontrar um artigo mais antigo, e que inclusive não achei.

O que fazer?
Em primeiro lugar temos os campos de entrada sujeitos a serem utilizados como filtros, podem representar um problema, pois muitos Joãos registram seus nomes como Joaos, e a falta de padrão traz consigo grandes dificuldades para achá-los depois.

Recentemente passamos por uma dificuldade dessas, e resolvemos duplicar um certo atributo na tabela removendo seus acentos de forma a possibilitar pesquisas por esse campo de forma mais 'neutra'.

E desta forma um pequeno trecho de codigo foi criado, com a ajuda do ReplaceRegEx para remover os caracteres com acentuação.

&TXT   = &Texto.ReplaceRegEx("[áàâãäª]","a")
&TXT   = &TXT.ReplaceRegEx("[éèêë]", "e")
&TXT   = &TXT.ReplaceRegEx("[íìîï]", "i")
&TXT   = &TXT.ReplaceRegEx("[óòôõöº]","o")
&TXT   = &TXT.ReplaceRegEx("[úùûü]", "u")
&resposta  = &TXT.ReplaceRegEx("[ç]", "c")

Acho que não preciso nem explicar o que ele faz né, (não é)?

O dia que o banco de dados falar português talvez não tenhamos que recorrer a esses métodos brasileiros.

Conclusão
Só pra abrir um pequeno parenteses, o Brasil, de fato é uma terra diferenciada, além da nossa lingua temos também os nossos próprios padrões que nos diferenciam do 'resto' do mundo, e só pra citar alguns exemplos vejam o nosso mais recente padrão 4G que somente funcionará aqui, e não adianta querer utilizar aquele iPhone 5 pois não vai funcionar, a própria Apple ficou meio revoltada com o Brasil, acho que por causa disso, o nosso sistema de TV digital que também só funciona aqui, as nossas belas e novas tomadas que também somente funcionam aqui e que por sinal exigem um montão de adaptadores, e por ai vai.

Direitos autorais a parte, fiquemos felizes com nossos irmãos de lingua portuguesa no mundo: Angola, Moçambique, Cabo Verde, Guiné-Bissau, São Tomé e Principe, Ilha da Madeira, Arquipélago dos Açores, e claro nossos patrícios, pois, pois.  Ah, já estava me esquecendo, tem também os que falam mas não oficialmente: Macau, Goa e Timor Leste. Percebeu que quase todos tem acento até no nome!


sábado, 15 de setembro de 2012

GeneXus Xev2 Integrado ao IIS7

O fato é que você vem utilizando suas aplicações Ev1 e Ev2 no IIS  já faz tempo, e talvez não tenha notado uma pequena mudança de comportamento. A boa noticia, é que o Genexus Ev2 opera agora de forma totalmente integrada ao IIS7 no modo Managed Pipeline Mode = Integrated.

Discutimos as restrições que tinhamos na execução de aplicações completamente integradas ao IIS no post (http://www.genexando.com/2011/01/migrando-aplicacoes-para-o-iis70.html), e esta deficiência foi corrigida no Genexus Ev2..

Até o Ev1 o que tinhamos era apenas o modo Classic, ou seja, o Asp.Net rodava em modo compatibilidade com o IIS6.  Atualmente ao criar uma aplicação .Net o padrão é associar o diretório virtual ao Default App Pool que já opera com o modo Integrated, portanto, compativel com as aplicações Ev2.
 
Para Saber mais:

quinta-feira, 6 de setembro de 2012

Como não render-se ao Submit

Submit traduzido para o português significa submeter, submeter-se, ceder, sujeitar-se, render-se, entregar-se, e não poderia haver sinônimos mais claros e eficientes para representar esse interessante comando Genexus, pois de fato não existe aplicação que possa ceder a esse recurso.

Trata-se de um mecanismo bastante antigo na ferramenta, lá pelos idos da versão 7.0, RPG/AS400, ou seja, a turminha mais madura com certeza conhece e utiliza esse recurso, já os bebezinhos (me incluo aqui, rs), nem imaginavam que algo tão surpreendente pudesse estar tão próximo ao nosso alcance.

Chega de suspense, então, pra que serve isso mesmo?

1) Situação 1: Com certeza em sua aplicação você necessita enviar algum email, ou vários, e deve ter programado um botão, que ao pressionado com certeza faz com que seu usuário espere por alguns instantes (indeterminado diga-se de passagem), até que ocorra a conexão com o servidor SMTP, em seguida o login, o envio da mensagem, finalmente o encerramento da sessão.  Algo como uma tela cinza e uma imagem de um circulo que fica animadamente circulando, meio sem significado se pararmos para pensar, mas que nos instiga a contar o tempo que estamos perdendo, e com certeza testando a nossa paciência e principalmente a do usuário.

2) Situação 2: Levou um certo tempo pra programar, tendo em vista que foram incluídos muitos dados estatísticos importantes, vários cálculos, agrupamento de informações, ou seja, um relatório que, em algumas situações, podem levar minutos para ser concluído.  Já ouvi falar de relatório de 3 horas, mas sinceramente, nunca enfrentei um monstro desses. E novamente, um botão que chama esse relatório, e novamente a tela cinza retorna feliz para nos brindar com o circulozinho alegre. Nesse momento lá vai o nosso usuário cortar as unhas, algumas mais afoitas iniciam uma animada rodinha pra falar dos novos sapatos, do namorado da vizinha, do Palmeiras que ta uma lástima, e por ai vai.

O culpado! Call e Udp, que são métodos de chamada que são os vilões da interrupção do fluxo de processamento, que faz chamadas de forma que o objeto chamador tenha que aguardar até o retorno do processamento.

Submit
Segundo a própria documentação, até a versão do Gx7.0, esse comando executava chamadas a processos AS400 de forma síncrona, a partir da 7.5 passou a ser disponibilizado para Web para executar processos assíncronos, ou seja, processos executados de forma paralela.

Em outras palavras, o comando permite gerar um novo processo em execução no servidor, de forma paralela ao atual, e o melhor é que o atual não aguarda o retorno da execução do processo em paralelo. O que resolveria de forma elegante nossas duas situações, ou seja, dispararíamos o processo para enviar o email ou gerar o relatório e o usuário ficaria confortavelmente na tela de seu sistema, continuando sua operação normalmente.

Claro que isso exigiria um pouco de Engenharia para informar ao usuário que seu relatório foi gerado, que o email foi enviado, mas isso é tema para outra história interessante.

Na Sintaxe o Segredo
Sinistro isso, pois o submit exige uma sintaxe meio esquisita, mas tem explicação.  Em seguida ao nome do processo a ser disparado segue-se um '' cujo significado seria a passagem de parâmetros de segurança (usuário/senha), mas que na chamada a uma procedure não teria funcionalidade.

 
      1) submit('sendmail','',&email)

      2) sendmail.submit('',&email)

O submit aceita parâmetros assim como quaisquer chamada Call ou Udp.

Quanto à procedure, apesar da documentação exigir um Main Program e o protocolo de chamada  do tipo Command Line, em meus testes no EV2, .Net, Web, não houve necessidade de nada disso.  Qualquer procedure funciona. Em um WebPanel ocorre a chamada ao objeto mas na mesma janela que a atual, portanto, não causa muito efeito.

Conclusão
Na minha humilde visão (miope) acredito que esse recurso seja uma excelente solução para reduzir o impacto de processos lentos na interface do usuário, pois permite a possibildade de execução em paralelo.  No caso do email cheguei a criar uma kb de gerenciamento de envio de emails, chamada com webservices para resolver o problema da espera, ficou muito interessante, gerenciável, mas analisando bem, uma palavrinha só seria necessária para acabar com o problema: submit. E não é isso que buscamos? simplicidade?


Para saber mais:
• http://www.gxtechnical.com/gxdl/pub/genexus/devenv/docum/releasenotes/7.5/submit.htm
• http://wiki.gxtechnical.com/commwiki/servlet/hwiki?Submit+Command,