segunda-feira, 25 de maio de 2009

Integração com o Twitter

Semana passada estive no 11 encontro de profissionais de internet, patrocinado pela locaweb e finalmente entendi como se deve usar o Twitter. No encontro foi informado qual o canal do encontro #11elw e então peguei a grande sacada desta rede social. Os participantes estavam trocando opniões em tempo real sobre o assunto que os palestrantes estavam falando, simplesmente genial isso. Apesar de ser usuário a mais tempo, não etendia muito bem como deveria ser o uso desta rede social.
Bom, fiquei tão empolgado que resolvi estudar um pouco mais sobre o assunto.

Existe uma API para integração com o serviço e talvez esteja aí mais um motivo para que o Twitter faça tanto sucesso. A integração com outros aplicativos é muito simples e fácil de se implementar.

Neste post vou mostrar como integrar o uniPaaS com este serviço.

A primeira coisa que precisamos fazer é buscar as atualizações que o usuário do Twitter possui.
Para isso precisamos acessar o endereço:

O uniPaaS possui a função HTTPGet para retornar o valor de um endereço web numa variável Blob.
No caso do Twitter, precismos ainda passar o usuário e senha, então no nosso exemplo vamos atualizar a variável Blob com a seguinte expressão:
HTTPGet('http://nome_usuario_twitter:senha_usuario_twitter@twitter.com/statuses/friends_timeline.xml')

No meu caso, joguei essa informação para um arquivo XML que armazenei no meu projeto. Este arquivo irá lhe mostrar quais foram as últimas atualizações que o os seu usuário possui, como quem postou, hora, e imagem do usuário.
Infelizmente o uniPaaS não consegue mostrar uma imagem que está armazeada na web, você precisará "baixar" as imagens que o arquivo mostra. Para isso fiz um outro programa que verifica o nome do arquivo, faz downaload (novamente usei a função HTTPGet) e depois grava no sistema operacional, através do BLB2File.

Até aqui, já poderíamos ver quais são as atualizações que o usuário possui, mas o legal mesmo é a interação, vamos ver como podemos postar no Twitter.

Para isso, criei um programa onde o usuário pode digitar um texto (no máximo 140 caracteres) e ao clicar no botão atualizar, chamo uma função que dispara o seguinte comando.
HTTPPost ('http://nome_usuario_twitter:senha_usuario_twitter@twitter.com/statuses/update.xml?status='&Trim(A) )

Onde A é a variável que o usuário digitou.

Veja como ficou o resultado:



No próximo post, vou passar todo o código deste projeto.

Até a próxima

Saúde, Paz e mta Energia

Mau Ouriques

domingo, 16 de novembro de 2008

uniPaaS 1.5

uniPaaS 1.5

     Liberada a nova versão da ferramenta de desenvolvimento uniPaas versão 1.5 prometendo uma nova era para o desenvolvimento de sistemas.  Como o nome já disse a intenção é num único ambiente de desenvolvimento trazer o que a de melhor para o mundo do desktop  e web.

    Para o ambiente desktop foram anunciados varias melhorias para acelerar o desenvolvimento de novos e sofisticados aplicativos. Imagens animadas e com transparência, tooltip para funções no Editor de Expressões, hiperlink com possibilidade de troca de cores entre outras mais, são velhas reivindicações atendidas para esta versão.

    Já para o mundo web a troca de componentes Java para .Net promete dar mais estabilidade. A grande sacada da versão é o desenvolvimento RIA em inglês Rich Internet Application, traduzindo seria algo como Aplicações ricas para web, neste leia-se JavaScript e Ajax, é a ferramenta RAD entrando para o universo web 2.0.



Com a versão, você recebe duas demos dos aplicativos:


Magic Optmizer - ferramenta que analisa seu código e passa importantes informações sobre a estrutura do seu ambiente.

RM Comverter - ferramenta para retirar o RM Compatible que ocorre na conversão do versão 9 para 10. Permitindo a você iniciar o mais breve possível no mundo RIA.


Novos certificados

Os seguintes databases foram liberados e agora estão certificados:

  • MSSQL 2008
  • Oracle 11g

O seguinte sistema operacional foi checado e agora certificado:

  • Windows 2008 Server



Novas recursos, mudança de comportamento


Editor de expressões (Expression Editor)

  • A descrição da sintaxe da expressão foi acrescentada a lista de funções, tornando mais fácil para o desenvolver conhecer as funções
  • Um dinâmico tooltip exibindo a sintaxe da função foi adicionado. O Tooltip é aberto automaticamente mas você pode invocar novamente pressionando Ctrl+space


Lista de variáveis coloridas

As variáveis agora mudam de cor conforme o seu tipo (Virtual, Parameter ou Column)


Push Bottom

O Push Bottom control recebeu novas funcionalidades, agora é possível enviar parâmetros quando o botão é disparado através de um Raise Event.


Quando utilizado como um hiperlink, agora é possível alinhar horizontalmente (Esquerda, Direta, Centro)


    Adiciona a propriedade de Cor para o Hiperlink, com isso não teremos mais apenas hiperlinks com a cor cinza.



Tab

Uma nova propriedade chamada "Visible Layer List" promete definir as Guias que serão listadas no Runtime e também você poderá mostrar, esconder ou reordenar todas as guias com muito mais facilidade.



Imagens

Esta versão passa a suportar imagens transparente e animadas.




Modify in Query


O controle Modify in Query mode foi extendido para Edit e Check Box.



Evento Control Modify

Um novo evento chamando "Control Modify" foi adicionado. Este evento será disparado toda vez que um controle for modificado. Isto lhe ajudará a escrever uma lógica para ser executada após um valor ser alterado, inclusive caracter a caracter, sem que o usuário saia do controle. Para pegar o valor que o usuário está digitado você pode usar a função Editget().



Verify Operation

O Verify Operation recebeu as seguintes novidades:


  • Possibilidade de informar o título

  • Selecionar uma imagem para ser mostrada na janela de mensagem

  • Selecionar os tipos de botões que serão listados

  • Definir o tipo de mensagem que irá aparecer no log de mensagem



Chamadas entre programas

Um recurso bem interessante que foi incluído na versão é a capacidade de pular para um programa definido na operação Call Program. Para abrir o programa, basta pressionar Ctrl+F5 em cima da linha da operação. O eDev10 irá automaticamente abrir o programa, para retornar ao programa original basta pressionar Ctrl+Shift+F5.

Este recurso também pode ser acessado via Menu de Opções.


 

Open Aplication com parâmetro

Uma novo parâmetro opcional foi incluído no evento Open Aplication. Este parâmetro permite ao desenvolvedor trocar de aplicações sem a necessidade de uma intervenção do usuário.




Melhorias na função DBName()

Um novo parâmetro opcional (tipo informação) foi incluído na função DBName() para retornar informações adicionais da tabela, como Database name.



Função CabinetUnload()

Uma nova função foi adicionada para permitir ao desenvolvedor descarregar o componente. Através desta função é possível deduzir que cada componente carregado consome memória, então tenha zelo ao utilizar componentes na sua solução.



Mensagem de aviso para Programas grandes

A verificação de programas recebeu melhorias, como mostrar uma mensagem quando a performance do programa pode ser prejudicada pelo tamanho do mesmo. A verificação do tamanho pode ser ativada através de um novo item na sessão Special chamado "SpecialProgXMLSizeWarning". A mensagem pode ser disparada conforme o tamanho especificado no ambiente. 
Aqui mais uma vez, vemos que o desenvolvedor precisa ter cuidado com a engenharia de seus programas.




Maurício Ouriques
Pesquisa & Desenvolvimento 
16 de Novembro de 2008


sexta-feira, 19 de setembro de 2008

Como atualizar subform usando Event

Nos deparamos com o seguinte problema, temos um programa de Ordem de Serviço que possui dois subforms, um para os itens e outro dentro deste para as atividades do item. Quando estávamos posicionados nas atividades do item (3ª task), realizamos algumas alterações nos registros e queríamos atualizar os dados dos itens (2ª task) sem sair da task de atividades, ou seja, precisamos atualizar o dataview da task pai. Para isso encontrei uma solução que gostaria de compartilhar.




Tenho a seguinte estrutura no programa, a task principal abre a tabela Ordem de Serviço no Main Table. Nesta task tenho um form onde tenho alguns campos da O.S. e também um subform para os itens da O.S.
Na task filha, temos a abertura da tabela Itens da OS, no form desta task alguns campos do Item e também um subform para as atividades do Item da OS.
Na task Atividade da OS, também temos alguns campos no form e um botão chamado Atualizar Item. Quando clicar neste botão, vou atualizar todos os Itens da OS, neste caso, já vou querer ver as alterações nos registros.









Para resolver este problema, vamos criar um Evento (CTRL+U) na task inicial (O.S.) chamado AtualizarSubForm, adicionando um parâmetro neste evento que iremos chamar de p_nomeForm




Vamos implementar o evento na task e dentro do evento vamos adicionar um Raise Event SubForm Refresh, passando como parâmetro a variável p_nomeForm.



Para finalizar vamos alterar a propriedade do Event para Propagate=Yes

Agora quando estivermos posicionados nas atividades da O.S. conseguiremos disparar o evento da task inicial, passando como parâmetro o nome do subForm que desejamos atualizar, no meu caso ‘FormItem´.



Agora basta implementar em seus programas.

Boa sorte.

Maurício Ouriques

terça-feira, 6 de novembro de 2007

Refresh - Como atualizar os registros da tela

A intenção deste post é mostrar as diferenças entre Record Flush,
Screen Refresh e View Refresh.

Record Flush

O evento interno Record Flush causa a gravação do registro sem sair do
mesmo. Após a execução o ciclo do registro corrente é completado.


Screen Refresh

O evento interno Screen Refresh permite ao desenvolvedor atualizar os
dados da tela. Primeiro, o ciclo do registro em que se está
posicionado é completado (como ocorre no evento Record Flush), Depois
a operação Get Current é realizada para cada registro da tela. Você
deve usar este evento quando desejar atualizar os registros que estão
sendo mostrado na tela. O registro atual não será alterado (exceto
quando outro usuário alterar o registr).


View Refresh

O evento View Refresh permite ao desenvolvedor atualizar os dados da
tela. Primeiro , o ciclo do registro atual é completado (como ocorre
no evento Record Flush). Depois, o dataview é criado baseando-se na
definição do dataview (Range, Locate e Sort). Você deve usar este
evento quando desejar atualizar completamente o dataview. O eDeveloper
irá tentar manter o cursor no mesmo registro posicionado.
Quando usar este evento, se o evento Get Current (posicionar no
registro) falhar, a mensagem "Record is not longer in view" será
mostrada e irá posicionar no próximo registro (baseado na definição do
dataview). A operação Ger Current pode falhar porque outro usuário
pode excluir o registro ou modificá-lo.

Maurício Ouriques

sexta-feira, 24 de agosto de 2007

Configurando eDev10 para usar Web Services


Caso você esteja com problemas em configurar o ambiente eDeveloper 10 para uso de Web Services, segue um roteiro explicando como configurar.
Utilize a versão 1.5.0 do Java JDK.
1. Environment Variables:
When typing "%WASP_HOME%" in "Start->Run" you should navigate to the SSJ directory that was created by eDeveloper 10 installation.
When typing "%JAVA_HOME%" you should navigate to the installed Java directory along side SSJ (if you didn't have Java when installing eDeveloepr) or to another location if Java was installed before eDeveloper, in this case you must make sure you have JDK version 1.5.

2. In the %WASP_HOME%\lib directory you should find many JAR files (among them edevSSJ.jar and edevRequester.jar).

3. After you create the service entry and load it (at the moment you can't reach this) you should have a new JAR file under "Magic directory/SoapClientModules/Service name".


You can identify the JAVA version by opening the "ReadMe.html" file located under your %JAVA_HOME%.

sexta-feira, 17 de agosto de 2007

Magic - Rich Client

A Magic está finalizando um novo método para desenvolvimento de programas que estão chamando de Rich Client. Este novo conceito ainda não está liberado oficialmente mas já está incluso no pacote 10.1 SP3 liberado esta semana, para seu uso é necessário uma nova licença.

Este novo conceito de programação é totalmente voltado para ambiente Web, uma das grandes vantagens é a utilização de computadores com baixa configuração. Mesmo sendo um produto web, será possível utilizar todos os recursos de interface GUI disponíveis atualmente, permitindo uma interação completa com o usuário. Outra vantagem que eles estão anunciando é a execução da ferramenta em vários sistemas operacionais, inclusive em dispositivos móveis.

Falando mais tecnicamente, este novo recurso utiliza uma aplicação JAVA que irá rodar no lado do client, eles prometem uma performance surpreendente. A vantagem será que o usuário não precisa utilizar um navegador web (no browser), a ferramenta utiliza seu próprio mecanismo de navegação.

Falando um pouco mais sobre os recursos de interface, estarão disponíveis os controles tree view, tab control, combo Box, list Box, etc. Teremos integração com menus. Houve uma melhoria considerável no table control para web, permitindo sort, multi marking, resizing columns.

OS recursos não param por ai, o aplicativo poderá executar comandos no S.O. do usuário, também será permitido a integração com ActiveX, manipulação de arquivos e no ambiente do sistema operacional.

Para finalizar, este ambiente rodará em Windows, Linux ou ainda Mac OS, podendo ser utilizado em celulares com Windows Mobile ou CE.

Agora é esperar para ver.


Maurício Ouriques

segunda-feira, 13 de agosto de 2007

eDeveloper 10 SP3

Acaba de ser liberado o novo SP da ferramenta, com grandes melhorias. Veja...

Liberado novo release do eDev 10 SP3

Version Control

Permite trabalhar com aplicativo de controle de versão chamado PushOK

http://www.pushok.com/soft_cvs_proxy.php

http://www.pushok.com/soft_cvs_vsvss.php

Browse Client

Melhorias nos scripts eDevScripts (Browse Client)

Migração

Agora permite migrar parte de uma aplicação v9, como range de programas.

Suporte PDF

O eDev10 agora suporta imprimir diretamente para um arquivo PDF, eliminando a necessidade de configurar uma impressora PDF

Possibilita implementar política de segurança em vários níveis com proteção por senha para impressão, cópia ou anotação.

Arquivo de Segurança

Um novo utilitário chamado MgUsrDmp.exe é instalado na pasta eDeveloper.

Este utilitário permite exportar o arquivo de segurança para um arquivo XML, tornando fácil o acesso e pesquisa as informações do usuário.

Para rodar este utilitário você precisa informar a senha do usuário SUPERVISOR.

Utilitário para extração de String

Um novo utilitário foi desenvolvido para permitir a você extrair frases do seu projeto do arquivo XML.

Este utilitário irá ajudá-lo quando você precisar traduzir o sistema para multi-linguagens.

Este utilitário pode ser executado por ambas as FERRAMENTA (Tools) de menus como um componente.

Gerenciamento de Janelas

A função SetWindowsFocus() foi melhorada para permitir setar o foco em outras janelas que não pertencem ao eDeveloper.

Retorno de valor de Store Procedure para MSSQL

Agora a ferramenta suporta receber o valor de uma SP do MSSQL

Isso pode ser feito escrevendo "? =" no enunciado DSQL ("EXEC ? = proc_name") e receber o retorno na variável virtual do return code do SQL Command.

Utilizando Cursor para MSSQL em Store Procedure

O eDeveloper agora suporta usar cursor para enunciados DSQL que retornam um result set.

Isso pode ser feito adicionando "/*=== CURSOR=Y ===*/" no DSQL.

Suporte a SP no DB2

Agora com suporte as Store Procedures do banco DB2.