Arquivos da categoria : Delphi


Delphi XE5 OAuth – RESTDemos bug

Há um bug no demo RESTDemos do Delphi XE5 que faz com que os demos de OAuth não funcionem.

O Erro é pequeno apenas o evento para capturar o resultado da autenticação está errado, basta alterar de Tfrm_OAuthWebForm.OnBeforeRedirect  para OnAfterRedirect, como no exemplo do Facebook:

procedure Tfrm_Main.btn_Facebook_FetchAuthTokenClick(Sender: TObject);
var
  LURL: string;
  wv: Tfrm_OAuthWebForm;
begin
  edt_GoogleTasks_AuthCode.Text := '';
  edt_GoogleTasks_AccessToken.Text := '';

  LURL := 'https://www.facebook.com/dialog/oauth';
  LURL := LURL + '?client_id=' + URIEncode(edt_Facebook_AppID.Text);
  LURL := LURL + '&response_type=token';
  LURL := LURL + '&scope=' + URIEncode('user_about_me,user_birthday');
  LURL := LURL + '&redirect_uri=' + URIEncode('https://www.facebook.com/connect/login_success.html');

  wv := Tfrm_OAuthWebForm.Create(self);

// comentar a próxima linha
//  wv.OnBeforeRedirect := OAuth2_Facebook_AccessTokenRedirect;

// adicionar a próxima linha
  wv.OnAfterRedirect := OAuth2_Facebook_AccessTokenRedirect;
  wv.ShowModalWithURL(LURL);

  wv.Release;
end;

Já criei um QC para Embarcadero corrigir isto no repositório SVN dos demos:

Report No: 123999 – Status: Reported
RESTDemos OAuth error
http://qc.embarcadero.com/wc/qcmain.aspx?d=123999


Usando RealThinClient e RTTI para enviar Streams

Acabei de publicar mais um artigo sobre o RealThinClient no blog oficial

RTC RTTI

Este artigo mostra como criar uma aplicação servidora e cliente com os componentes RealThinClient, para enviar e receber objetos e listas de objetos. Para tal os objetos são convertidos para Stream usando a nova RTTI e Custom Attributes.

O programa exemplo é bem detalhado, as units compartilhadas entre servidor e cliente também estão num projeto DPK, e são utilizadas como referencia para outro projeto de testes unitários com DUnit que está incluído.

Os anexos no fim do artigo são:

  • Grupo de projetos com os exemplos
  • Download do artigo no formato PDF

Nos próximos dias estarei publicando outros artigos baseados no mesmo exemplo, explicando com mais detalhes as técnicas usadas.


Wizard de projetos DUnit não encontrado no Delphi XE3

Hoje depois de terminar de escrever um programa demostranção para meu último artigo sobre os componentes RTC SDK, eu queria criar um projeto de testes com DUnit, mas não encontrei o Wizard Unit Test no menu “File >> New >> Other”.

Então procurei no Registro do Windows se o pacote DUnit  (unittestide170.bpl) estava declarado em HKCU\Software\Embarcadero\BDS\10.0\Known IDE Packages\Delphi, e não estava, embora estivesse em HKCU\Software\Embarcadero\BDS\10.0\Known IDE Packages\CBuilder, somente disponível para C++ Builder.

Para encurtar a história, eu corrigi isto criando uma entrada em HKCU\Software\Embarcadero\BDS\10.0\Known IDE Packages\Delphi

  • Nome = $(BDS)\Bin\unittestide170.bpl
  • Valor = DUnit

Delphi DUnit Registry

Não sei o que aconteceu durante a instalação, mas depois de reiniciar a IDE do XE3 eu pude criar meu projeto de testes.

Delphi DUnit New Project

Read the English version of this post
DUnit project wizard missing in Delphi XE3


DHibernate – Features Explained Parte II

Leia também:

 

  • DHibernate – Features Explained Parte I

 

ITransaction

Opcional. Utilizada para gerenciar transações do banco de dados. Representa um objeto de vida curta para controlar unidades de trabalho atômicas.

Qualquer comando enviado para o banco de dados é controlado por uma transação, o DHibernate criará uma transação automaticamente sempre que necessário.  Uma ISession pode conter várias ITransaction.

Se a transação for criada manualmente, deve ser finalizada com Commit ou RollBack.

IQuery

Interface utilizada para executar queries no banco de dados e controlar como a query é executada.

Se precisar limitar os resultados de uma consulta, como o número máximo de linhas ou especificar a partir de que linha deseja recuperar, é necessário obter uma instancia de IQuery.

Utilize ISession.CreateQuery para obter uma nova IQuery.

ICriteria

Usada para criar dinamicamente queries orientadas a objetos e executá-las.

ICriteria representa uma query para uma classe persistente em particular.


DHibernate – Features Explained Parte I

Este é o primeiro artigo sobre as features do DHibernate.

Vou publicar uma série de artigos contendo explicações sobre a implementação do framework de persistência.

A publicação neste blog é para manter a referência do DHibernate em português, depois ele será traduzido para inglês e enviado para a revisão, e só então publicado no wiki do projeto.

IConfiguration

É a primeira classe a ser instanciada e contêm as configurações que identificam o Driver e Dialeto do banco de dados, classes de Cache e Transação e outras configurações que alteram o comportamento do framework.

Além de armazenar todos estes parâmetros esta classe validará as informações:

  • Arquivos externos de configuração.
  • Se os parâmetros de conexão do banco de dados estão corretos.
  • Carregar e validar os metadados de mapeamento das classes.
  • Carregar e validar as instruções sql pré-definidas como NamedSql.

Após toda a configuração estar carregada e validada é possível obter uma instancia de ISessionFactory, contendo todas estas configurações prontas para serem usadas, não sendo necessário efetuar nenhuma carga ou validação.

Deve ser criada uma IConfiguration para cada banco de dados ou para cada Schema, pois tudo será validado antes de se obter uma ISessionFactory.

ISessionFactory

É pesada, deve ser criada somente uma vez e compartilhada por todas as threads, então a implementação deve ser threadsafe.

Normalmente existe apenas uma instancia para toda a aplicação. Se for necessário conectar a mais de um banco de dados, deve ser criado uma instancia de ISessionFactory para cada conexão.

A única configuração carregada diretamente é  INameStrategy, que deve ser feita antes de se criar uma ISession, pois ela define as regras de como o framework vai gerar  nome de Tabelas, Colunas , Índices, Chaves Primárias e Estrangeiras.

ISessionFactory faz cache de intruções SQL geradas e metadados do mapeamento utilizados em tempo de execução.

Além de criar novas instancias de ISession, é responsável por guardar a referencia das ISession sendo utilizada através da propriedade CurrentSession.

ISession

É leve e pode ser criada sempre que necessário. Principal Interface, pois encapsula o Database Provider e todos os objetos necessários para a comunicação direta com o banco de dados. Também responsável pela criação de Transações.

Expõe métodos para localizar, salvar, atualizar e excluir objetos, também conhecida como Persistence Manager.

Após uma conexão ser estabelecida, é criado um cache de acordo com os parâmetros definidos em IConfiguration. Este cachê armazenara a referencia de todos os objetos persistentes, criados pelo usuário e salvos, ou recuperados do banco de dados. Pode ser considerada como uma coleção de objetos persistentes relacionados a uma única unidade de trabalho. Ver o Design Pattern Unit of Work.

Próximo Artigo:

  • ITransaction
  • IQuery
  • ICriteria

Delphi Hibernate

Objetivo

O projeto Jazz SDK precisava ser renovado, e desde que o publiquei, o Hibernate e o NHibernate se popularizaram e amadureceram, desta forma é natural a utilização do design e experiência existente nesta nova versão, para que os usuários e desenvolvedores utilizem toda a base de conhecimento já existente.

Deste ponto em diante, será utilizado à abreviação “XH” como referencia a “Hibernate e NHibernate”.

O desenvolvimento está sendo feito com o Delphi XE2, vários recursos utilizados só estão presentes a partir do Delphi 2010, mas somente após testar todo o framework em cada versão de Delphi, poderei dizer quais versões serão oficialmente suportadas, espero ter a ajuda de colaboradores para estes testes.

O framework DSharp será utilizado evitando duplicação de funcionalidades, restando mais tempo para focar nos recursos exclusivos do ORM.

Agradecimentos ao autor do DSharp, Stefan Glienke, por autorizar a utilização desta maravilhosa biblioteca.

Recursos

  • Uma versão futura com os recursos da versão mais atual do XH é planejada, no momento foi selecionado um subconjunto destes recursos que são os necessários para projetos atuais.
  • Todos os recursos selecionados seguirão o modelo já definido no XH sendo ajustado aos recursos do Delphi.
  • Qualquer outro recurso sugerido deverá primeiramente seguir o modelo XH, e outros qualquer outro caso será analisado antes de ser aceito.
  • Lista completa de Recursos da versão 1.0 http://code.google.com/p/delphi-hibernate/wiki/Features

Regras para colaboradores

O desenvolvimento será aberto e seguirá regras para manter a qualidade e o propósito:

  • O design deve seguir as especificações das API’s do XH, ajustadas aos recursos do Delphi.
  • Todo o código deve ser acompanhado de testes
    • DUnit
    • DSharp.Testing.Mock
  • Deverá ser criada a documentação correspondente ou pelo menos a referencia a documentação existente no XH.
  • A versão de desenvolvimento deve sempre ser compilável, mesmo que o recurso não esteja finalizado.
  • O código deve ser formatado de acordo com as regras definidas, um documento com  as regras será publicado junto com o arquivo de configuração de formatação do Delphi.
  • Para a colaboração ser aceita, deve ser solicitada a revisão do código, somente após os revisores aprovarem, o código será adicionado ao repositório principal.
  • Desejável um programa exemplo, compilável e com todas as dependências inclusas.

Projeto

O projeto está hospedado no Google Code no endereço:


WordPress – Tema Compre sua Casa 1

Tema WordPress - Compre sua CasaEsta semana conclui o projeto de um website para representação comercial, este é um tema que criei para o wordpress com PHP, este tema segue todos os padrões e recomendações do WordPress.

A barra lateral esquerda e a parte inferior central suportam widgets, então o administrador do site pode mudar qualquer um dos elementos para qualquer posição, configurar número de itens listados, remover um grupo, instalar plugins do wordpress e colocar nestas posições, mudando completamente a forma que o site se apresenta.

Eu utilizei Rad4PHP para trabalhar com este projeto, mas como se trata de uma programação de tema wordpress, o design do Rad4PHP não foi utilizado, apenas gerenciamento do projeto e editor PHP com os recursos de code completion e um pouco do debug.

Para este projeto estou trabalhando em um cliente em Delphi, que conecta via XML-RPC ao site para gerenciar Posts, Comentários, Categorias, Tags. Este cliente funciona como ferramenta auxiliar para o representante comercial gerenciar os seus contatos e agenda de trabalho, para o envio de fotos criei uma ferramenta que foi integrada ao projeto, que faz um tratamento das fotos, redimencionando em batch todas as fotos e convertendo para um padrão comum.

Já estou trabalhando para melhorar este projeto, organizando melhor, adicionando atalhos e integrando com o shell do windows para que o produto esteja pronto para venda em breve.


Restaurar “Welcome Page” do Delphi 1

As vezes a “Welcome Page” do Delphi simplesmente some, no Delphi 2009 isto acontecia o tempo todo, a partir do Delphi 2010 isto melhorou, mas as vezes quando eu fecho algum grupo de projetos o problema ocorre novamente, e podemos ver o “TEmbarcadero.Create” em vermelho no topo.

Para restaurar a página não é necessário reiniciar o Delphi, basta clicar com o botão direito do mouse na “Welcome Page” e em “Modo de Navegação”.

Delphi Welcome Page

Delphi - Restaurar Welcome Page