<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Andreano Lanusse Blog</title>
	<atom:link href="http://www.andreanolanusse.com/blogpt/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.andreanolanusse.com/blogpt</link>
	<description>Delphi Programming, cinema, praia, vida e tudo que eu puder compartilhar de bom</description>
	<lastBuildDate>Thu, 11 Mar 2010 15:04:10 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Semana do DBA &#8211; Gestão de dados e mudança em ambientes heterogêneos</title>
		<link>http://www.andreanolanusse.com/blogpt/semana-do-dba/</link>
		<comments>http://www.andreanolanusse.com/blogpt/semana-do-dba/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 13:32:32 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Destaque]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/blogpt/?p=804</guid>
		<description><![CDATA[Amigos desenvolvedores, DBAs, arquitetos e todos conectados ao mundo do software.
Para aqueles que participaram da minha apresentação  na Semana do DBA sobre o tema Gestão de dados e mudança em ambientes heterogêneos, onde foram abordados temas relacionados a administração de diversos bancos de dados em diferentes plataformas, sincronização de dados, schemas e configuração de servidores.
Comente [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-798" style="border: 0pt none; margin: 4px;" title="Semana do DBA" src="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/03/semanadodba.jpg" alt="" width="340" height="150" />Amigos desenvolvedores, DBAs, arquitetos e todos conectados ao mundo do software.</p>
<p>Para aqueles que participaram da minha apresentação  na Semana do DBA sobre o tema <strong>Gestão de dados e mudança em ambientes heterogêneos</strong>, onde foram abordados temas relacionados a administração de diversos bancos de dados em diferentes plataformas, sincronização de dados, schemas e configuração de servidores.</p>
<p>Comente sobre o evento no seu twitter usando o hashtag <strong><a href="http://twitter.com/search?q=%23SemanadoDBA" target="_blank">#SemanadoDBA</a></strong>, você pode também me seguir no Twitter (<strong><a href="http://twitter.com/andreanolanusse" target="_blank">@andreanolanusse</a></strong>) e acompanhar os comentários sobre o evento.</p>
<p>Abaixo segue alguns links relacionados as soluções apresentadas:</p>
<p>Artigos e Vídeos gratuitos no EDN – Embarcadero Developer Network &#8211; <strong><a href="http://edn.embarcadero.com/br" target="_blank">http://edn.embarcadero.com/br</a></strong><br />
Download de trial dos produtos Embarcadero &#8211; <strong><a href="http://www.embarcadero.com/downloads" target="_blank">http://www.embarcadero.com/downloads</a></strong><br />
Embarcadero Database Management Solution</p>
<ul>
<li>DBArtisan &#8211; administração e monitoramente de banco de dados &#8211; <a href="http://www.embarcadero.com/br/products/dbartisan" target="_blank"><strong>http://www.embarcadero.com/br/products/dbartisan</strong></a></li>
<li>Change Manager &#8211; sincronização de schema, dados e configuração de bancos de dados &#8211; <strong><a href="http://www.embarcadero.com/br/products/changemanager" target="_blank">http://www.embarcadero.com/br/products/changemanager</a></strong></li>
</ul>
<p>Amanhã tem mais, vamos falar sobre Performance, SQL Tunning e efeciência e disponibilidade 24&#215;7</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">
<div style="line-height: 125%; margin-top: 7.2pt; margin-bottom: 0pt; margin-left: 0.19in; text-indent: -0.19in; text-align: left; direction: ltr; unicode-bidi: embed; vertical-align: baseline;"><span style="font-size: 20pt;"><span style="color: #c4262e; font-size: 125%;">•</span></span><span style="font-size: 20pt; font-family: Arial; color: #565a5c;">EDN – Embarcadero Developer Network</span></div>
<div class="O1" style="line-height: 125%; margin-top: 5.04pt; margin-bottom: 0pt; margin-left: 0.56in; text-indent: -0.19in; text-align: left; direction: ltr; unicode-bidi: embed; vertical-align: baseline;"><span style="font-size: 14pt;"><span>•</span></span><span style="font-size: 14pt; font-family: Arial; color: #565a5c;"><a href="http://edn.embarcadero.com/br">http://edn.embarcadero.com/br</a></span><span style="font-size: 14pt; font-family: Arial; color: #565a5c;"> (Artigos e Vídeos)</span></div>
<div style="line-height: 125%; margin-top: 7.2pt; margin-bottom: 0pt; margin-left: 0.19in; text-indent: -0.19in; text-align: left; direction: ltr; unicode-bidi: embed; vertical-align: baseline;"><span style="font-size: 20pt;"><span style="color: #c4262e; font-size: 125%;">•</span></span><span style="font-size: 20pt; font-family: Arial; color: #565a5c;">Trial Download</span></div>
<div class="O1" style="line-height: 125%; margin-top: 5.04pt; margin-bottom: 0pt; margin-left: 0.56in; text-indent: -0.19in; text-align: left; direction: ltr; unicode-bidi: embed; vertical-align: baseline;"><span style="font-size: 14pt;"><span>•</span></span><span style="font-size: 14pt; font-family: Arial; color: #565a5c;"><a href="http://www.embarcadero.com/downloads">http://www.embarcadero.com/downloads</a></span><span style="font-size: 14pt; font-family: Arial; color: #565a5c;"> </span></div>
<div style="line-height: 125%; margin-top: 7.2pt; margin-bottom: 0pt; margin-left: 0.19in; text-indent: -0.19in; text-align: left; direction: ltr; unicode-bidi: embed; vertical-align: baseline;"><span style="font-size: 20pt;"><span style="color: #c4262e; font-size: 125%;">•</span></span><span style="font-size: 20pt; font-family: Arial; color: #565a5c;">Embarcadero Database Management Solution</span></div>
<div class="O1" style="line-height: 125%; margin-top: 5.04pt; margin-bottom: 0pt; margin-left: 0.56in; text-indent: -0.19in; text-align: left; direction: ltr; unicode-bidi: embed; vertical-align: baseline;"><span style="font-size: 14pt;"><span>•</span></span><span style="font-size: 14pt; font-family: Arial; color: #565a5c;"><a href="http://www.embarcadero.com/br/products/dbartisan">http://</a></span><span style="font-size: 14pt; font-family: Arial; color: #565a5c;"><a href="http://www.embarcadero.com/br/products/dbartisan">www.embarcadero.com/br/products/dbartisan</a></span><span style="font-size: 14pt; font-family: Arial; color: #565a5c;"> </span></div>
<div class="O1" style="line-height: 125%; margin-top: 5.04pt; margin-bottom: 0pt; margin-left: 0.56in; text-indent: -0.19in; text-align: left; direction: ltr; unicode-bidi: embed; vertical-align: baseline;"><span style="font-size: 14pt;"><span>•</span></span><span style="font-size: 14pt; font-family: Arial; color: #565a5c;"><a href="http://www.embarcadero.com/products/changemanager">http://www.embarcadero.com/br/products/changemanager</a></span><span style="font-size: 14pt; font-family: Arial; color: #565a5c;"> </span></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/blogpt/semana-do-dba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Semana do DBA &#8211; começa hoje 10 de março &#8211; divulgue no Twitter #SemanadoDBA</title>
		<link>http://www.andreanolanusse.com/blogpt/semana-do-dba-comeca-hoje-10-de-marco-divulgue-no-twitter-semanadodba/</link>
		<comments>http://www.andreanolanusse.com/blogpt/semana-do-dba-comeca-hoje-10-de-marco-divulgue-no-twitter-semanadodba/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 08:41:21 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Eventos]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/blogpt/?p=799</guid>
		<description><![CDATA[Amigos desenvolvedores, DBAs, arquitetos e todos conectados ao mundo do software. Hoje dia 10 de março, começamos a Semana do DBA, uma série de três apresentações online sobre temas como: modelagem, arquitetura, gestão, SQL tunning e performance de bancos de dados.
Se você já recebeu a confirmação da sua inscrição, basta conectar, sugerimos conectar 10 minutos [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-798" style="border: 0pt none; margin: 4px;" title="Semana do DBA" src="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/03/semanadodba.jpg" alt="" width="340" height="150" />Amigos desenvolvedores, DBAs, arquitetos e todos conectados ao mundo do software. Hoje dia 10 de março, começamos a Semana do DBA, uma série de três apresentações online sobre temas como: modelagem, arquitetura, gestão, SQL tunning e performance de bancos de dados.</p>
<p>Se você já recebeu a confirmação da sua inscrição, basta conectar, sugerimos conectar 10 minutos antes.</p>
<p>Comente sobre o evento no seu twitter usando o hashtag <strong><a href="http://twitter.com/search?q=%23SemanadoDBA" target="_blank">#SemanadoDBA</a></strong>, você pode também me seguir no Twitter (<strong><a href="http://twitter.com/andreanolanusse" target="_blank">@andreanolanusse</a></strong>) e acompanhar os comentários sobre o evento.</p>
<p>Devido ao grande interesse as inscrições estão encerradas, agora estamos com uma fila de espera onde iremos confirmado de acordo com o andamento do evento.</p>
<p>Até daqui a pouco.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/blogpt/semana-do-dba-comeca-hoje-10-de-marco-divulgue-no-twitter-semanadodba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compendium &#8211; filtros Open Source para DataSnap 2010</title>
		<link>http://www.andreanolanusse.com/blogpt/compendium-filtros-open-source-para-datasnap-2010/</link>
		<comments>http://www.andreanolanusse.com/blogpt/compendium-filtros-open-source-para-datasnap-2010/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 08:16:10 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi (Win32)]]></category>
		<category><![CDATA[DataSnap]]></category>
		<category><![CDATA[Destaque]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/blogpt/?p=791</guid>
		<description><![CDATA[O novo recurso para filtragem de dados enviado e recebido no DataSnap 2010, isso quer dizer que você pode interagir com estes dados antes que eles sejam enviados ou recebidos. Este novo recurso já traz um filtro de compressão e permite a criação de qualquer outro tipo.
Um desenvolver da Itália (Daniele Teti) resolveu criar vários [...]]]></description>
			<content:encoded><![CDATA[<p>O novo recurso para filtragem de dados enviado e recebido no DataSnap 2010, isso quer dizer que você pode interagir com estes dados antes que eles sejam enviados ou recebidos. Este novo recurso já traz um filtro de compressão e permite a criação de qualquer outro tipo.</p>
<p>Um <a href="http://www.danieleteti.it/" target="_self">desenvolver da Itália (Daniele Teti)</a> resolveu criar vários novos filtros para o DataSnap 2010 e os chamou de <strong>DataSnap Filters Compendium,</strong> composto por 9 filtros, dividos em 3 grupos:</p>
<p>HASH &#8211; cria um hashcode para os dados enviados, ajudando a detectar qualquer tipo de alteração dos dados durante a transmissão</p>
<ul>
<li>MD5</li>
<li>MD4</li>
<li>SHA1</li>
<li>SHA512</li>
</ul>
<p> </p>
<p>CIPHER &#8211; filtro utilizado para encriptar os dados enviados entre servidor e cliente DataSnap, abaixo 4 diferentes tipos de criptografia</p>
<ul>
<li>Blowfish</li>
<li>Rijndael</li>
<li>3TDES</li>
<li>3DES</li>
</ul>
<p> </p>
<p>COMPRESS &#8211; Filtro para compressão de dados, este filtro é 3 vezes mais rápido que o zLib</p>
<ul>
<li>LZO</li>
</ul>
<p>Sem dúvida uma excelente contribuição do Daniele para a comunidade, os fontes estão disponíveis no <a href="http://code.google.com/p/dsfc/" target="_self">Google Code</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/blogpt/compendium-filtros-open-source-para-datasnap-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilizando LINQ to Objetcs em Delphi Prism</title>
		<link>http://www.andreanolanusse.com/blogpt/utilizando-linq-to-objetcs-em-delphi-prism/</link>
		<comments>http://www.andreanolanusse.com/blogpt/utilizando-linq-to-objetcs-em-delphi-prism/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 08:27:50 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi Prism (.NET)]]></category>
		<category><![CDATA[Delphi Prism]]></category>
		<category><![CDATA[Destaque]]></category>
		<category><![CDATA[LINQ]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/blogpt/?p=770</guid>
		<description><![CDATA[Durante os últimos 10 anos as linguagens, frameworks e plataformas de desenvolvimento tiveram inúmeras evoluções, todos nós sabemos estas foram para melhor, mas em especial uma eu considero como uma das maiores inovações dos últimos 10 anos e se chama LINQ.
LINQ é um conjunto de extensões para o .NET Framework que abrange operações de consulta [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-773" style="border: 0pt none; margin: 4px;" title="Delphi Prism" src="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/03/Icon_DelphiPrism.png" alt="" width="175" height="175" />Durante os últimos 10 anos as linguagens, frameworks e plataformas de desenvolvimento tiveram inúmeras evoluções, todos nós sabemos estas foram para melhor, mas em especial uma eu considero como uma das maiores inovações dos últimos 10 anos e se chama LINQ.</p>
<p>LINQ é um conjunto de extensões para o .NET Framework que abrange operações de consulta integrada à linguagem, definição e transformação. Através de qualquer linguagem para .NET você pode efetuar consultas através de bibliotecas de classes para tirar proveito desses recursos.</p>
<p>Existem várias formas de utilização do LINQ, consultando objetos, XML e banco de dados, já existem outras implementações que permitem efetuar consulta em outros artefatos.</p>
<p>Para começar a entender, vou exemplificar a utilização de LINQ consultando uma lista de objetos, mais conhecido como LINQ to Objects.</p>
<p>O código fonte dos exemplos aqui utilizando se encontram no diretório de exemplos do Delphi Prism, pasta Linq, estes foram desenvolvidos por mim mesmo e incorporados ao produto.</p>
<p>Veja a classe abaixo, esta contém um Array of String, imagine a situação onde você deseja filtrar estes dados, ordenar de diversas formas e o retorno ser uma classe. Isso é o que podemos fazer com LINQ.</p>
<pre class="brush: delphi">type
  Words = public class
  private
    words : Array of String := ['hello', 'Delphi Prism', 'wonderful', 'linq', 'beautiful', 'world' ];
  public
    method SimpleSelect;
    method ComplexSelect;
  end;</pre>
<p>Abaixo temos a implementação do método SimpleSelect, onde utilizamos LINQ para trazer uma lista com as palavras que tenham menos de 5 caracteres.</p>
<pre class="brush: delphi">implementation

method Words.SimpleSelect;
begin
  var shortwords := From word in words
                    Where word.Length &lt;= 5
                    Select word;

  Console.WriteLine('Simple select statment');
  Console.WriteLine;

  for each word in shortwords do begin
    Console.WriteLine(word);
  end;

end;</pre>
<p>Vamos passo a passo neste código, primeira parte.</p>
<li><strong>Variável shorwords</strong> &#8211; representa uma collection de strings, neste caso, pois o retorno será string.</li>
<li><strong>From word</strong> &#8211; nome da variável a ser utilizada para cada item selecionado no Array de String</li>
<li><strong>in words</strong> &#8211; coleção onde será efetuada a consulta, no mundo do banco de dados seria nossa tabela</li>
<li><strong>Where word.Length &lt;= 5</strong> &#8211; filtra as palavras que tenham tamanho &lt;= 5, veja que está sendo utilizada a variável word</li>
<li><strong>Select word</strong> &#8211; representa o item que será retornado para cada item da coleção, seria o nosso registro</li>
<pre class="brush: delphi">  var shortwords := From word in words
                    Where word.Length &lt;= 5
                    Select word;
end;</pre>
<p>Desta forma temos uma coleção chamada shortwords, cria dinâmicamente e que podemos agora percorrer e apresentar os resultados da seguinte forma.</p>
<pre class="brush: delphi">  for each word in shortwords do begin
    Console.WriteLine(word);
  end;</pre>
<p>Até aqui você se pergunta se é possível ordenar, agrupar, etc. A resposta é simples, sim é possível. Abaixo um exemplo onde retornamos as palavras agrupadas por tamanho, em ordem descendente e gerando o retorno como uma classe e não apenas uma string.</p>
<pre class="brush: delphi">  var groups := From word in words
                Order by word asc
                Group word by word.Length into lengthGroups
                Order by lengthGroups.Key desc
                select new class (Length:=lengthGroups.Key,Words:=lengthGroups);</pre>
<p>Foi adicionado as cláusulas Order by e Group, onde Key é o tamanho da string para cada item da coleção.</p>
<p>Agora uma das coisas mais interessantes é a criação dinâmica das classes através da sintaxe new class, além disso a utilização de expressões lambida onde eu defino a propriedade e valor a ser atribuído dinamicamente, exemplo abaixo Length:=lengthGroups.Key .</p>
<pre class="brush: delphi">select new class (Length:=lengthGroups.Key,Words:=lengthGroups);</pre>
<p>Caso você deseja imprimir o conteúdo agrupado, basta percorrer a variável groups, onde a propriedade Words representa a lista de palavras para cada grupo.</p>
<pre class="brush: delphi">
  for each grupo in groups do begin
    Console.WriteLine('Words of length ' + grupo.Length);
    for each word in grupo.Words do
      Console.WriteLine('   ' + word);
  end;
</pre>
<p>Próximo post falarei sobre LINQ to XML, aguardem.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/blogpt/utilizando-linq-to-objetcs-em-delphi-prism/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resolvendo problemas de intervalo de data com Records em Delphi</title>
		<link>http://www.andreanolanusse.com/blogpt/resolvendo-problemas-de-intervalo-de-data-com-records-em-delphi/</link>
		<comments>http://www.andreanolanusse.com/blogpt/resolvendo-problemas-de-intervalo-de-data-com-records-em-delphi/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 07:19:02 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi (Win32)]]></category>
		<category><![CDATA[Destaque]]></category>
		<category><![CDATA[Records]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/blogpt/?p=756</guid>
		<description><![CDATA[Record é um tipo de dado que lhe permite estruturar dados, a partir do Delphi 2006 Record se tornou quase uma classe, suportando:

Construtores
Sobreposição de operadores
Declaração de métodos não-virtuais
Métodos e propriedades estáticos

Podemos utilizar os Record de várias maneiras, no meu caso utilizo muito em parâmetros  de métodos que devem representar chaves primárias (Primary Key), desta forma [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-781" style="border: 0pt none; margin: 4px;" title="Icon Delphi" src="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/03/Icon_Delphi.png" alt="" width="175" height="175" />Record é um tipo de dado que lhe permite estruturar dados, a partir do Delphi 2006 Record se tornou quase uma classe, suportando:</p>
<ul>
<li>Construtores</li>
<li>Sobreposição de operadores</li>
<li>Declaração de métodos não-virtuais</li>
<li>Métodos e propriedades estáticos</li>
</ul>
<p>Podemos utilizar os Record de várias maneiras, no meu caso utilizo muito em parâmetros  de métodos que devem representar chaves primárias (Primary Key), desta forma facilita a leitura e manutenção do código, é verdade que você não fica mudando as chaves primárias das tabelas do seu banco de dados o tempo todo, mas quando precisar o mudança no código será simples. Outro exemplo seria informar intervalo de dados.</p>
<p>Imagine que você precise gerar um conjunto de boletos de um determinado período, você iria declarar algo assim.</p>
<pre class="brush: delphi">    procedure GerarBoleto( DataInicial, DataFinal : TDateTime );</pre>
<p>Geralmente temos problema com periodos, porque os bancos de dados armazenam data e hora no mesmo campo, desta forma temos que na data inicial estar certo que a hora está acertada para &#8216;00:00:00&#8242; e para a data final teremos que estar certos de ter como hora final &#8216;23:59:59&#8242;, existem outros aspectos e artifícios dependendo do banco de dados para contornar esta situação, mas isso depende de cada banco.</p>
<p>Record é uma excelente solução para estes casos, para isso representamos os parâmetros do método GerarBoleto como um Record e ele irá fazer todo o trabalho para evitar os problema de data e hora, assim como facilitar a leitura, entendimento e manutenção do código.</p>
<p>O método passaria a ser declarado assim:</p>
<pre class="brush: delphi">    procedure GerarBoleto( periodo : TPeriodo );</pre>
<p>A declaração do Record teria as propriedades DataInicial e DataFinal, estas por suas vez quando receberam valores terão os mesmo ajustados de acordo com os método Set.</p>
<p>Abaixo a declaração do Record e a seguir algumas explicações para o mesmo.</p>
<pre class="brush: delphi">unit Perido;

interface

uses SysUtils, DateUtils;

type

  TPeriodo = Record
  private
    FDataFinal: TDateTime;
    FDataInicial: TDateTime;
    procedure SetDataFinal(const Value: TDateTime);
    procedure SetDataInicial(const Value: TDateTime);

  public
    property DataInicial: TDateTime read FDataInicial write SetDataInicial;
    property DataFinal: TDateTime read FDataFinal write SetDataFinal;

    Constructor Create(Di, Df: TDateTime);

    procedure SetIntervaloAnual( Anoi, Anof : Integer );
  end;

implementation

{ TPeriodo }

constructor TPeriodo.Create(Di, Df: TDateTime);
begin
  DataInicial := Di;
  DataFinal := Df
end;

procedure TPeriodo.SetDataFinal(const Value: TDateTime);
begin
  FDataFinal := EncodeDateTime(Yearof(Value), MonthOf(Value), Dayof(Value), 23, 59, 59, 1000);
end;

procedure TPeriodo.SetDataInicial(const Value: TDateTime);
begin
  FDataInicial := EncodeDateTime(Yearof(Value), MonthOf(Value), Dayof(Value), 0, 0, 0, 0);
end;

procedure TPeriodo.SetIntervaloAnual(Anoi, Anof: Integer);
begin
  DataInicial := EncodeDate(Anoi, 1, 1);
  DataFinal   := EncodeDate(Anof, 12, 31);
end;

end.</pre>
<ul>
<li>Toda e qualquer atribuição de valor para DataInicial e DataFinal serão ajustados de acordo com o horário inicial e final</li>
<li>Foi criado um método adicional SetIntervaloAnual, onde você pode informar o ano inicial e final para o período e o método irá gerar os intervalos.</li>
</ul>
<p>Abaixo uma das formas onde podemos utilizar este Record, informando período inicial e final;</p>
<pre class="brush: delphi">var
  periodo : TPeriodo;
begin
  periodo.DataInicial := EncodeDate( 2009, 1, 1);
  periodo.DataFinal   := Now;

  GerarBoleto(periodo);</pre>
<p>Outra forma é passar o período utilizando o construtor do Record</p>
<pre class="brush: delphi">var
  periodo : TPeriodo;
begin
  periodo.Create(EncodeDate( 2009, 1, 1), Now);
  GerarBoleto(periodo);</pre>
<p>Outra forma seria utilizar o método SetIntervaloAnual, onde você apenas especifica o período anual.</p>
<pre class="brush: delphi">var
  periodo : TPeriodo;
begin

  periodo.SetIntervaloAnual(2008, 2009);

  GerarBoleto(periodo);</pre>
<p>Em todos os casos, os valores horários foram acertados.</p>
<p>Mas este record pode fazer muito mais por nós, porque não gerar a declaração where do SQL para as datas de acordo com os valores? Dois simples métodos pode resolver todos os problemas.</p>
<p>Field, é o nome do campo que representa a data em sua tabela.</p>
<pre class="brush: delphi">function TPeriodo.DataDBFormat(const Value: TDateTime): String;
begin
  Result := FormatDateTime('mm/dd/yyyy hh:mm:ss', Value);
end;

function TPeriodo.GenerateSQL(Field: String): String;
Const
  sql: String = '%s between ''%s'' and ''%s'' ';
begin
  Result := Format(sql, [FieldI, DataDBFormat(DataInicial), DataDBFormat(DataFinal)]);
end;</pre>
<p>Na prática usamos desta forma:</p>
<pre class="brush: delphi">var
  periodo : TPeriodo;
begin

  periodo.SetIntervaloAnual(2008, 2009);

  ShowMessage( periodo.GenerateSQL('DATA_BOLETO'));</pre>
<p>O resultado no ShowMessage será: <strong>DATA_BOLETO between &#8216;01/01/2008 00:00:00&#8242; and &#8216;12/31/2009 23:59:59&#8242;</strong></p>
<p>Espero que este post seja útil e lhe ajude no seu dia-a-dia. <a href="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/03/Periodo.zip">Download código fonte</a></p>
<p>Até o próximo post.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/blogpt/resolvendo-problemas-de-intervalo-de-data-com-records-em-delphi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Exemplos Touch, Multitouch e Gesture no Delphi 2010</title>
		<link>http://www.andreanolanusse.com/blogpt/exemplos-touch-multitouch-e-gesture-no-delphi-2010/</link>
		<comments>http://www.andreanolanusse.com/blogpt/exemplos-touch-multitouch-e-gesture-no-delphi-2010/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 20:30:42 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi (Win32)]]></category>
		<category><![CDATA[C++Builder]]></category>
		<category><![CDATA[Destaque]]></category>
		<category><![CDATA[Gesture]]></category>
		<category><![CDATA[Touch]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/blogpt/?p=744</guid>
		<description><![CDATA[Pessoal, acabo de disponibilizar no CodeCentral os fontes que utilizo para demonstrar os recursos do Delphi 2010 relacionados a Touch, Multitouch e Gesture.
São 8 exemplos, contendo código fonte. Vale lembrar que os exemplos que utilizam Multitouch requerem Windows 7, já os exemplos que utilizam Touch e Gesture podem ser executados em Windows 2000, XP e [...]]]></description>
			<content:encoded><![CDATA[<p>Pessoal, acabo de disponibilizar no CodeCentral os fontes que utilizo para demonstrar os recursos do Delphi 2010 relacionados a Touch, Multitouch e Gesture.</p>
<p>São 8 exemplos, contendo código fonte. Vale lembrar que os exemplos que utilizam Multitouch requerem Windows 7, já os exemplos que utilizam Touch e Gesture podem ser executados em Windows 2000, XP e Vista. Caso você não tenho um monitor touchscreen, basta utilizar o mouse para simular os toques.</p>
<p>Os usuários de C++Builder 2010 poderam utilizar os mesmo recursos disponíveis no Delphi 2010.</p>
<p>Ao clicar na imagem abaixo, você verá um dos exemplos sobre multitouch em ação.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/03/Multitouch.gif"><img class="size-medium wp-image-746 aligncenter" title="Multitouch in Action" src="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/03/Multitouch-300x182.gif" alt="" width="574" height="418" /></a></p>
<p><a href="http://cc.embarcadero.com/item/27614" target="_blank"><strong>Download dos fontes</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/blogpt/exemplos-touch-multitouch-e-gesture-no-delphi-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apresentações do Delphi Conference Online disponibilizadas para download</title>
		<link>http://www.andreanolanusse.com/blogpt/apresentacoes-do-delphi-conference-online-disponibilizadas-para-download/</link>
		<comments>http://www.andreanolanusse.com/blogpt/apresentacoes-do-delphi-conference-online-disponibilizadas-para-download/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 17:39:54 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi (Win32)]]></category>
		<category><![CDATA[DataSnap]]></category>
		<category><![CDATA[Destaque]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Touch]]></category>
		<category><![CDATA[Vídeo]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/blogpt/?p=733</guid>
		<description><![CDATA[Amigos da comunidade Delphi, dia 26 de fevereiro realizamos o Delphi Conference Online, uma seleção de 6 apresentações super bem avaliadas no Delphi Conference em São Paulo, realizado no final de 2009.
Na versão online selecionamos alguns temas muito especiais, tive a oportunidade de falar sobre a grande novidade em desenvolvimento Touch e Gesture suportada pelo [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-740" style="margin: 4px; border: 0pt none;" title="Delphi Conference Online" src="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/02/dc.jpg" alt="" width="226" height="164" />Amigos da comunidade Delphi, dia 26 de fevereiro realizamos o Delphi Conference Online, uma seleção de 6 apresentações super bem avaliadas no Delphi Conference em São Paulo, realizado no final de 2009.</p>
<p>Na versão online selecionamos alguns temas muito especiais, tive a oportunidade de falar sobre a grande novidade em desenvolvimento Touch e Gesture suportada pelo Delphi 2010.</p>
<p>Além disso o evento trouxe apresentações sobre DataSnap, OOP com Delphi Prism, técnicas para teste de aplicações Delphi e dois minicursos sobre Intraweb e Rave Reports, nestes minicursos você certamente irá aprimorar seu conhecimento e ir adiante com estas tecnologias.</p>
<p>Para ter acesso a todos as apresentações <strong><a href="http://edn.embarcadero.com/br/article/40335">clique aqui</a></strong>, lembre-se que para assistir ou efetuar o download você deve utilizar sua conta do EDN, caso não tenha basta criar no momento em que for solicitado é GRÁTIS.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/blogpt/apresentacoes-do-delphi-conference-online-disponibilizadas-para-download/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Active Delphi &#8211; edição 71 &#8211; DataSnap, Webbroker e Delphi Prism</title>
		<link>http://www.andreanolanusse.com/blogpt/active-delphi-edicao-71-datasnap-webbroker-e-delphi-prism/</link>
		<comments>http://www.andreanolanusse.com/blogpt/active-delphi-edicao-71-datasnap-webbroker-e-delphi-prism/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 13:52:17 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi (Win32)]]></category>
		<category><![CDATA[DataSnap]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/blogpt/?p=727</guid>
		<description><![CDATA[
A edição 71 da Active Delphi foi publicada recentemente e traz vários artigos interessantes, entre eles.
Introdução ao novo DataSnap 2010
Fabrício Hissao fala sobre as novidades do novo DataSnap 2010. O autor mostra a construção de uma aplicação simples no modelo multi-camadas, provando como ficou fácil este tipo de desenvolvimento com a nova versão do DataSnap.
Delphi [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-728" style="border: 0pt none; margin: 4px;" title="Active Delphi capa da edição 71" src="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/02/activedelphi_mini_capa71.gif" alt="" width="210" height="297" /></p>
<p>A edição 71 da Active Delphi foi publicada recentemente e traz vários artigos interessantes, entre eles.</p>
<p><strong>Introdução ao novo DataSnap 2010</strong><br />
Fabrício Hissao fala sobre as novidades do novo DataSnap 2010. O autor mostra a construção de uma aplicação simples no modelo multi-camadas, provando como ficou fácil este tipo de desenvolvimento com a nova versão do DataSnap.</p>
<p><strong>Delphi Para Web: Webbroker e PHP – Compartilhando Dados de Sessões – Parte 4</strong><br />
Dando continuidade à série, Kelver Merlotti aborda sobre o compartilhamento de dados de sessões PHP com WebBroker, ou seja, Kelver nos ensina como podemos ler dados de uma sessão PHP para ser utilizada na aplicação Delphi/WebBroker. Para isso explica alguns conceitos de como funciona a sessão no PHP e mostra a classe que utiliza para facilitar esta integração.</p>
<p><strong>Delphi Prism Language</strong><br />
Adilson Jr mostra algumas características principais da linguagem Delphi Prism.</p>
<p>A revista traz ainda vários outros excelentes artigos, mais informações <strong><a href="http://www.activedelphi.com.br/mostra_edicao.php?ed=71">aqui</a></strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/blogpt/active-delphi-edicao-71-datasnap-webbroker-e-delphi-prism/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Delphi Conference Online &#8211; dia 25 de fevereiro</title>
		<link>http://www.andreanolanusse.com/blogpt/delphi-conference-online-dia-25-de-fevereiro/</link>
		<comments>http://www.andreanolanusse.com/blogpt/delphi-conference-online-dia-25-de-fevereiro/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 01:58:16 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi (Win32)]]></category>
		<category><![CDATA[Delphi Conference]]></category>
		<category><![CDATA[Eventos]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/blogpt/?p=712</guid>
		<description><![CDATA[Amigos da comunidade Delphi gostaria de convidar a todos para o próximo o Delphi Conference Online, após o grande sucesso do Delphi Conference em São Paulo que contou com aproximadamente 600 desenvolvedores, selecionamos 6 apresentações para este evento. Faça sua inscrição e participe de onde você estiver, reserve o dia 25 de fevereiro e prestigie [...]]]></description>
			<content:encoded><![CDATA[<p>Amigos da comunidade Delphi gostaria de convidar a todos para o próximo o Delphi Conference Online, após o grande sucesso do Delphi Conference em São Paulo que contou com aproximadamente 600 desenvolvedores, selecionamos 6 apresentações para este evento. Faça sua inscrição e participe de onde você estiver, reserve o dia 25 de fevereiro e prestigie a continuação do melhor evento realizado em 2009.</p>
<p><a href="http://edn.embarcadero.com/br/article/40335"><img class="aligncenter size-full wp-image-713" title="Delphi Conference Online" src="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/02/DelphiConferenceOnline.jpg" alt="" width="620" height="530" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/blogpt/delphi-conference-online-dia-25-de-fevereiro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando gráficos em sua aplicação Delphi com TeeChart</title>
		<link>http://www.andreanolanusse.com/blogpt/criando-graficos-em-sua-aplicacao-delphi-com-teechart/</link>
		<comments>http://www.andreanolanusse.com/blogpt/criando-graficos-em-sua-aplicacao-delphi-com-teechart/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 10:32:07 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi (Win32)]]></category>
		<category><![CDATA[TeeChart]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/blogpt/?p=704</guid>
		<description><![CDATA[TeeChart é um dos componentes de terceiros mais utilizados no Delphi e o que acompanha o Delphi por mais tempo, não me lembro agora, mas já fazem muitos anos que ele está presente. Desenvolvimento pela Steema Software que ano a ano implementa novas funcionalidades e extende toda os seus componentes para outras linguagens.
É muito fácil [...]]]></description>
			<content:encoded><![CDATA[<p>TeeChart é um dos componentes de terceiros mais utilizados no Delphi e o que acompanha o Delphi por mais tempo, não me lembro agora, mas já fazem muitos anos que ele está presente. Desenvolvimento pela <strong><a href="http://www.steema.com/teechart/vcl">Steema Software</a></strong> que ano a ano implementa novas funcionalidades e extende toda os seus componentes para outras linguagens.</p>
<p>É muito fácil utilizar este componente, posso dizer que para muitos gráficos você não precisaria escrever código, através dos wizards disponíveis você pode criar gráficos, trazendo dados de um DataSet e pronto, mas claro que existiram situações onde você talvez necessita customizar algo e ai codificar será inevitável.</p>
<p>Assim sendo resolvi escrever este post e mostra um exemplo simples de como seria criar gráficos sem estar conectado a DataSet, ou seja, passar os dados a partir de um array ou algo parecido. O resultado final será o gráfico abaixo, onde se compara mês a mês o resultado das vendas de 2008 e 2009, além disso para cada mês temos o percentual que representou aquele mês no ano.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/02/my.png"><img class="aligncenter size-full wp-image-705" title="TeeChart" src="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/02/my.png" alt="" width="712" height="508" /></a></p>
<p>Vamos agora conhecer o código e saber como foi implementando este gráfico, ao final você poderá baixar os fontes.</p>
<p>Antes de mais nada, este é uma aplicação VCL, onde foi adicionado o componente TChart e com o botão direito selecione a opção Edit Chart, adicione duas séries através do botão Add, neste exemplo utilizei gráficos de barra.</p>
<p>A fonte de dados deste gráfico é um array que contém o total vendas para cada mês.</p>
<pre class="brush: pascal;">var
  i: Integer;
  val : Array[1..12] of Double;
begin

  val[1] := 10.2;
  val[2] := 12.2;
  val[3] := 11.7;
  val[4] := 6.3;
  val[5] := 8.0;
  val[6] := 2.9;
  val[7] := 20.3;
  val[8] := 1.4;
  val[9] := 4.5;
  val[10] := 6;
  val[11] := 10;
  val[12] := 15;</pre>
<p>Após a definição da fonte de dados, remove os dados adicionados em tempo de runtime para as duas séries existentes, uma referente ao ano de 2008 e outra ao ano de 2009. Além disso defino que o estilo de apresentação dos valores para cada barra será <strong>percentual</strong>, isso quer dizer que será apresentado o quanto representa o total do mês no faturamento anual.</p>
<pre class="brush: pascal;">  Series2008.Clear;
  Series2008.Marks.Style := smsPercent;

  Series2009.Clear;
  Series2009.Marks.Style := smsPercent;</pre>
<p>Depois disso vamos basta adicionar os valores de venda mensal para cada série (2008, 2009), repare que estou utilizando o array LongMonthNames para o obter o nome do mês, no meu caso os nomes aparecem em inglês, pois utilizo windows em inglês, ou seja, ele depende da versão do idioma do seu Windows, caso não queira depender do idioma do seu sistema operacional, basta sobrepor os valores para cada posição do Array.</p>
<p>Método Add foi utilizado para adicionar os valores, caso você queira customizar a cor de cada barra, basta adicionar uma cor como terceiro parâmetro ao método Add.</p>
<pre class="brush: pascal;">for i := 1 to 12 do
begin
Series2008.Add(val[i], LongMonthNames[i]);
end;

for I := 1 to 12 do
begin
Series2009.Add(val[i] / (1.45+(i/10)), LongMonthNames[i]);
end;</pre>
<p>Espero que este simples e objetivo exemplo seja útil, o código fonte está disponível <a href="http://cc.embarcadero.com/Author/38483" target="_blank"><strong>aqui</strong></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/blogpt/criando-graficos-em-sua-aplicacao-delphi-com-teechart/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iPad o novo Apple Tablet AKA (Big IPHONE) :)</title>
		<link>http://www.andreanolanusse.com/blogpt/ipad-o-novo-apple-tablet-aka-big-iphone/</link>
		<comments>http://www.andreanolanusse.com/blogpt/ipad-o-novo-apple-tablet-aka-big-iphone/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 19:26:43 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Kindle]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/blogpt/?p=699</guid>
		<description><![CDATA[
Nesta quarta-feira Apple anunciou seu novo computador touchscreen , o &#8220;iPad&#8221; para consumidores que querem ter assistir filmes, TV shows, ouvir música, jogar e ler com ele, seja na sua casa ou em qualquer outro lugar.
Se você é atualmente usuário do iPhone, não terá muita dificuldade pois a interação é bem semelhante. Além disso, você [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-227" style="border: 0pt none; margin: 4px;" title="Apple Tablet" src="http://www.andreanolanusse.com/blogen/wp-content/uploads/2010/01/100127-tech-apple-tablet.widec.jpg" alt="" width="298" height="225" /></p>
<p>Nesta quarta-feira Apple anunciou seu novo computador touchscreen , o &#8220;iPad&#8221; para consumidores que querem ter assistir filmes, TV shows, ouvir música, jogar e ler com ele, seja na sua casa ou em qualquer outro lugar.</p>
<p>Se você é atualmente usuário do iPhone, não terá muita dificuldade pois a interação é bem semelhante. Além disso, você poderá usá-lo em modo portrait ou landscape, ambas suportam o teclado virtual e parece que o botão “home screen” na parte inferior permite mudar a orientação também..</p>
<p>Apple iPad specs:</p>
<ul>
<li> 9.7-inch display with 0.5-inches thickness.</li>
<li>16GB to 64GB of on-board flash memory</li>
<li>10 hrs of battery life. Over a month for standby</li>
<li>1GHz Apple A4 chip (developed for the iPad)</li>
<li>WiFi 802.11n</li>
<li>Bluetooth 2.1</li>
<li>accelerometer</li>
<li>digital compass</li>
<li>speaker and a microphone</li>
<li>30-pin dock connector</li>
</ul>
<p>Não vejo a hora ver ao vivo o novo iPad, principalmente porque eu estava para comprar o Amazon Kindle, mas acho que agora a Amazon irá acelerar o lançamento do Kindle 3.</p>
<p>Mais informações no site da Apple <a href="http://www.apple.com/ipad/">http://www.apple.com/ipad/</a></p>
<p>Aguarde cenas dos próximos capítulos no mundo da tecnologia.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/blogpt/ipad-o-novo-apple-tablet-aka-big-iphone/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Delphi Live Templates</title>
		<link>http://www.andreanolanusse.com/blogpt/delphi-live-templates/</link>
		<comments>http://www.andreanolanusse.com/blogpt/delphi-live-templates/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 02:00:34 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi (Win32)]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/blogpt/?p=683</guid>
		<description><![CDATA[Entre os inúmeros recursos adicionados ao Delphi nos últimos anos para aumentar produtividade o Live Templates é um dos mais interessantes. Live Templates foi adicionado a partir do Delphi 2005 e permite você escrever mais código sem muita digitação, pois está baseado em Templates. Este templates são arquivos XML o que lhe permite alterar os [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-691" style="border: 0pt none; margin: 4px;" title="Delphi Live Template" src="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/01/codetemplate.png" alt="" width="292" height="218" />Entre os inúmeros recursos adicionados ao Delphi nos últimos anos para aumentar produtividade o Live Templates é um dos mais interessantes. Live Templates foi adicionado a partir do Delphi 2005 e permite você escrever mais código sem muita digitação, pois está baseado em Templates. Este templates são arquivos XML o que lhe permite alterar os templates já existentes e também criar novo.</p>
<p>Até o Delphi 2009 os arquivos templates podem ser localizados no diretório: C:\Program Files\Embarcadero\RAD Studio\6.0\ObjRepos\Code_Templates</p>
<p>A partir do Delphi 2010 os arquivos estão no diretório C:\Program Files\Embarcadero\RAD Studio\7.0\ObjRepos\en\Code_Templates, basicamente foi adicionado o diretório en, referente ao idioma inglês, se você utiliza o Delphi em outro idioma deverá considerá-lo.</p>
<p>Ao pressionar CTRL+J você tem uma lista de templates pré-definidos:</p>
<ul>
<li>Declaração de variáveis</li>
<li>For</li>
<li>While</li>
<li>Criação de classes em diferentes formatos</li>
<li>E muito mais</li>
</ul>
<p>Vários outros templates podem ser criados, por exemplo um laço (while) em um DataSet, adicionar um lembrete (TO-DO) que algo tem que ser feito, um código específico referenciado um framework próprio, etc. Abaixo dois exemplos:</p>
<p>Ao digitar <strong>noteof</strong> e pressionar <strong>TAB</strong>, será executado o Live Template <strong>noteof</strong>, que adiciona o código abaixo:</p>
<pre class="brush: pascal;">  while not dataset.eof do
  begin

    dataset.Next;
  end;

;</pre>
<pre class="brush: xml;">

Abaixo o template responsável pela mágica, para utilizar este template basta gravar o código abaixo em um arquivo XML e na respectiva pasta mencionada anteriormente.

<?xml version="1.0" encoding="utf-8" ?>
<codetemplate	xmlns="http://schemas.borland.com/Delphi/2005/codetemplates"
				version="1.0.0">
	<template name="noteof" invoke="auto">
<point name="dataset">
		  <script language="Delphi">
			  InvokeCodeCompletion;
		  </script>
		  <text>
			dataset
		  </text>
		  <hint>
			dataset to loop through
		  </hint>
		</point>
		<description>
			Loop through a dataset while not eof
		</description>
		<author>
		  Andreano Lanusse
		</author>
		<code language="Delphi" context="methodbody" delimiter="|"><![CDATA[while not |dataset|.eof do
begin
|*||end|
|*||dataset|.Next;
end;
]]&gt;
</code>
</template>
</codetemplate>

;</pre>
<p>Outro exemplo é utilizar o recurso TODO do Delphi de forma mais produtiva, podemos adicionar comentários no código que nos lembre de fazer algo, uma revisão, alteração, exclusão, etc. Quando abrimos a lista de TO-DO ( Menu View-> To-Do List) o mesmo irá percorrer todo o código do seu projeto e mostrar a lista de TO-DO, apenas um duplo-clique e você esta posicionado no ponto exato do código.</p>
<p>A seguir o template criado para adicionar TO-DO, digite <strong>todo</strong> e pressione <strong>TAB</strong>, informe o nome do responsável, nome da categoria para esta tarefa e a ação a ser executado.</p>
<pre class="brush: pascal;">
{TODO -oOwner -cGeneral : ActionItem}
;</pre>
<p>Abaixo o código XML para execução deste Live Template, novamente grave este código em um arquivo XML e salve na pasta de templates.</p>
<pre class="brush: xml;">
<?xml version="1.0" encoding="utf-8" ?>
<codetemplate	xmlns="http://schemas.borland.com/Delphi/2005/codetemplates"
				version="1.0.0">
	<template name="todo" invoke="auto">
<point name="Owner">
			<text>Owner</text>
			<hint>Name of the person responsible for this task</hint>
		</point>
<point name="Category">
			<text>General</text>
			<hint>Category name for this task</hint>
		</point>
<point name="ActionItem">
			<text>ActionItem</text>
			<hint>Action necessary for this task</hint>
		</point>
		<code language="Delphi" delimiter="|">
			<![CDATA[{TODO -o|Owner| -c|Category| : |ActionItem|}]]&gt;
		</code>
		<description>Create a TODO item</description>
		<author>Andreano</author>
	</template>
</codetemplate>

;</pre>
<p>Muito mais pode ser feito com o Live Templates, com certeza você já deve ter algumas idéias e quer saber como criar estes templates, para isso recomendo a leitura do artigo <a href="http://delphi.wikia.com/wiki/Live_Templates_Technical_Info" target="_blank"><strong>Live Templates Technical Info</strong></a></p>
<p>E caso tenha algum live template que deseja compartilhar com a comunidade, me envie que irei postar aqui no blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/blogpt/delphi-live-templates/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Seu código Delphi está bem escrito?</title>
		<link>http://www.andreanolanusse.com/blogpt/seu-codigo-delphi-esta-bem-escrito/</link>
		<comments>http://www.andreanolanusse.com/blogpt/seu-codigo-delphi-esta-bem-escrito/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 01:06:57 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi (Win32)]]></category>
		<category><![CDATA[Modelagem]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/blogpt/?p=675</guid>
		<description><![CDATA[A métrica nos ajuda a padronizar código. Quem nunca teve acesso a um código em que o desenvolvedor cria 10 construtores para uma classe, 10 ifs um dentro do outro, métodos com 20 parâmetros e outras práticas que só prejudicam a leitura do código? Pois então, com as métricas podemos definir quais os limites que [...]]]></description>
			<content:encoded><![CDATA[<p>A métrica nos ajuda a padronizar código. Quem nunca teve acesso a um código em que o desenvolvedor cria 10 construtores para uma classe, 10 ifs um dentro do outro, métodos com 20 parâmetros e outras práticas que só prejudicam a leitura do código? Pois então, com as métricas podemos definir quais os limites que a empresa utilizará, por exemplo: uma classe não poderá ter mais do que 4 construtores, poderá ter no máximo 400 linhas de código e os nomes dos métodos devem ser escritos conforme a convenção Pascal, que diz que o nome de um método deve ter a primeira letra maiúscula.</p>
<p>Cada métrica tem os seus limites e estes poderão ser customizados, conforme figura abaixo:</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/01/qametric.jpg"><img class="aligncenter size-full wp-image-676" title="Métricas" src="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/01/qametric.jpg" alt="" width="436" height="360" /></a></p>
<p>Após executar as métricas os resultados serão analisados através do gráfico de Kiviat, onde o circulo vermelho é o limite definido anteriormente e todos os pontos foram deste círculo mostram que parte do código está rompendo as métricas.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/01/kaviat.jpg"><img class="aligncenter size-full wp-image-677" title="Kaviat" src="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/01/kaviat.jpg" alt="" width="504" height="378" /></a></p>
<p>Cada classe poderá ser analisada separadamente. Desta forma, será mais fácil identificar as violações de métricas. Com a auditoria e métrica, o desenvolvedor poderá entregar um código e uma aplicação com mais qualidade tanto interna quanto externa. Tudo isso você pode executar no seu código em qualquer versão a partir do 2006.</p>
<p>Recomendo como leitura adicional outros dois posts:</p>
<ul>
<li>Auditanto seu código Delphi &#8211; <a href="http://www.andreanolanusse.com/blogpt/auditando-seu-codigo-delphi/">http://www.andreanolanusse.com/blogpt/auditando-seu-codigo-delphi/</a></li>
<li>Melhorando a qualidade do seu software Delphi através da UML &#8211; <a href="http://www.andreanolanusse.com/blogpt/melhorando-a-qualidade-do-seu-software-delphi-atraves-da-uml/">http://www.andreanolanusse.com/blogpt/melhorando-a-qualidade-do-seu-software-delphi-atraves-da-uml/</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/blogpt/seu-codigo-delphi-esta-bem-escrito/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RADTweet &#8211; Twitter Desktop Client desenvolvindo em Delphi</title>
		<link>http://www.andreanolanusse.com/blogpt/radtweet-twitter-desktop-client-desenvolvindo-em-delphi/</link>
		<comments>http://www.andreanolanusse.com/blogpt/radtweet-twitter-desktop-client-desenvolvindo-em-delphi/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 07:05:59 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi (Win32)]]></category>
		<category><![CDATA[RADTweet]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/blogpt/?p=666</guid>
		<description><![CDATA[Finalmente após algumas várias semanas disponibilizei os fontes do client desktop para Twitter desenvolvido em Delphi. A idéia aqui foi mostrar como trabalhar com a API do Twitter e utilizar recursos já existentes no Delphi para interagir com o Twitter. O projeto é Open Source e tem como licença MIT.
Muitas outras funcionalidades podem ser adicionadas [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-668" style="border: 0pt none; margin: 4px;" title="RADTweet" src="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/01/radtweet.jpg" alt="" width="275" height="136" />Finalmente após algumas várias semanas disponibilizei os fontes do client desktop para Twitter desenvolvido em Delphi. A idéia aqui foi mostrar como trabalhar com a <a href="http://apiwiki.twitter.com/" target="_self">API do Twitter</a> e utilizar recursos já existentes no Delphi para interagir com o Twitter. O projeto é Open Source e tem como licença <a href="http://en.wikipedia.org/wiki/MIT_License" target="_blank">MIT</a>.</p>
<p>Muitas outras funcionalidades podem ser adicionadas ao projeto acessando as API&#8217;s do Twitter, sendo Open Source qualquer um bote contribuir para enriquecer o projeto.</p>
<p>A aplicação final é composta de apenas um executável e a partir da primeira execução seram criados três arquivos com a extensão .DATA que armazenam as mensagens e configurações, estes arquivos estão no formato binário e podem ser lidos através de um ClientDataSet, todo cache da aplicação está baseado nele.</p>
<p>A aplicação traz os seguintes recursos:</p>
<ul>
<li>Lista as mensagens</li>
<li>Lista mensagens que foram mencionadas</li>
<li>Lista das pessoas que você segue</li>
<li>Além de mostrar quantos amigos e seguidores</li>
</ul>
<p>Além disso todo o conteúdo recebido foi trabalho em formato XML e armazenado em ClientDataSet como forma de cache local, existem vários outros recursos, baixe os fontes ou a versão 1.0 e divirta-se.</p>
<p>Aqueles que quiserem contribuir com o projeto são muito bem vindos, contribuindo você pode fazer parte oficialmente do <a href="https://sourceforge.net/projects/radtweet/develop" target="_blank">projeto</a>.</p>
<p>O projeto RADTweet está disponível no <strong><a href="http://sourceforge.net/projects/radtweet/" target="_blank">SorceForge</a></strong>, assim como a versão 1.0</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/blogpt/radtweet-twitter-desktop-client-desenvolvindo-em-delphi/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Delphi Unicode &#8211; entendo os avisos (warning) do compilar sua aplicação</title>
		<link>http://www.andreanolanusse.com/blogpt/delphi-unicode-entendo-os-avisos-warning-do-compilar-sua-aplicacao/</link>
		<comments>http://www.andreanolanusse.com/blogpt/delphi-unicode-entendo-os-avisos-warning-do-compilar-sua-aplicacao/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 01:37:56 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi (Win32)]]></category>
		<category><![CDATA[Unicode]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/blogpt/?p=654</guid>
		<description><![CDATA[A partir do Delphi 2009 foi implementado o suporte a Unicode em todo o Delphi, caso você não esteja familiarizado com Unicode leia este post. Ao compilar sua aplicação alguns avisos (warning) serão emitidos pelo compilador, neste post vou esclarecer estas mensagens e o que você deve fazer para que elas não apareçam mais.
O código [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-618" style="border: 0pt none; margin: 4px;" title="Unicode" src="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/01/Ascender-Unicode-graphic-300x168.gif" alt="" width="300" height="168" />A partir do Delphi 2009 foi implementado o suporte a Unicode em todo o Delphi, caso você não esteja familiarizado com Unicode leia este <a href="http://www.andreanolanusse.com/blogpt/entendendo-unicode-para-migrar-sua-aplicacao-delphi/"><strong>post</strong></a>. Ao compilar sua aplicação alguns avisos (warning) serão emitidos pelo compilador, neste post vou esclarecer estas mensagens e o que você deve fazer para que elas não apareçam mais.</p>
<p>O código abaixo até versões do Delphi 2007, compilado em versões igual ou superiores ao Delphi 2009, receberá esta mensagem ao compilar:</p>
<p>W1050 WideChar reduced to byte char in set expressions. Consider using &#8216;CharInSet&#8217; function in &#8216;SysUtils&#8217; unit</p>
<pre class="brush: pascal;">var
  Status : Char;
begin

  if Status in [ 'a', 's', 'c']  then
  begin
    ...
  end;</pre>
<p>Para evitar este warning, você deverá passar a usar a função CharInSet.</p>
<pre class="brush: pascal;">var
  Status : Char;
begin

  if CharInSet(Status, ['a', 's', 'c']) then
  begin
    ...
  end;</pre>
<p>O código abaixo irá gerar a mensagem <strong>W1057 Implicit string cast from &#8216;ShortString&#8217; to &#8217;string&#8217;</strong></p>
<pre class="brush: pascal;">var
  s : ShortString;
  u : string;
begin
  u := s;
end;</pre>
<p>Para eliminar este mensagem basta fazer um cast da varíavel ShortString para String, este código será compatível com versões anteriores ao Delphi 2009.</p>
<pre class="brush: pascal;">var
  s : ShortString;
  u : string;
begin
  u := String(s);
end;</pre>
<p>A mesma situação se aplica para variáveis AnsiString gerando a mensagem <strong>W1057 Implicit string cast from &#8216;AnsiString&#8217; to &#8217;string&#8217;</strong></p>
<pre class="brush: pascal;">var
  a : AnsitString;
  u : string;
begin
  u := s;
end;</pre>
<p>Basta fazer um cast da variável AnsiString para String e a mensagem será eliminada.</p>
<pre class="brush: pascal;">var
  a : AnsitString;
  u : string;
begin
  u := AnsiString(s);
end;</pre>
<p>A mensagem <strong>W1058 Implicit string cast with potential data loss from &#8217;string&#8217; to &#8216;AnsiString&#8217;</strong> precisa ser analizada com cuidado, podemos fazer o cast e resolver o problema, mas você precisa saber o que está fazendo.</p>
<pre class="brush: pascal;">var
  a : AnsitString;
  u : string;
begin
  u := s;
end;</pre>
<p>Se você tem certeza que a variável <strong>a</strong> contém apenas caracteres Ansi, poderá fazer o cast sem problemas.</p>
<pre class="brush: pascal;">var
  a : AnsitString;
  u : string;
begin
  u := AnsiString(s);
end;</pre>
<p>Até aqui vimos as mensagens geradas pelo compilador, Unicode vai muito mais além e se você quiser exportar sua aplicação para países asiáticos por exemplo, terá que suportar Unicode, existem 3 artifos no EDN que eu recomendo a leitura, são eles:</p>
<ul>
<li> EDN Article: <a href="http://edn.embarcadero.com/article/38437" target="_blank">&#8220;Delphi in a Unicode World Part I: What is Unicode, Why do you need it, and How do you work with it in Delphi?&#8221;</a> by Nick Hodges</li>
<li> EDN Article: <a href="http://edn.embarcadero.com/article/38498" target="_blank">&#8220;Delphi in a Unicode World Part II: New RTL Features and Classes to Support Unicode&#8221;</a> by Nick Hodges</li>
<li> EDN Article: <a href="http://edn.embarcadero.com/article/38693" target="_blank">&#8220;Delphi in a Unicode World Part III: Unicodifying Your Code&#8221;</a> by Nick Hodges</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/blogpt/delphi-unicode-entendo-os-avisos-warning-do-compilar-sua-aplicacao/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Disponibilizando métodos de uma classe como Server Methods sem usar TServerModule em DataSnap</title>
		<link>http://www.andreanolanusse.com/blogpt/disponibilizando-metodos-de-uma-classe-como-server-methods-sem-usar-tservermodule-em-datasnap/</link>
		<comments>http://www.andreanolanusse.com/blogpt/disponibilizando-metodos-de-uma-classe-como-server-methods-sem-usar-tservermodule-em-datasnap/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 20:26:45 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi (Win32)]]></category>
		<category><![CDATA[DataSnap]]></category>
		<category><![CDATA[dbExpress]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/blogpt/?p=631</guid>
		<description><![CDATA[Hoje certamente você tem diversas classes contendo regras de negócios que poderiam ser melhor aproveitas em uma aplicação multicamada desenvolvida em Delphi. Por meio dos Server Methods é possível fazer isso tranquilamente.
Para uma classe ser disponibilizada como Server Methods é necessário:

Descender de TPersistent
Ter a diretiva {$MethodInfo ON}, esta diretiva permite ao DataSnap obter informações da [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje certamente você tem diversas classes contendo regras de negócios que poderiam ser melhor aproveitas em uma aplicação multicamada desenvolvida em Delphi. Por meio dos Server Methods é possível fazer isso tranquilamente.</p>
<p>Para uma classe ser disponibilizada como Server Methods é necessário:</p>
<ul>
<li>Descender de TPersistent</li>
<li>Ter a diretiva {$MethodInfo ON}, esta diretiva permite ao DataSnap obter informações da classe a partir da RTTI</li>
<li>Estar registrada através do componente DSServerClass</li>
</ul>
<p>Abaixo exemplo de uma classe que não é descendente de TDSServerModule e sim de TPersistant, podemos assumir que esta classe já existia anteriormente e que agora queremos reusar em nosso servidor DataSnap</p>
<pre class="brush: pascal; highlight: [14, 15]">unit User;

interface

uses
  BaseServerClass,
  Classes,
  DBXCommon,
  SysUtils,
  Dialogs,
  MainServerModule;

type
{$METHODINFO ON}
  TUser = class(TPersistent)
  private

  public
    constructor Create;
    destructor Destroy; override;

    procedure AddUser(FirstLastName, Login, Password: String);

    function IsValidUser(Login, Password: String): Boolean;

    procedure DisableUser(Login: String);
    procedure EnableUser(Login: String);

  end;

implementation

uses
  ServerContainer;

{ TUser }

procedure TUser.AddUser(FirstLastName, Login, Password: String);
var
  Comm: TDBXCommand;
begin

  if (FirstLastName = '') then
    raise Exception.Create('First/Last name is required');

  if (Login = '') then
    raise Exception.Create('Login is required');

  if (Password = '') then
    raise Exception.Create('Password is required');

  Comm := FDbxConnection.CreateCommand;

  Comm.Text :=
    'Insert Into Users (NAME, LOGIN, PASSWORD, ACTIVE ) Values (' + QuotedStr
    (FirstLastName) + ',' + QuotedStr(Login) + ',' + QuotedStr(Password)
    + ', true)';
  Comm.ExecuteQuery;

  FreeAndNil(Comm);

end;

constructor TUser.Create;
begin
  FDbxConnection := DMServerContainer.DataSnap_Server_Log.DBXConnection;
end;

destructor TUser.Destroy;
begin

  inherited;
end;

procedure TUser.DisableUser(Login: String);
var
  Comm: TDBXCommand;
begin

  if (Login = '') then
    raise Exception.Create('Login is required');

  Comm := FDbxConnection.CreateCommand;

  Comm.Text := 'Update Users Set ACTIVE = False Where LOGIN = ' + QuotedStr
    (Login);
  Comm.ExecuteQuery;

  FreeAndNil(Comm);

end;

procedure TUser.EnableUser(Login: String);
var
  Comm: TDBXCommand;
begin

  if (Login = '') then
    raise Exception.Create('Login is required');

  Comm := FDbxConnection.CreateCommand;

  Comm.Text := 'Update Users Set ACTIVE = True Where LOGIN = ' + QuotedStr
    (Login);
  Comm.ExecuteQuery;

  FreeAndNil(Comm);

end;

function TUser.IsValidUser(Login, Password: String): Boolean;
var
  Comm: TDBXCommand;
  Reader: TDBXReader;
begin
  if (Login = '') then
    raise Exception.Create('Login is required');

  if (Password = '') then
    raise Exception.Create('Password is required');

  Comm := FDbxConnection.CreateCommand;

  Comm.Text := 'Select ACTIVE From Users Where LOGIN = ' + QuotedStr(Login)
    + ' and PASSWORD = ' + QuotedStr(Password);

  Reader := Comm.ExecuteQuery;

  if Reader.Next then
  begin
    Result := Reader.Value[0].GetBoolean;
  end
  else
    Result := False;

  Reader.Close;
  FreeAndNil(Reader);
  FreeAndNil(Comm);

end;

end.</pre>
<p>Quer saber mais sobre DataSnap, <a href="http://www.andreanolanusse.com/blogpt/tag/datasnap/"><strong>clique aqui</strong></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/blogpt/disponibilizando-metodos-de-uma-classe-como-server-methods-sem-usar-tservermodule-em-datasnap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Auditando seu código Delphi</title>
		<link>http://www.andreanolanusse.com/blogpt/auditando-seu-codigo-delphi/</link>
		<comments>http://www.andreanolanusse.com/blogpt/auditando-seu-codigo-delphi/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 18:30:32 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi (Win32)]]></category>
		<category><![CDATA[UML]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/blogpt/?p=621</guid>
		<description><![CDATA[Quando falamos em qualidade, sempre nos preocupamos em apresentar ao cliente um software de alto desempenho. Muitos nos dizem que não importa como o software está escrito, mas sim que funcione e atenda às suas necessidades. Na verdade, quem pensa assim está cometendo um grande erro, que pode trazer impacto lá na frente. Se você [...]]]></description>
			<content:encoded><![CDATA[<p>Quando falamos em qualidade, sempre nos preocupamos em apresentar ao cliente um software de alto desempenho. Muitos nos dizem que não importa como o software está escrito, mas sim que funcione e atenda às suas necessidades. Na verdade, quem pensa assim está cometendo um grande erro, que pode trazer impacto lá na frente. Se você não escreve um código estruturado e depois precisa crescer a aplicação, pode acontecer de você não conseguir, pois muitos remendos foram feitos e sua aplicação não cresceu de forma estruturada. O Delphi irá contribuir, através de auditoria e métricas, para encontrar erros na sua aplicação enquanto estiver em produção e ajudarão a disciplinar os desenvolvedores a escrever códigos padronizados.</p>
<p>Quantas vezes você já definiu um guia de melhores práticas de codificação que evitasse que sua equipe de programadores cometesse aquelas gafes de codificação que podem tornar o código tão ineficiente quanto incompreensível?</p>
<p>Suponhamos que sua equipe tenha um guia de melhores práticas, a segunda pergunta fatalmente seria: Como podemos garantir que o guia está sendo seguido?</p>
<p>A resposta novamente seria: revisão de código (code review) e, se encaixarmos tal prática no contexto de um projeto com milhares de linhas de código, sabemos que o resultado pode ser catastrófico no que diz respeito a tempo.</p>
<p>Através do recurso de auditoria de código (QA Audits) do Delphi você poderá finalmente definir um conjunto de boas práticas de codificação e garantir que estas práticas estão sendo seguidas em seus projetos. Traduzindo para o dia-a-dia, você irá detectar erros que podem ocorrer na aplicação antes de ela ser executada.</p>
<p>A auditoria verifica se o código está em conformidade com as regras e parâmetros estabelecidos pela organização. Os resultados apresentam apenas as violações detectadas e de forma categorizada, são elas:</p>
<ul>
<li>Arrays e Referências</li>
<li>Código duplicado</li>
<li>Conteúdo supérfluo</li>
<li>Desempenho</li>
<li>Desvios e laços</li>
<li>Estilo de codificação</li>
<li>Estilo de nomenclatura</li>
<li>Expressões</li>
<li>Falhas de projeto (design)</li>
<li>Possíveis erros</li>
</ul>
<p><a href="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/01/qaaudits.jpeg"><img class="aligncenter size-full wp-image-622" title="Auditoria" src="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/01/qaaudits.jpeg" alt="" width="673" height="353" /></a></p>
<p>Cada item da auditoria tem uma nota explicativa representando o modo correto e o incorreto para utilização da mesma, tornando mais fácil o entendimento por parte do desenvolvedor naquele item da auditoria. Cada um desses itens pode ter seu nível de severidade alterado entre: Info, Warning e Error. Ficando a critério do desenvolvedor definir a importância do item.</p>
<h3><strong>Loop Body is Never Executed (LBNE)</strong></h3>
<p>Em muitos casos, temos rotinas de execução que envolve vários loops e é necessário depurar para ter certeza que os loops serão executados. Com a auditoria LBNE, isso pode ser detectado. O código abaixo é um exemplo simples que podemos detectar. Exemplos complexos, com diversas condições, também são detectados facilmente.</p>
<pre class="brush: pascal">var
   x: Boolean;
begin
  x := false;
  while s do
  begin
     ....
  end;</pre>
<p><strong>INDEX OUT OF BOUNDS (IOB)</strong></p>
<p>Esta mensagem é comum quando se tenta acessar uma posição de array inexistente. Veja abaixo um exemplo de um código que irá gerar este aviso.</p>
<pre class="brush: pascal">var
  nloops,
  i,
  j :integer;
  matriz : array of integer;
  somatorio : double;
begin
  for i := 0 to nloops do
  begin
      somatorio := 0;
      for j := 0 to High(matriz) do
          somatorio := somatorio + matriz[i];

  end;</pre>
<p><a href="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/01/Auditresults.jpeg"><img class="aligncenter size-full wp-image-624" title="Resultado da Auditória" src="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/01/Auditresults.jpeg" alt="" width="647" height="234" /></a></p>
<p>A auditoria apontou o erro e informa que na linha 25 existe a tentativa de acesso a uma variável que não faz do 2º loop, vamos explicar melhor.<br />
No for da variável J, estou tentando acesso a uma posição do array ARR, apontando para a posição I do loop anterior, sendo que no for da variável J é onde está sendo percorrido o array ARR.</p>
<p>São mais de 200 auditórias disponíveis no Delphi, que tal executar o processo de auditória no seu código, não se assuste com o resultado <img src='http://www.andreanolanusse.com/blogpt/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , a idéia é lhe ajudar a melhorar a qualidade do seu produto final.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/blogpt/auditando-seu-codigo-delphi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Entendendo Unicode para migrar sua aplicação Delphi</title>
		<link>http://www.andreanolanusse.com/blogpt/entendendo-unicode-para-migrar-sua-aplicacao-delphi/</link>
		<comments>http://www.andreanolanusse.com/blogpt/entendendo-unicode-para-migrar-sua-aplicacao-delphi/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 13:22:33 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi (Win32)]]></category>
		<category><![CDATA[Unicode]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/blogpt/?p=613</guid>
		<description><![CDATA[Um grande desafio para nossa equipe de R&#38;D foi incorporar o suporte a Unicode em toda a VCL, conseqüentemente no IDE, uma vez que Delphi é feito em Delphi.
Durante todo o desenvolvimento do Delphi 2009, tivemos reuniões com várias empresas desenvolvedoras de componentes e Allen Bauer, Delphi Chief Scientist, através do seu blog comentou sobre [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-618" style="border: 0pt none; margin: 4px;" title="Unicode" src="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/01/Ascender-Unicode-graphic.gif" alt="" width="300" height="168" />Um grande desafio para nossa equipe de R&amp;D foi incorporar o suporte a Unicode em toda a VCL, conseqüentemente no IDE, uma vez que Delphi é feito em Delphi.</p>
<p>Durante todo o desenvolvimento do Delphi 2009, tivemos reuniões com várias empresas desenvolvedoras de componentes e <a href="http://blogs.embarcadero.com/abauer/" target="_blank">Allen Bauer</a>, Delphi Chief Scientist, através do seu blog comentou sobre o suporte a Unicode. Estas iniciativas foram fundamentais para permitir que componentes de terceiros estejam disponíveis rapidamente para o Delphi 2009 e informar aos desenvolvedores como trabalhar com Unicode.</p>
<p style="text-align: center;">
<p style="text-align: center;"><em>Unicode é um padrão que permite aos computadores representar e manipular, de forma consistente, texto de qualquer sistema de escrita existente.</em></p>
<p style="text-align: center;"><strong><em>The Unicode Standard: Version 5.0. 5. ed. Addison-Wesley Professional, 2006. 1472 p</em></strong></p>
<p>Diversos conjuntos de caracteres como chineses, japoneses, russos e outros de origem asiáticas são representados através de Unicode, utilizando, na maioria dos casos, sistemas de mapeamento e codificação UTF (Formato de Transformação Unicode) e UCS (Conjunto Universal de Caracteres). Para maiores detalhes sobre Unicode, recomendo o seguinte link: http://pt.wikipedia.org/wiki/Unicode.</p>
<p>O resultado foi um Delphi 100% Unicode, sem exceção. Você deve estar se perguntando, a migração é tranqüila? Podemos dizer que sim, muita coisa foi tratada pela VCL e pelo compilador.</p>
<p>Uma das grandes mudanças foi nos tipos String, que anteriormente era baseado em padrão ANSI. Agora estão baseadas em padrão UNICODE. Os tipos AnsiString e WideString continuam funcionando da mesma forma, exceto para tamanho de dados.</p>
<p>Resumo das mudanças para Unicode:</p>
<ul>
<li>String mapeia UnicodeString e não mais AnsiString</li>
<li>Char agora mapeia WideChar (2 bytes e não 1 byte) e é um caractere UTF-16</li>
<li>PChar mapeia PWideChar</li>
<li>AnsiString mapeia o antigo tipo String</li>
</ul>
<p>Não ocorreram mudanças:</p>
<ul>
<li>AnsiString</li>
<li>WideString</li>
<li>AnsiChar, PAnsiChar</li>
<li>Short String contém elementos AnsiChar</li>
<li>Conversões implícitas continuam funcionando</li>
<li>O editor de código controla o modo de gravação (Unicode vs AnsiString), ambos continuam sendo suportados.</li>
</ul>
<p>Operações que não dependem do tamanho do caractere:</p>
<ul>
<li>Concatenação de Strings</li>
<li>Funções padrão para manipulação de Strings, exemplo: Lenght, Copy, Pos e outras.</li>
<li>Operadores, exemplos: &lt;string&gt; &lt;op. de comparação&gt; &lt;string&gt;, CompareStr(), CompareText(), etc.</li>
<li>FillChar ( &lt;struct or memory&gt; )</li>
<li>Windows API</li>
</ul>
<p>Operações que envolvem tamanho de caractere em bytes, talvez requeiram algumas mudanças, nada complicado, aqui vai uma dica, verifique código onde você:</p>
<ol>
<li>Assume que o Sizeof (Char) é 1.</li>
<li>Assume que o tamanho de uma string é igual ao número de bytes na string.</li>
<li>Manipula diretamente String ou PChars.</li>
<li>Grava ou lê string de/para um arquivo.</li>
</ol>
<p>Os itens 1 e 2 não valem para Unicode, porque para Unicode Sizeof (Char) são 2 bytes e o tamanho de uma string é duas vezes o número de bytes. Além disso, o código que lê e grava arquivos precisa entender o número correto de bytes para efetuar estas operações, pois um caractere não é mais representando por 1 byte.</p>
<p>Como vocês podem ver, a migração é muito tranqüila. O benefício de suportar Unicode é permitir que o desenvolvedor Delphi distribua as suas aplicações em todo o mundo. O Brasil hoje é um dos grandes desenvolvedores de software mundiais. Diversas empresas brasileiras distribuem as suas aplicações na China, Japão, Rússia e outros Países onde Unicode é fundamental.</p>
<p>Em 2007, o governo Russo adquiriu 1 milhão de licenças de Delphi, que serão utilizadas para ensinar alunos do 1º e 2º graus a desenvolver software com Delphi. Portanto, o suporte a Unicode é fundamental naquele País.</p>
<p>Para ajudar a conhecer todos os recursos do Delphi 2010 e auxiliar na migração disponibilizamos o <a href="http://www.embarcadero.com/rad-studio-2010-migration-center" target="_blank"><strong>RAD Studio Migration Center</strong></a>, onde você encontrará diversos materiais, como artigos e vídeos, divirtam-se.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/blogpt/entendendo-unicode-para-migrar-sua-aplicacao-delphi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Melhorando a qualidade do seu software Delphi através da UML</title>
		<link>http://www.andreanolanusse.com/blogpt/melhorando-a-qualidade-do-seu-software-delphi-atraves-da-uml/</link>
		<comments>http://www.andreanolanusse.com/blogpt/melhorando-a-qualidade-do-seu-software-delphi-atraves-da-uml/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 12:57:14 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi (Win32)]]></category>
		<category><![CDATA[UML]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/blogpt/?p=605</guid>
		<description><![CDATA[A qualidade que é sempre solicitada no produto final, é também requisito fundamental para o software, já que é através dele que as estratégias de crescimento da empresa são sustentadas. Se você entrega um software que não tem qualidade pode comprometer o sucesso do seu cliente.
Desde o Delphi 2006 podemos utilizar a UML com todos [...]]]></description>
			<content:encoded><![CDATA[<p>A qualidade que é sempre solicitada no produto final, é também requisito fundamental para o software, já que é através dele que as estratégias de crescimento da empresa são sustentadas. Se você entrega um software que não tem qualidade pode comprometer o sucesso do seu cliente.</p>
<p>Desde o Delphi 2006 podemos utilizar a UML com todos os seus diagramas e, além disso, a utilização do LiveSource, que permite sincronização entre diagrama de classe e código.</p>
<p>Cada diagrama na UML tem a sua representatividade, alguns representam modelos de negócios e, portanto, não faz sentido gerar código a partir dele. Outros a representação fiel do código, por exemplo, o diagrama de classe. Abaixo, alguns dos diagramas disponíveis e suas funcionalidades.</p>
<ul>
<li>Use Case &#8211; é uma forma de descrever a interação entre um      sistema e o mundo real, sendo que os atores que podem ser pessoas ou sistemas,      representam o mundo real.</li>
<li>Class Diagram &#8211; representa as classes do sistema e seus relacionamentos.</li>
<li>Collaboration &#8211; utilizado para modelagem de aspectos dinâmicos de um sistema ou      subsistema.</li>
<li>Activity &#8211; permite representar situações dinâmicas através      de um fluxo, por meio dele será possível representar o fluxo entre      objetos.</li>
<li>Component &#8211; utilizada para modelagem de mais alto nível, onde existam      estruturas complexas. Este diagrama ilustra pedaços de sistemas, controles embutidos etc.</li>
<li>State &#8211; Especifica a seqüência de eventos de um determinado objeto.</li>
</ul>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/01/UseCase.jpg"><img class="aligncenter size-large wp-image-606" title="Delphi - Use Case" src="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/01/UseCase-1024x819.jpg" alt="" width="583" height="466" /></a>Diagrama de caso de uso</p>
<p>Visualizar um diagrama de classes torna muito mais fácil o entendimento sobre as classes nele existentes do que utilizar código. Vejamos um exemplo do próprio Delphi: a unit Buttons.pas tem diversos componentes dentro dela como TBitBtn, TSpeedButton e outros. Imaginem entender 1946 linhas de código para saber quais componentes e relacionamento existem entre eles. Através da engenharia reversa, fica muito fácil de entender, veja a figura abaixo.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/01/classdiagram.jpeg"><img class="aligncenter size-large wp-image-607" title="Class Diagram" src="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/01/classdiagram-1024x819.jpg" alt="" width="547" height="436" /></a>Diagrama de Classe</p>
<p style="text-align: left;">A engenharia reversa pode ser feita a qualquer momento a partir do código Delphi, desta forma vemos que este recurso do Delphi auxilia e muito na evolução e entendimento do código, seja atual ou legado.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/blogpt/melhorando-a-qualidade-do-seu-software-delphi-atraves-da-uml/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Livro Delphi Prism Manual de Referência</title>
		<link>http://www.andreanolanusse.com/blogpt/livro-delphi-prism-manual-de-referencia/</link>
		<comments>http://www.andreanolanusse.com/blogpt/livro-delphi-prism-manual-de-referencia/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 11:37:29 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi (Win32)]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Delphi Prism]]></category>
		<category><![CDATA[Livros]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/blogpt/?p=600</guid>
		<description><![CDATA[Amigos desenvolvedores, com grande prazer que venho anunciar o primeiro livro sobre Delphi Prism, o livro foi escrito em Espanhol pelo Marcos Santin o qual me convidou para revisar todo o conteúdo aqui disponibilizado, foram meses de trabalho que ao final se concretizou em 529 páginas.
O livro foca 100% na linguagem Delphi Prism a no [...]]]></description>
			<content:encoded><![CDATA[<p>Amigos desenvolvedores, com grande prazer que venho anunciar o primeiro livro sobre Delphi Prism, o livro foi escrito em Espanhol pelo Marcos Santin o qual me convidou para revisar todo o conteúdo aqui disponibilizado, foram meses de trabalho que ao final se concretizou em 529 páginas.</p>
<p>O livro foca 100% na linguagem Delphi Prism a no entendimento do .NET Framework, ou seja, pra você que quer começar em .NET com Delphi é tudo o que você precisa. O livro está sendo comercializado pela <strong><a href="http://www.gopac.com.mx/v3/gopache/embarcadero/LibroDelphiPrism.asp">GOPAC</a></strong> (Partner da Embarcadero no México) e já está disponível para aquisição.</p>
<p>Existe planos de traduzir o livro para o Português, mas ainda não temos data definida, visto que é um grande trabalho.</p>
<p><a href="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/01/DelphiPrismBook-CoverPage-1.jpg"><img class="aligncenter size-full wp-image-599" title="Delphi Prism Book" src="http://www.andreanolanusse.com/blogpt/wp-content/uploads/2010/01/DelphiPrismBook-CoverPage-1.jpg" alt="" width="543" height="625" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/blogpt/livro-delphi-prism-manual-de-referencia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
