sábado, 28 de abril de 2012
Delphi Meeting 2012
Link para a inscrição: http://www.edobrasil.net/delphimeeting/
Até lá!
sexta-feira, 16 de março de 2012
Instalação de um Servidor SVN
Eu uso o SVN a vários anos mas nunca configurei um servidor.
Mas sempre há a primeira vez e compartilho aqui, com você, a minha experiência.
Meu ponto de partida obviamente foi o Google e fiquei um pouco surpreso em perceber que o SVN tomou vários caminhos, forks e etc.
Não sei se estou falando alguma besteira mas é de fato um pouco confuso.
Tive que escolher um ponto inicial e o escolhido foi: http://subversion.apache.org/
Até onde entedi aqui é o lugar certo para iniciar.
Para o efetivo download cheguei neste link: http://subversion.apache.org/packages.html#windows
Dai veio o dilema. Qual escolher? Optei pelo projeto Win32SVN (Subversion for Windows).
O download desta distribuição pode ser feito em: http://alagazam.net/ onde optei pelo instalador MSI, disponível na seguinte URL:
http://sourceforge.net/projects/win32svn/files/1.7.2/Setup-Subversion-1.7.2.msi/download
Após a instalação temos que, manualmente, instalar o SVN como serviço do Windows. O comando para isto é:
sc create svn binpath= "\"c:\program files (x86)\Subversion\bin\svnserve.exe\" --service -r c:\Repositorio" displayname= "Servidor Subversion" depend= Tcpip start= auto
Importante: Execute o prompt de comando como Administrador e coloque um espaço entre o sinal de igual e o valor.
Vamos ao client. O Delphi XE2 dá suporte à interação direta com o SVN. Mas vou continuar usando o Tortoise por enquanto.
O download pode ser feito em: http://tortoisesvn.net/downloads.html
Um post que achei bem completo está em: http://moisesfontana.blogspot.com/2007/09/instalar-e-configurar-um-servidor.html
É isto,
terça-feira, 21 de fevereiro de 2012
Trabalhando com Atributos (Custom Attributes)
Antes de mais nada quero esclarecer que não estou me referindo aos atributos de uma classe e sim de um conceito novo (Delphi 2010) mas já existente em outras plataformas de desenvolvimento.
Do que NÃO estamos falando:
TPessoa = class
private
FNome: string;
FIdade: Integer; {<== Isto é um atributo de uma classe e NÃO é disto que estamos falando}
public
property Nome: string read FNome write FNome;
property Idade: Integer read FIdade write FIdade;
end;
Do que estamos falando:
TPessoa = class
private
FNome: string;
public
property Nome: string read FNome write FNome;
[TIdadeMinima(21)] {<== É disto que estamos falando!}
property Idade: Byte read FIdade write FIdade;
end;
Mas o que significa atributo?
No dicionário:
S. m. 1. Aquilo que é próprio de um ser. 2. Emblema distintivo; símbolo. 3. Característica, qualitativa ou quantitativa, que identifica um membro de um conjunto observado. ...
Ou seja, atributo é, basicamente, uma qualidade atribuída a um elemento.
Usando no Delphi
O uso mais recorrente é em frameworks ORM. Mas as possibilidades são muitos mais amplas que isso. Poderíamos utilizar esta facilidade para atender regras de formatação de um documento eletrônico, como por exemplo o EFD Pis/Cofins ou um protocolo de comunicação com algum equipamento.
Então, indo ao ponto, os atributos são classes descendentes de TCustomAttribute. O TCustomAttribute por sua vez não implementa nada de especial.
Seguindo o nosso exemplo inicial, o atributo TIdadeMinima seria declarado da seguinte maneira:
TIdadeMinima= class(TCustomAttribute)
private
FIdadeMinima: Byte;
public
constructor Create(AIdadeMinima: Byte);
function IsIdadeMaior(AIdade: Byte): Boolean;
property IdadeMinima: Byte read FIdadeMinima;
end;
//Implementação//
{ TIdadeMinima }
constructor TIdadeMinima.Create(AIdadeMinima: Byte);
begin
Self.FIdadeMinima := AIdadeMinima;
end;
function TIdadeMinima.IsIdadeMaior(AIdade: Byte): Boolean;
begin
Result := AIdade >= Self.FIdadeMinima;
end;
No que devemos focar?
O construtor da classe deve solicitar os parâmetros que fazem parte do escopo do atributo. No exemplo, o atributo está especificando uma idade mínima para a instância de TPessoa. Portanto o constructor do atributo pede justamente a idade mínima.
Para efetivamente tiramos proveito do atributo temos que recorrer à RTTI, pois só com ela temos acesso a um atributo. No exemplo abaixo, temos o código completo de um programa console, que pede o nome e a idade do usuário e valida a idade.
program UsandoAtributos;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils, Rtti;
type
TIdadeMinima= class(TCustomAttribute)
private
FIdadeMinima: Byte;
public
constructor Create(AIdadeMinima: Byte);
function IsIdadeMaior(AIdade: Byte): Boolean;
property IdadeMinima: Byte read FIdadeMinima;
end;
TPessoa = class
private
FNome: string;
FIdade: Byte;
public
property Nome: string read FNome write FNome;
[TIdadeMinima(21)]
property Idade: Byte read FIdade write FIdade;
end;
{ TIdadeMinima }
constructor TIdadeMinima.Create(AIdadeMinima: Byte);
begin
Self.FIdadeMinima := AIdadeMinima;
end;
function TIdadeMinima.IsIdadeMaior(AIdade: Byte): Boolean;
begin
Result := AIdade >= Self.FIdadeMinima;
end;
var
oPessoa : TPessoa;
sNome : string;
bIdade : Byte;
_ctx : TRttiContext;
_typ : TRttiType;
_pro : TRttiProperty;
oAtt : TCustomAttribute;
begin
Writeln('****************************');
Writeln('*** Bem vindo ao sistema ***');
Writeln('****************************');
Writeln(EmptyStr);
oPessoa := nil;
try
oPessoa := TPessoa.Create;
Write('Digite o seu nome: ');
Readln(sNome);
oPessoa.Nome := sNome;
Write('Digite a sua idade: ');
Readln(bIdade);
oPessoa.Idade := bIdade;
Writeln(EmptyStr);
Writeln('Dados');
Writeln(oPessoa.Nome,' - ',oPessoa.Idade);
_ctx := TRttiContext.Create;
_typ := _ctx.GetType(oPessoa.ClassType);
for _pro in _typ.GetProperties do
begin
for oAtt in _pro.GetAttributes do
begin
if oAtt is TIdadeMinima then
begin
Writeln('A idade mínima é de: ',TIdadeMinima(oAtt).IdadeMinima);
if (TIdadeMinima(oAtt).IsIdadeMaior(oPessoa.Idade)) then
begin
Writeln('A idade de ',oPessoa.Nome,' passou!');
end else
begin
Writeln('A idade de ',oPessoa.Nome,' nao passou!');
end;
end;
end;
end;
finally
if (Assigned(oPessoa)) then
begin
oPessoa.Free;
end;
_ctx.Free;
end;
Writeln(EmptyStr);
Writeln('Tecle [ENTER] para encerrar');
Readln;
end.
Vale ressaltar que os atributos podem ser atribuídos a qualquer elemento da sua classe. É o seu código RTTI que terá que ser moldado para tirar proveito delas. Outro ponto importante é que um elemento pode ter vários atributos.
Uso prático
Como mencionei no decorrer, muitos exemplos sobre este tema esta ligado diretamente com a ORM, onde um atributo para a classe indica uma tabela enquanto que alguns atributos para as propriedades seriam os campos e as constraints.
Mas no meu caso, onde precisei gerar um documento eletrônico (EFD Pis/Cofins) baseado em regras, eu criei uma classe base e para cada tipo de registro criei uma classe descendente com os campos e, principalmente, seus atributos: tamanho, tamanho exato, se somente números etc e etc. Por fim, na tal classe base, foi disponibilizado um método chamado GetLine que tanto valida as informações da classe quanto gera a linha correspondente. Esta solução foi ótima pois o código ficou mais limpo e tenho certeza que mudanças ou implementações futuras será muito tranquilas.
Também poderíamos usar para implementar uma validação em uma tela de entrada, afinal, o TForm é uma classe como qualquer outra. Este seria um ótimo uso.
É isto.
sexta-feira, 23 de dezembro de 2011
Eu tenho um sonho
Mais um ano se encerra e mais um ano se inicia.
Não podemos ficar indiferente a isto. Esta época do ano é meramente um marco. São dias como outro qualquer, mas representam o fim de uma época e a esperança que o próximo período será melhor. Natal e Ano Novo. As palavras em si encerram algo bom.
Mas de nada adianta se não houver reflexão.
E eu ando refletindo bastante e convido a você, amigo desconhecido, a fazer o mesmo.
Refletir sobre o que fizemos de bom e de ruim.
Pedir perdão e perdoar. E perdoar a si mesmo, como sabiamente me aconselha minha querida namorada, que mais do que isso, é minha amiga nas horas difíceis. Tamires, obrigado por entrar em minha vida.
Valorizar o tempo com os seus filhos. Missão difícil para pais como eu, que por algum motivo não tem o privilégio de conviver diariamente com eles. Que os vêem em dias marcados. Júlio e Fernanda, meus melhores dias são aqueles em que vocês estão comigo, seja no Parque do Ibirapuera, seja assistindo o mesmo filminho pela enésima vez.
Deus, obrigado por ter me dado dois filhos maravilhosos.
Nossos pais merecem atenção também. Os meus não vivem juntos a muito tempo. Tenho algumas lembranças, umas boas outras ruins.
Tento sempre ficar com as boas. Rezo sempre para que eles se perdoem e vivam plenamente suas vidas. O que eu puder fazer para ajudá-los, farei.
Minha mãe foi uma guerreira e merece toda minha paciência e Deus, mais uma vez, me ajudará.
Valdete e Joselito, que Deus conforte seus corações.
Nossos irmãos não podem ser esquecidos. Tenho um bom irmão. Centrado. Admiro muito ele, espero que ele saiba disto. Manoel, você é o cara. Tenho mais dois irmãos por parte de pai que gostaria de ter tido mais contato. Jenny e Jony.
Há muito mais pessoas. A mensagem que quero passar é esta. Pare e veja o que é e principalmente, quem é importante para você. E deixe isso claro para elas, com palavras e atitudes.
Voltarei a postar no ano de 2012. Nosso Delphi está cheio de novidades e este blog será profissionalizado a fim de podermos crescer juntos.
Quanto ao meu sonho?
Que em 2012 nossos sonhos sejam verdades.
Feliz Natal e Próspero Ano Novo a todos.
terça-feira, 29 de novembro de 2011
Delphi Conference 2011
Primeiramente gostaria de me desculpar por tanto tempo sem postagens. Houveram mudanças muito importantes na minha vida profissional e infelizmente isso me impediu de postar com a frequência que eu gostaria.
Este post tem um motivo especial que é o Delphi Conference 2011 que será amanhã, 30.11.2011, em São Paulo.
http://www.delphiconference.com.br/
Gostaria de convidá-lo a assistir a palestra Desmistificando as Expressões Regulares na Sala 1 às 17:30 que terei a honra de ministrar.
É um assunto muito empolgante e a partir de hoje darei destaque ao assunto no meu blog, criando inclusive uma página específica para o tema: http://eugostododelphi.blogspot.com/p/expressao-regular.html
É isto. Nos vemos amanhã.
Forte abraço.
quinta-feira, 15 de setembro de 2011
Calendário de cursos na TDS
Para verificar as turmas disponíveis acesse: http://tdstecnologiasp.com.br/calendarios/tdscal-13092011190451.htm
Forte abraço.
quarta-feira, 10 de agosto de 2011
Object Pascal Style Guide
O link abaixo vai me ajudar:
http://edn.embarcadero.com/article/10280
Recebi pelo grupo de discussão do Yahoo!
Minha lista de blogs
-
Problemas comuns no WinDbg e suas soluções4 horas atrás
-
365 dias na adrenalina – dia #244 Doce rotina7 horas atrás
-
-
-
-
Senha Forte – Parte 217 horas atrás
-
-
-
Conjuntos de Cantor generalizados1 dia atrás
-
-
-
Drag and Drop com ListView2 dias atrás
-
-
-
Dá ou Desce3 dias atrás
-
Formatando datas no SQL e no C#5 dias atrás
-
-
A new state of love: Apathy6 dias atrás
-
-
Crítica a comunidade1 semana atrás
-
-
Classe para Gerar o Fluxo de Caixa em Delphi parte IV2 semanas atrás
-
Dropbox Link for next IDE Fix Pack Version2 semanas atrás
-
Lançado o Apache OpenOffice 3.42 semanas atrás
-
SynMiniMap updated to v. 1.12 semanas atrás
-
Site da Apple adota imagens SVG3 semanas atrás
-
-
Bye Bye Embarcadero3 semanas atrás
-
-
-
Novo endereço, vida nova5 semanas atrás
-
PostgreSql data de hoje5 semanas atrás
-
wpd-banner-180x1501 mês atrás
-
Astah Professional 6.5.1 x86 x641 mês atrás
-
-
-
Download Delphi1 mês atrás
-
TPodcast 9 – Podcast.Free;2 meses atrás
-
Fibonacci em SQL2 meses atrás
-
-
Novos Topicos2 meses atrás
-
-
Acessando a web com proxy usando Java2 meses atrás
-
Modificando o Custo do Link2 meses atrás
-
Delphi Release Dates2 meses atrás
-
Visual Studio 11 Beta2 meses atrás
-
-
-
-
-
Oxygene for Java5 meses atrás
-
TESTANDO O BLOG6 meses atrás
-
-
Google+ Delphi User Groups6 meses atrás
-
Conhecendo DataSnap e sua Arquitetura.7 meses atrás
-
Lançada a versão 2.5.1 final do Firebird7 meses atrás
-
Promoções do Mês - Outubro / 20117 meses atrás
-
-
See you at CodeRage8 meses atrás
-
-
-
-
Mudança de Endereço morfikBR1 ano atrás
-
Adeus… ou Até Logo, Quem Sabe1 ano atrás
-
O SILÊNCIO DA ALMA1 ano atrás
-
-
-
-
formspring.me1 ano atrás
-
Exibindo HTML em um .RDL1 ano atrás
-
-
Vídeo aula disponível1 ano atrás
-
-
-
-
Novo Blog1 ano atrás
-
Telecom + Informática = Telemática1 ano atrás
-
Manifesto em samba1 ano atrás
-
MySQL Workbench2 anos atrás
-
-
-
ErrorManager - Microframework2 anos atrás
-
Novo livro sobre Delphi 2009 em português2 anos atrás
-
Windows 7 Components - Sorry2 anos atrás
-
Records com Métodos e Propriedades3 anos atrás
-
Objetos com contagem de referência3 anos atrás
-
Destaques do dia3 anos atrás
-
-

