quinta-feira, 11 de setembro de 2014

Criptografia Segura?

Criptografar informações importantes que devem ser protegidas é assunto sério, e com certeza todo projeto tem uma pontinha de preocupação neste sentido. Até as delações da última quadrilha que limpou a Petrobrás foram criptografadas, segundo a mídia, mas até ai vazaram...

O fato é que será que existe algum algoritmo que seja forte suficiente que não possa ser quebrado?

Os algoritmos RSA são importantes e muito utilizado para proteger nossas transações bancárias, e as chaves estão ficando cada vez maiores, na tentativa de torná-lo seguro. Imagina um que utiliza uma chave de encriptação de 4Kb, acho que deve ser um pouquinho mais seguro que o nosso encrypt64 de 64bits.

O fato é que mesmo algoritmos pesados como o RSA de 4Kb foi quebrado, e o mais surpreendente, pelo barulho que o computador fazia para processar a encriptação, quer coisa mais maluca? veja ai voce mesmo.   Researchers crack the world’s toughest encryption by listening to the tiny sounds made by your computer’s CPU

Em resumo, além de redes protegidas, firewall, certificados digitais, encriptação, também temos que trabalhar em uma sala a prova de som.

sábado, 6 de setembro de 2014

Responsive Web Design (I)


Essa aqui acho que você 'talvez' nem se lembre, mas um dos desenhos mais incríveis que me fazia sonhar na infância, era Os Impossíveis. Porque? eles tinham uma bandinha de musica com instrumentos futuristas (telinha de vídeo no instrumento), o palco da banda se transformava em um carro moderninho, e as habilidades eram demais, o tal homem mola (Coin Man) esticava e encolhia, o homem fluido (Fluid Man) transformava-se em liquido para passar sob as portas, o multi-homem (Multi Man) que se replicava,..., coisa fenomenal para uma criança que não dispunha de celular e vídeo games, e muitos outros modernismos que nos transformam nos impossíveis do mundo moderno.  Ah, e tinha também sempre um super vilão para testar as habilidades dos nossos heróis.

Não sei se essas coisas infantis e inocentes geram as idéias para a criação dos nossos aparelhos super modernos, mas muita coisa dessa época, parecem surgir nos dias atuais.

Ao estudar um pouquinho a respeito do Design Responsivo me fez lembrar das habilidades dos nossos heróis, pois muitas características desta tecnologia, no mínimo meio maluca, são semelhantes ao tal desenho, talvez por uma simples ironia do destino. Quais?
  • Design fluido
  • Interfaces que esticam e encolhem
  • A mesma interface sendo replicada para muitos dispositivos diferentes
  • Fontes que se auto ajustam
  • E claro, nosso super vilão do desenvolvimento: tecnologias diferentes, dispositivos diferentes (leia-se aqui tanto monitores de vídeo, browsers, screens de dispositivos móveis), tamanhos e resoluções diferentes, muitos lugares distintos para mostrar a mesma informação
Então, que tal estudar um pouco isso?

Genexus Evolution 3


A nova versão Evolution 3, inclui o Responsive Web Design, no padrão Genexus que é o de encapsular coisas complexas em simples propriedades, de forma a facilitar a vida do desenvolvedor, e com resultados muito interessantes.

Vamos aos passos básicos para entender e utilizar este recurso:

Configurando primeiro

Inicialmente, em uma kb Evolution 3 será necessário um ajuste mínimo, que é a definição da propriedade Web Form Defaults que deve ser definida como Responsive Web Design, e se localiza em Preferences -> Version.  Abaixo desta propriedade temos outra também importante que é a definição da Master Page do sistema, que por default é marcada como RwdMasterPage.


Isso será suficiente para que as novas transações nasçam com design responsivo.

Estilo Flat

Um detalhe importante nesse modelo é que o Theme Flat que deve ser incorporado na aplicação Default Theme, e que incorpora as definições CSS necessárias para a construção das interfaces responsivas.



E agora?

Simples, crie sua transação, e a mesma já nascerá com uma cara responsiva. No exemplo, criei uma simples transação Cliente e um web form totalmente diferente dos padrões anteriores.



Ao invés de um tradicional Table temos um novo controle do tipo Container -> Responsive Table, e os demais controles incluídos neste componente.  Genexus inclui um novo dialogo na IDE chamado Form Preview que possibilita visualizar o resultado final.


A transação visualizada no navegador é fantástica, parte causada pelo theme Flat que nos entrega um conjunto CSS bem mais interessante que os temas GenexusX e GenexusXEv2, anteriores, mas também pelo comportamento do próprio formulário.




E a questão do design responsivo?

Com os novos controles do tipo Container é possível desenhar novas interfaces que executam com comportamentos distintos, como por exemplo que responda de forma distinta às diferentes resoluções de tela, incluindo, ocultando ou alterando a posição das informações.

Mas isso já é assunto para uma próxima aventura dos nossos super heróis. E para matar um pouco a saudade ai vai: https://www.youtube.com/watch?v=EVpmQtdpaW4 (olhando hoje, parece meio tosco, mas na época eu não perdia um, rs)


Quer Mais?

Você pode obter mais informações sobre Design responsivo em:
  • http://wiki.genexus.com/commwiki/servlet/hwiki?Responsive+Table,
  • http://alistapart.com/article/responsive-web-design
  • http://www.rafael.sienna.nom.br/2013/06/design-responsivo-x-genexus.html







terça-feira, 3 de junho de 2014

Try...Catch...

Apagar registros por atualização direta em Genexus é uma aventura. Isso porque esse mecanismo não realiza o tratamento de integridade referencial, e se o registro é utilizado por outro, ocorre um erro/interrupção do programa, que sempre assusta bastante quem o recebe. 

Sempre nesses casos é preferivel utilizar Business Component, mas a atualização direta ainda guarda seus encantos principalmente quando se trata de um melhor desempenho.

Uma forma de evitar que o erro apareça nessa situação é envolve-la em um mecanismo de tentativa de execução, inexistente no Genexus, mas possível pela inclusão do código nativ
o. Alias esta prática é bem interessante e util em muitas ocasiões.

csharp try {
 for each
 where ClienteId = &clienteId
    delete
 endfor


csharp } catch (Exception e) { 
    msg('Nao foi possivel completar a operacao')
csharp }

Nao seria muito bom se houvesse já esse simples recurso de programação disponibilizado no Genexus? Eu acho que sim.

domingo, 1 de junho de 2014

Senhas seguras?

Por mais que se tente proteger informações sempre teremos curiosos com tempo e energia suficientes para espionar, invadir, quebrar o sigilo e pior, encontrar coisas importantes.  Segurança é assunto sério e proteger credenciais de acesso de pessoas, além de outras informações relevantes, deve ser uma meta a ser alcançada, visto que esta é uma das principais vulnerabilidades que estamos sujeitos na web (segundo a OWASP).

Uma estratégia é que pelo menos que os invasores tenham muito trabalho para encontrar as coisas, ou mesmo, que as informações sejam transmitidas encriptadas para confundir e atrasar.

Uma estrategia bastante interessante que ilustra bem essa história de confundir, é quebrar as senhas em pedaços, armazenando-a em locais distintos.  Uma idéia simples, e acredito, bastante eficiente.

Abaixo dois links que tratam desse assunto.


Portanto, chega de quebra-galhos, vamos melhorar a segurança dos nossos sistemas.