Watch, Follow, &
Connect with Us

Andreano Lanusse

My new blog / Meu novo blog / Mi nuevo blog

Hi everyone, I’m moving my blog to my domain at www.andreanolanusse.com, just because I will have more flexibility to make changes on my blog and as well play with Wordpress. i will be talking about all kinds of technologies and of course most of them about Delphi.

Olá a todo, estou mudando meu blog para o meu domínio www.andreanolanusse.com, onde eu terei maior flexibilidade para fazer o que quiser com meu blog and aprender mais sobre Wordpress. Eu estarei escrevendo sobre as mais variadas tecnologias e claro que a grande maioria relacionada ao Delphi.

Posted by Andreano Lanusse on March 3rd, 2010 under Uncategorized | Comment now »


La semana del DBA empieza mañana - 3 de Marzo a las 8am (PST)

Todavia hay tiempo para registrarse para los 3 seminarios web que seran realizados esta semana, gratuito y en línea.

Regístrese ahora

Posted by Andreano Lanusse on March 2nd, 2010 under Events, Spanish | Comment now »


Delphi Developer Days IV - videos disponibles

Atención comunidad, los vídeos de Delphi Developer Day IV ya están disponibles, ustedes pueden asistir en linea o hacer el download, como le guste.

Posted by Andreano Lanusse on March 1st, 2010 under Delphi, Events, Spanish | 2 Comments »


La semana del DBA - Modelado, Gestión y Performance

Posted by Andreano Lanusse on February 17th, 2010 under English, Events | Comment now »


Delphi Developer Day IV en Español - 26 de febrero


Posted by Andreano Lanusse on February 3rd, 2010 under Delphi, Events, Spanish | 1 Comment »


Delphi Conference Online - Brasil - dia 25 de fevereiro

Posted by Andreano Lanusse on February 3rd, 2010 under Delphi, Events, Portuguese | Comment now »


iPad the new BIG IPHONE :)

Apple Wednesday announced a touchscreen tablet computer, the "iPad" for consumers who want to take their movies, TV shows, music, games and reading with them, be it around the house or on the go.

If you’re a current iPhone user, much of the interaction with the iPad looks to be very familiar. For instance, tilting the iPad gives you portrait or landscape viewing — both orientations support a lovely full screen keyboard. It also appears that the app icons on the “home screen” change orientation too.

Apple iPad specs:

  • 9.7-inch display with 0.5-inches thickness.
  • 16GB to 64GB of on-board flash memory
  • 10 hrs of battery life. Over a month for standby
  • 1GHz Apple A4 chip (developed for the iPad)
  • WiFi 802.11n
  • Bluetooth 2.1
  • accelerometer
  • digital compass
  • speaker and a microphone
  • 30-pin dock connector

Looking forward to see the new iPad, particular when I was looking to buy a Amazon Kindle, but now I think Amazon will accelerate the Kindle 3.

Posted by Andreano Lanusse on January 27th, 2010 under English | 6 Comments »


RADTweet – Twitter desktop client build with Delphi

Finally after few weeks the RADTweet source code is available to download. RADTweet is a desktop client for twitter build in Delphi. The idea behind this project is to show how to use Twitter API and how you can interact the Delphi features with Twitter. This is an Open Source project under MIT License.

There are many other features to add using the Twitter API, anybody can contribute to improve the RADTweer, is Open Source.

The application is one sinble EXE file, at the first start up it 3 files will be created, those binaries files are use to cache messages and configuration, and can be read from ClientDataSet.

The application has some features, like:

  • List of messages
  • List of Mentions
  • List of followers
  • Set message as favorite
  • Also, show how many friends, followers and following people
  • And many other features

Also, XML format is use to read the Twitter API response and when necessary save the information in ClientDataSet as a cache mechanism, download the source code or the binary and have fun.

If you would like to contribute with this project you are very welcome, as much you contribute you will be came officially part of the project.

The RADTweet source code is available in SorceForge, also the version 1.0

Posted by Andreano Lanusse on January 22nd, 2010 under Delphi, English | 6 Comments »


Open Source Obligations

Starting 2010 and reading some interesting blog posts, one get my attention - Open Source Obligations, many people wanna use FREE and/or Open Source, but they don’t wanna give their code or part for FREE, in the other side people are criticized for giving something away, yet somehow not giving enough.

Posted by Andreano Lanusse on January 4th, 2010 under Delphi, General | Comment now »


Como implementar Failover e Load Balance no DataSnap 2010

Uma pergunta frequente dos desenvolvedores durante as minhas viagens pela America Latina está relacionado ao desenvolvimento multicamada com DataSnap, após explicar toda a tecnologia sempre vem a pergunta "Como implementar Failover e Load Balance neste tipo de aplicação, o que é mais do que natural.

Quando pensamos em servidores de aplicação como parte do nosso desenvolvimento multicamada temos como um dos objetivos centralizar processamento, investimento em hardware, atualizações, etc. Quando pensamos em centralizar precisamos pensar também em redundância, ou seja, se um servidor falhar outro deve assumir, também pensamos em dividir a carga de processamento, ou seja, de acordo com o volume de processamento de cada servidor no momento redirecionamos a carga para que estiver menos sobrecarregado, chamamos isso de load balance.

Implementar essas duas características até então não era algo muito simples e exigia muito código, agora com o DataSnap 2010 a história é bem diferente.

DataSnap 2010 traz um recurso chamado HTTP Tunneling que lhe permite o controle do direcionamento da informação que está sendo enviada/recebida entre cliente e servidor. Como o próprio nome diz HTTP Tunneling, você terá que utilizar HTTP como Transporter na sua aplicação cliente para usufruir destas vantagens, o que não é um problema. Caso você queira utilizar TCP/IP na aplicação cliente, não será possível utilizar este recurso de forma simples, então recomendo utilizar HTTP.

Implementar Load Balance e Failover quer dizer criar um middleware entre a aplicação cliente e servidora, este middleware será responsável por decidir o que fazer com a informação recebida, para onde enviar, quando enviar, como enviar, etc.

Traduzindo isso para o mundo DataSnap, teremos uma aplicação cliente conectando a um servidor que neste caso chamaremos de Failover e o servidor DataSnap, o servidor de Failover será o nosso Firewall, neste post vou simular a queda de um servidor DataSnap e automaticamente a conexão será direcionada para outro servidor DataSnap.

Não é necessário fazer grandes mudanças na sua aplicação para suportar HTTP Tunneling, basicamente é ter a aplicação cliente conectando ao servidor de Failover através de HTTP, do servidor de Failover para o servidor DataSnap você poderá usar TCP/IP ou HTTP.

O servidor Failover terá apenas 2 componentes, o DSHTTPService que representa o seu Failover Server e estará conectado ao DSHTTPServiceAuthenticationManager, apenas para questões de segurança, pois quero que somente pessoas autorizadas conectem a este servidor.

Para habilitar o recurso de HTTP Tunneling você terá que implementar os eventos referente ao HTTP Service Tunnel Service, que são:

  • DSHTTPService1.HttpServer.TunnelService.OnErrorOpenSession
  • DSHTTPService1.HttpServer.TunnelService.OnErrorWriteSession
  • DSHTTPService1.HttpServer.TunnelService.OnErrorReadSession
  • DSHTTPService1.HttpServer.TunnelService.OnOpenSession
  • DSHTTPService1.HttpServer.TunnelService.OnWriteSession
  • DSHTTPService1.HttpServer.TunnelService.OnReadSession
  • DSHTTPService1.HttpServer.TunnelService.OnCloseSession

Cada um destes eventos será executado na sua ordem natural ou quando algum erro ocorrer, os nomes de cada evento são obvios, a aplicação exemplo implementa todos estes eventos, com o objetivo de mostrar no log as informações enviadas e recebidas durante a utilização da mesma.

No caso de uma solução de Failover todos os eventos devem ser implementados, os eventos OnErrorXXX entrarão em ação quando um erro ocorrer e necessitam do conteúdo que está sendo transferido para saber o que fazer, assim sendo eles dependem dos outros eventos. Neste posto vou focar no evento OnErrorOpenSession o qual irá efetuar o redirecionamento em caso de error na abertura de sessão.

Abaixo a implementação do método chamado Redirect que esta associado ao evento OnErrorOpenSession, repare que os dados da Sessão e conteúdo são parâmetros neste método, ou seja, tudo o que precisamos para poder redirecionar a informação.

Como controle estamos utilizando o Session.UserFlag, para permitir apenas um redirecionamento e caso o Sender seja uma Exception vamos armazenar a mensagem de error. A seguir criamos um DBXProperties que contém as informações do novo servidor que deverá ser redirecionado, neste exemplo utilizei o mesmo HostName, mas a porta será a 213, ou seja, tenho outro servidor DataSnap.

A partir dai basta reabrir a sessão com as novas propriedades que a mesma será redirecionada para o novo servidor.

Você pode estar achando fácil demais, na verdade é muito fácil.

procedure TForm6.Redirect(Sender: TObject; Session: TDSTunnelSession; Content: TBytes; var Count: Integer);
var
  DBXProperties: TDBXDatasnapProperties;
  Msg: String;
begin
  if Sender is Exception then
    Msg := Exception(Sender).Message;
  Log('>>' + Msg);

  if Session.UserFlag = 1 then
    Raise Exception.Create('Backup session cannot be redirected once more.' + Msg);

  DBXProperties := TDBXDatasnapProperties.Create(nil);
  DBXProperties.Values[TDBXPropertyNames.DriverName] := 'Datasnap';
  DBXProperties.Values[TDBXPropertyNames.HostName]  := 'localhost';
  DBXProperties.Values[TDBXPropertyNames.Port]      := '213';

  try
    try
      Session.Reopen(DBXProperties);
      Session.UserFlag := 1;

      Msg := 'Flow commuted to alternate resource.';
      Log('>>' + Msg);
    except
      Raise Exception.Create(Msg + '. Commuting to alternate resource failed.');
    end;
  finally
    DBXProperties.free;
  end;

end;

Claro que você está curioso pra saber como funciona a execução, o que você precisa é um servidor DataSnap, servidor Failover e a aplicação cliente, neste caso utilize o próprio Data Explorer do Delphi será utilizando como aplicação cliente. A seguir os passos para executar este exemplo:

  1. Execute o servidor Failover, o exemplo utiliza HTTP e porta 8080
  2. Execute 2 instâncias do servidor DataSnap, uma na porta 211 e outra na porta 213, o servidor na porta 213 será o servidor de backup em caso de falho do servidor que está na porta 211
  3. Crie um DataSnap alias no Data Explorer, lembre-se de utilizar o protocolo HTTP e porta 8080
  4. Execute o método EchoString que aparece na lista de Procedures, passe o valor Delphi 2010 como parâmetro e execute, veja que o retorno será Delphi 2010 (Server 211)
  5. Feche a aplicação DataSnap server, porta 211
  6. Repita o passo número 4 e veja que o retorno será Delphi 2010 (Server 213)
  7. Veja o log no servidor Failover, você verá uma exception e o redirecionamento ocorrendo

Para facilitar o entendimento preparei um vídeo apresentando como executar este exemplo.

Você pode efetuar o download do código fonte aqui

Para outros posts relacionados ao DataSnap, clique aqui

Posted by Andreano Lanusse on December 29th, 2009 under Delphi, Portuguese | 2 Comments »


Server Response from: BLOGS1