domingo, 25 de setembro de 2011

Se eu pudesse me mudaria para um iPhone


Engraçado, mas tenho observado um comportamento diferente nas pessoas que me cercam, não sei se estou ficando obsoleto com o passar dos anos ou o mundo esta muito hyper, parece que todo mundo quer ficar ligado o tempo todo, twittando o tempo todo, um minuto..., me deixa ver minha caixa postal, acho que chegou um email, ah esqueci..., o email gera um barulhinho no aparelho para me acordar do que eu estou fazendo, me interrompendo, até de madrugada.

Mas sabe que após algum tempo com um iphone, algo me chamou a atenção também, para saber das fofocas não preciso de telefone, ou mesmo ir à casa da Odete a vizinha que é um FBI, na prática ela chega até mim via Facebook; Se quero saber o que as pessoas pensam Twitter me dá as dicas, e veja que tem pessoas que já pensam somente através do Twitter; Se quero ir a um restaurante o Apontador me dá as melhores opções da região; Se estou perdido o Google Maps me fornece onde estou e o caminho para onde seguir, distância; Se quero caminhar o Nike+ me ajuda com o roteiro, a distância, calorias, batimentos cardíacos,...., Se quero saber a respeito de algum monumento tiro uma foto com o Googles e ualá, lá vem todo o histórico da coisa; Se quero diversão, ..., e por ai vai.

Pensando melhor acredito que tem gente que se pudesse se mudaria para um celular, em um elevador ninguém olha para o lado, todos estão com os olhos fixos nos pequenos aparelhinhos, digitando velozmente com apenas dois dedos, e se faltar o dedão hehehe... Acho que tem gente que faz sexo twittando, então se a coisa for por ai vou lançar uma campanha para morarmos no próprio iPhone, será que tem apartamentos, terrenos a venda, será que dá pra construir uma casa lá?

Fiz essa pergunta pro Google: It is possible to live in a smartdevice? E sabe qual foi à resposta? Nenhuma, então pessoal, melhor é viver ao vivo mesmo, hein... claro que os Apps nos ajudam a viver (não sei ainda se melhor).




sábado, 24 de setembro de 2011

Segurança Web

Um dos pontos fundamentais relacionados à internet é a questão de segurança das aplicações, com certeza a tendência no desenvolvimento de sistemas de informação é a migração para esse ambiente.  Muitas empresas estão reprogramando seus sistemas Windows para Web em busca de novos recursos de integração, mas a questão fundamental que se coloca é: Será que o investimento em segurança compensa tanto esforço?   E agora com o os novos geradores Smartdevices que também apresentam suas próprias vulnerabilidades, o que fazer? 

Nesse sentido algumas palestras no XXI Encontro Genexus foram fundamentais e esclarecedoras na apresentação desse tema:



OWASP Mobile TOP 10 Security Risks
Alberto Wilson, Mauro Flores - Deloitte

Desenvolvendo aplicações seguras com GeneXus
Alejandro Silva - Artech
http://www.genexus.com/encontro2011/palestra-materiais?pt,0,,2382

Para que serve e como usar a Segurança Integrada a GeneXus?
Alejandro Zeballos – Artech

  

O que é OWASP?
É uma organização sem fins lucrativos com foco nos temas de desenvolvimento de aplicações seguras, conscientizando os desenvolvedores quanto às principais situações de inseguridade.

Essa organização possui um check list com todas as vulnerabilidades atuais em aplicações web, smartdevices, e outros dispositivos na rede.  



Genexus é seguro?
Assim como todo ambiente de desenvolvimento, Genexus está sujeito a algumas vulnerabilidades importantes, não porque a plataforma é insegura, mas porque muitas das iniciativas de segurança devem partir do próprio desenvolvedor que a utiliza.

Isso quer dizer que grande parte da responsabilidade da melhoria de segurança depende do próprio desenvolvedor, não de Genexus.

Uma pequena lista de nossa responsabilidade no desenvolvimento é a seguinte:

1.      Os parâmetros são encaminhados nas chamadas entre scripts de forma encriptada ou não?
2.      Nossa conexão com o servidor é HTTPS ou não?
3.      Estamos permitindo aos usuários entrarem com informações em formato HTML?
4.      Estamos armazenando nos cookies os logins completos dos usuários com sua senha? Não encriptados?
5.      Os webservices programados encontram-se seguros com segurança de acesso? 

O mais interessante é que Genexus vem implementando em seus upgrades as correções de segurança que podem ser tratadas de forma automática pela própria ferramenta, e na versão Evolution 2 implementou-se um mecanismo muito interessante de controle chamado de GAM (Genexus Access Manager).  

GAM realiza controles de autorização e autenticação de usuários, ou seja, permite o ingresso e determina quais ações podem ser realizadas por determinada pessoa, de forma totalmente automática, ou seja, sem necessidade de intervenções dos desenvolvedores.  GAM permite o ingresso validado por diversos mecanismos como o Facebook, Twitter, web services, e outros, ou seja, é flexível e interessante. 

O que devemos fazer? 
Creio que a principal ação é a consciência da equipe de desenvolvimento para esse tema tão importante, principalmente porque qualquer objeto pode ser fonte de vulnerabilidade em nossa aplicação.
Em seguida compreender cada um dos mecanismos de ataque e vulnerabilidades que nossos sistemas podem sofrer e em seguida desenvolver os padrões necessários para que toda equipe de desenvolvimento programe da mesma forma.  Se de acordo com o check list da OWASP, melhor ainda.
Teremos uma aplicação totalmente segura? Se considerar que o FBI foi invadido recentemente, talvez isso responda a essa pergunta.

sexta-feira, 23 de setembro de 2011

Deploy to Cloud... o caso do gx_last_transfer.zip

Genexus Ev2 está facilitando muito a vida do desenvolvedor, com a propriedade Deploy To Cloud, uma característica que permite publicar o database + aplicação na nuvem da Amazon, simples, rapido, quer facilidade maior?  Essa propriedade do Environment, automatiza totalmente a prototipação do sistema na Cloud, criando as tabelas, copiando os programas, gerando o acesso via QR Code, ou seja, tudo para prototipar a aplicação no dispositivo final.
Bom, a unica complicação é que estamos ainda em uma versão Beta, e algumas situações ocorrem, uma delas me atrapalhou um pouco, mas foi rapidamente resolvida.

Existe todo um ritual até que as mensagens de deploy sejam enviadas por meio de um arquivo chamado gx_last_transfer.zip.  Caso esteja vendo em sua kb as mensagens abaixo, pode desconsiderar esse post, não é pra voce.

ruby gxdeploy_build_transfer.rb
Building file gx_last_transfer.zip...
Uploading 1998 Kbytes
1743 Kbytes left
1488 Kbytes left
1233 Kbytes left
978 Kbytes left
723 Kbytes left
468 Kbytes left
213 Kbytes left
Deploying website


Por outro lado, se estiver vendo algo como:

Z:/Models/Siga_2/RubyModel/web/gxdeploy_services.rb:2:in `'
from gxdeploy_build_transfer.rb:1:in `require'
from gxdeploy_build_transfer.rb:1:in `
'

error: System.IO.FileNotFoundException: Não foi possível localizar o arquivo 'Z:\Models\Siga_2\RubyModel\web\gx_last_transfer.zip'.
Nome do arquivo: 'Z:\Models\Siga_2\RubyModel\web\gx_last_transfer.zip'
   em System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   em System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
   em System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
   em System.IO.File.ReadAllBytes(String path)
   em Artech.Packages.Genexus.BL.Services.RunServices.RunRuby.DeployCloudApp(KBModel model, String& diag) em Artech.Packages.Genexus.BL.Services.RunServices.RunRuby.GetEntry(KBModel model, IEnumerable`1 tokens, Boolean isReorg, Boolean createDataBase, IEquatable`1 pgmType, IEquatable`1 mainType, EntryName entryName)
   em Artech.Genexus.Common.Run.RunBase.BuildCommand(KBModel model, IEnumerable`1 tokens, Boolean isReorg, Boolean createDataBase, IEquatable`1 pgmType, IEquatable`1 mainType, EntryName cmdType, String& command)
   em Artech.Packages.Genexus.BL.Services.RunServices.RunRuby.Execute(KBModel model, EntityKey objKey, String execParams)
Execution Failed
Run Developer Menu Failedv

Então precisa de alguns ajustes, que graças ao Armin, foram rapidamente detectados e realizados.

O  Genexus Ev2 gera a instalação do Ruby no caminho C:\Program Files (x86)\Artech\GeneXus\GeneXusXEv2\gxruby\win\ruby\bin, ao inves do tradicional  C:\ruby. O caminho para o compilador deve ser corrigido para que ocorra o Deploy to Cloud.

Para isso altere o caminho da variável PATH (local e sistema), apontando para o diretório gx\gxruby\win\ruby\bin, verifique também se existe alguma definição prévia para o caminho antigo (C:\ruby) que deve ser removido. Em seguida reinicie o computador.


quinta-feira, 22 de setembro de 2011

Porque XML?

Um dia alguém acordou muito inspirado pensou, que tal resolver uma situação complexa com um mecanismo totalmente flexível, aberto, gratuito para que cada um pensasse na solução de seu próprio problema, e para complementar, utilizando um arquivo em formato texto que qualquer Notepad poderia resolver. Coisas assim, não acontecem com muita freqüência, e assim nasceu o formato XML.


XML se parece muito com HTML, creio que foi a inspiração, e consiste em uma forma de representação baseada em elementos chamados de Tags. É um formato muito simples de compreender, mas estranho para se programar, e se optarmos pela via da leitura das Tags individuais, ai então a coisa pega feio mesmo. Até o exemplo apresentado pela Artech para leitura de arquivos XML é de fato complicado.

Uma alternativa para manipular XML’s é através de SDT’s, que naturalmente podem exportar (ToXml) e importar (FromXml), informações nesse formato. Estaremos nesse Post explorando um pouco essa praia.

1.      Criando o Structured Data Type

A primeira coisa a ser feita é criar um SDT de exemplo, que pode conter informações a respeito de um determinado Cliente.


Lembre-se que um SDT pode ser criado automaticamente através de uma transação previamente criada, apenas pelo processo de arrastá-la para a estrutura vazia.

2.      Alimentando o SDT

Criando uma variável do tipo SDT Cliente, será possível armazenar os valores, correspondentes aos campos definidos na estrutura.  Um evento Start em um webpanel é suficiente para manipular essa variável.

Event Start
      &cliente.Codigo         = 1
      &cliente.Nome           = "João da Silva"
      &cliente.Endereco       = "Rua 1, 2"
      &cliente.Bairro         = "Centro"
      &cliente.Cidade         = "Rio Claro"
EndEvent

Um pouquinho de conhecimento sobre coleções ou Data Provider, e você gera uma lista de clientes a partir desse exemplo simples.  Uma dica simples crie uma variável &clientes do tipo SDT Cliente e marque-a como coleção. Em seguida, para adicionar um elemento na coleção programe.

Event Start
      &cliente = new()
      &cliente.Codigo         = 1
      &cliente.Nome           = "João da Silva"
      &cliente.Endereco       = "Rua 1, 2"
      &cliente.Bairro         = "Centro"
      &cliente.Cidade         = "Rio Claro"
      &clientes.add(&Cliente)

&cliente = new()
      &cliente.Codigo         = 2
      &cliente.Nome           = "Manuel da Silva"
      &cliente.Endereco       = "Rua 2, 1"
      &cliente.Bairro         = "Vila Betinha"
      &cliente.Cidade         = "Rio Claro"
      &clientes.add(&Cliente)
     
EndEvent

Ou seja, para cada novo &cliente é necessário um &cliente = new().


3.      Manipulando o XML

Em seguida, uma pequena operação sobre essa variável SDT exporta a informação armazenada em um formato Texto/XML.


Event Start
      &cliente.Codigo         = 1
      &cliente.Nome           = "João da Silva"
      &cliente.Endereco = "Rua 1, 2"
      &cliente.Bairro         = "Centro"
      &cliente.Cidade         = "Rio Claro"
     
     
      &texto = &cliente.ToXml()
EndEvent

E o resultado pode ser apresentado na interface.

 
Simples não, o Genexus se encarregou de exportar a informação previamente armazenada, no formato XML.

4.      O que fazer com esse tal XML?

Você poderia estar se perguntando por que dessa confusão toda, talvez não esteja tão inspirado quanto os inventores dessa coisa, talvez precise de férias, sei lá, mas uma resposta boa e simples seria, o que aconteceria se você passasse &texto como parâmetro para outro objeto.  Uma boa resposta seria, estaria passando todas as informações referentes a um determinado cliente.  Mas lembre-se que essa se encontra em um formato texto.

Para testar crie um segundo webpanel, e declare a regra Parm abaixo, com a variável &clienterecebido definida como Varchar(300), que receberia o valor da variavel &texto passada por parâmetro.
parm(&clienterecebido);

Esse texto recebido poderia então ser convertido em uma variável SDT novamente, usando um método simples.
Event Start
      &cliente.FromXml(&clienterecebido)
EndEvent

E o resultado seria a reconstrução da variável original &cliente com todos os valores previamente carregados.

Conclusão

Então podemos concluir o seguinte, XML é excelente para transferir informações de um lado para outro, de sistema para outro sistema, e foi por essa razão que o formato ‘pegou’. Hoje já surgiram outros mais leves como o JSON, também manipulável pelo Genexus, mas ambos consistem em  mecanismos eficientes para fazer sistemas ou objetos conversarem.
Mas não para por ai, teste, por exemplo, armazenar o XML em uma variável de sessão, talvez você reconsidere a forma que anda armazenando os contextos de seu sistema.
Tão útil quanto um cabo para fazer uma 'chupeta' de uma bateria a outra, lembra da última vez quando ficou parado em um local escuro, com a bateria arriada, com a namorada impaciente no banco do carona, talvez até meio arrependidada de ter saido com 'o vacilão', e alguém apareceu com um cabinho milagroso. Então, nunca se sabe se você não terá que fazer uma 'chupeta' nos seus sistemas.

Marcadores

O Genexando agora possui marcadores, para facilitar a pesquisa sobre os diversos temas publicados.
Veja ai na coluna da direita a lista de temas publicados até o momento.

quarta-feira, 21 de setembro de 2011

Android Fail! adb get-state -e myGxAvd unknown

Como nesse mundo as coisas tendem a dar sempre erradas, não que eu seja pessimista, ao contrário, vou relatar os enroscos que ocorreram na tentativa de instalar o Android SDK em minha maquina. Como a probabilidade do seu equipamento ser totalmente diferente daquele que os desenvolvedores normais utilizam, então é provável que você necessite da dica abaixo.

Não abre o emulador (unknown)
Depois de tudo instalado e atualizado nos conformes do padrão Google, aproximadamente 3 Gb de informações, e no teste da kb simples Genexus, que foi compilada sem nenhum erro, tudo dentro do planejado, mas por alguma razão o emulador Android não subiu automaticamente.  Ao contrário o Output do Gx apresentou uma mensagem dizendo para aguardarmos alguns instantes.

Command:adb start-server
Command:adb get-state -e myGxAvd
unknown
Command:emulator -avd myGxAvd
Waiting for device to become ready... (this may take a while)

Salvo pelo Pablo, que com sua imensa paciência me relatou as possíveis causas e soluções para o caso.

Causas/Soluções Prováveis:

1.      Lentidão ao subir o emulador, devido a maquina não ter os recursos necessários de memória e processador.  Recomenda-se aqui subir manualmente o Emulador e em seguida executar a kb com um F5.

2.      Problema de instalação do Android SDK, o que parece incrível depois de tanto tempo perdido, ainda faltou uma pequena coisa. Alguém no meio do caminho não se dá bem com espaços em branco no nome do diretório.
  • Para consertar isso, precisa remover a pasta do Android SDK do diretório padrão de instalação, que provavelmente é algo semelhante a C:\Program Files (x86)\...,  passando-a para a pasta raiz do disco C:\\Android\android-sdk, isso porque existem espaços no diretório de acesso ao SDK. 
  • Em seguida alterar o PATH do Android SDK no Genexus, na propriedade do Environment, apontando para esse novo caminho.
Situações conhecidas pela Artech
Se o seu problema é outro, então recomendo o wiki da Artech que traz um montão de situações semelhantes.


segunda-feira, 12 de setembro de 2011

Dinossaur notebook!

O XXI Encontro Genexus nem acabou de começar e a tônica do evento foi fortemente definida: smartdevices.  

Já tinha tido contato com as primeiras versões lançadas da Evolution 2, confesso, sem muita empolgação, mas sem sombra de duvidas, a versão corrente já demonstra todo o poder e capacidade dos geradores de IOS, Blackberry e Android, e veja que estamos falando da Beta 4.

É espantoso como Genexus tornou simples temas muito complexos, como por exemplo, um domínio do tipo Address que gera uma opção para abrir o endereço no Google Maps, um dominio Phone que permite realizar uma chamada telefônica a partir de um numero em uma transação que representa um telefone, uma propriedade "Click to cloud", publica a aplicação na nuvem da Amazon, um pattern já gera praticamente a aplicação sem nenhum esforço, tornando o desenvolvimento um processo de definição de propriedades.

Não tenho a menor dúvida que de fato estamos frente a uma revolução tecnológica, e o meu sentimento está meio estranho, pois veja, ao carregar um notebook a tiracolo já estou me sentindo um 'dinossauro', parece que todo mundo está conectado o tempo todo, com seus iphones, ipads, androids,....

Então o que recomendo:

1.      Assistir a palestra do Armin Bachmann, Rodrigo Alvarez – Artech, que nos ensina como gerar uma aplicação: Developing an Application for Smart Devices with GeneXus X Evolution 2 (Part 1 e 2): http://www.genexus.com/meeting2011/speakers-materials?en,0,,2369

3.      Ter boas idéias