terça-feira, 13 de novembro de 2007

Baptizou-se a Mariana!

Foi com grande alegria que baptizámos (eu, Duarte e a minha mulher Sónia) a nossa filha Mariana. Já não era sem tempo, com os sete meses que tem. Os padrinhos foram a Diana Duarte Sousa nossa grande amiga e o Tiago Caneira, meu (grande) cunhado.

Foi na Igreja de Bicesse, no dia de São Martinho, 11 de Novembro de 2007, que nos apressámos para a missa das 11 horas (sim, foi às 11 horas do dia 11 do mês 11, mas foi puro acaso!).
Por pouco, entrava o Padre e seus ajudantes e ainda metade dos convidados não tinha chegado, inclusive o padrinho (shame on you!!). Mas, por fim, ainda acabámos todos à espera do Padre, que também se demorou.

A Mariana dormia solenemente aguardando a cerimónia.
Finalmente, fez-se silêncio fazendo crer que a missa ia começar. Entraram o Padre e três meninas acólitas, seguindo-o. Parece que desta vez os meninos ficaram em casa, preguiçosos. As mulheres são mais bem dotadas para estas coisas da assiduidade e da maturidade.

O coro fez-se notar, sempre firme, e tornou muito agradável a celebração.

Foi quando assinalámos a cruz na testa da Mariana que lhe peguei - ela tinha estado na cadeira maxicosi, espetando o pescoço, tudo querendo ver. Acordara com os cânticos que se entoaram.
Aceitou alegremente o colo e os sinais que lhe fizemos, o Padre, os pais e os padrinhos.

Lá nos sentámos novamente pois era altura das leituras. Todas.
A primeira leitura, o salmo, lindamente cantado (pelo filho do Zé do Lago), a segunda leitura, o Aleluia e o Evangelho.
Não pedimos nada mas esta comunidade deu-nos uma daquelas missas com tudo!

Depois, salvo erro na ordem, a homilia, a oração dos fiéis, o cumprimento da paz, a comunhão, a acção de graças.

A dada altura coube ao pai da criança acender a vela no círio pascal. Linda vela a que comprámos para a Mariana. Uma vela grossa com um laço em cera. Na ponta caía pendente o pavio, com direito a bola na extremidade.
Foi um sarilho acendê-la. O pavio, ao pegar chama, mais parecia um archote. Eu não sabia o que fazer aos 3 cm extra de pavio ardente que não se queriam separar da vela. Aguardei que caísse junto à chama do círio, mas nada. No fim, dei uma (leve) pancada com a vela da Mariana na base de apoio do castiçal pascal e tudo se resolveu. Suspirei. O Padre, que todo o tempo estivera ao meu lado, também.

Já não me lembro quando, mas a Mariana foi baptizada.
A sinal do Padre dirigimo-nos para junto de uma das pias baptismais, a que estava ao lado do altar (porque há outra ao fundo da Igreja, junto à entrada).
Portou-se lindamente a minha menina. Segurou-a a sua linda mãe. Alegrou-se com a água na cabeça. Veio de lá ainda mais bem disposta do que foi.

A dada altura, o Manuel, que até então se tinha comportado como um menino crescido, começou a disparatar. Experimentou todas as formas de atravessar os bancos corridos da Igreja.
Acabámos por ter que o levar lá para fora, onde ele e o primo Lourenço puderam continuar a fazer o escarcéu.

Perto do fim da missa. Mãe, Pai e toda a família da Mariana tiveram direito, cada um, a uma oração. Para que soubessem estar ao seu lado e indicar-lhe o caminho certo. Foi bonito.

Mais uma católica no meio de nós. Graças a Deus!

(logo que possa publico umas fotos)

domingo, 4 de novembro de 2007

Há música do outro lado

O meu grande amigo de longa data, Mikkel Solnado, vive já há uns largos anos na Dinamarca.
Por cá fomos colegas de banda, de rock: eu, o Kiko, o meu irmão, o Ricardo Jacinto e o Mikkel.
Por lá o Mikkel não parou. Muito pelo contrário. Trabalha num estúdio de som, o "Gabriel Flies" onde produz, compõe, canta, etc.

Eu estou FASCINADO com as músicas que ele tem feito. Para quem queira dar uma espreitadela deixo aqui uma série de links para os sites do MySpace, e outros, onde estão algumas das músicas publicadas:

Página pessoal do Mikkel:
"Mikkel" - http://www.myspace.com/solnado

Página da música do Mikkel:
"Mikkel Solnado Music" - http://www.myspace.com/mikkelsolnado

Página em que o Mikkel expõe músicas dele e de outro amigo:
"I miss music":
http://www.myspace.com/imissmusic

Páginas do estúdio onde trabalha:
"Gabriel Flies @MySpace":
http://www.myspace.com/gabrielflies
e...
http://www.gabrielflies.com/

Página de um DJ dinamarquês, aparentemente bastante conhecido, com quem ele tem trabalhado:
"Dj Noize" - http://www.myspace.com/djnoizecph

"BELUGA STUDIOS COPENHAGEN":
http://www.myspace.com/belugastudioscopenhagen

e

"GETSETGO":
http://www.myspace.com/gsggsg


Gozem a ouvir o "We Fell", o "Flesh & Bones", o "Daily Rumble" e o "The Dream". Esta última com o DJ Noize (mas quase que juro que as vozes do coro são dele!).

Vejam só se não é o Mikkel!!!

















e mais esta:

























O mundo perde muito em não o conhecer! Bem. Tudo é relativo.

sábado, 3 de novembro de 2007

Eu e o Manuel

Estávamos em Paris num dos muitos pequenos jardins que cobre um quarteirão da cidade.

sexta-feira, 2 de novembro de 2007

XOFL

Xml Object Format Language - é o meu mais recente invento e permite a especificação de formatos Xml para classes de objectos.

A ideia surgiu num projecto em que se batalhava com a necessidade de formatar, em Xml, várias classes de objectos, de várias formas diferentes. Ora se precisava dos objectos num formato ora noutro, consoante a entidade com que a aplicação comunicava.
Essencialmente, as classes de objectos eram as mesmas, fosse qual fosse a entidade. Apenas nem todas as propriedades dessas classes interessavam a todas as entidades. Além disso, cada entidade queria ver essas classes de objectos da sua maneira.

Para quem conhece a tecnologia .Net, e concretamente, a biblioteca que a acompanha, esta contém uma infra-estrutura de serialização para Xml, exposta pela classe XmlSerializer, do namespace System.Xml.Serialization.
Esta permite serializar (ou formatar!) classes de objectos para uma representação destes em Xml. Esta representação é afinável através da utilização de atributos na definição das classes. É possível afinar se uma propriedade deve gerar um elemento ou um atributo de Xml, assim como o nome desse elemento ou atributo, mas, com justiça, pouco mais se pode fazer.
Para os leigos em .Net, atributos são construções que se "colam" às definições das classes, com o intuito de anotar ou complementar a classe com meta-informação.

A alternativa à utilização de atributos para controlar a representação de uma classe em Xml, é a implementação, pela classe, do interface IXmlSerializable, do mesmo namespace. Este interface é reconhecido pela classe XmlSerializer e faz com que esta delegue a serialização à própria classe, através dos métodos ReadXml e WriteXml que o interface define.
Desta forma existe total controlo sobre a representação de uma classe em Xml.

Total controlo para a única representação de uma classe em Xml. E eis que nem todo o controlo é suficiente quando os objectivos são altivos!

Não ficamos por aqui. Existem outras limitações desesperantes na abordagem do XmlSerializer. O formato em Xml de uma classe é um espelho da sua estrutura como classe (salvo algumas excepções). Não é possível mudar um formato Xml para além da própria estrutura da classe.

Na práctica esta limitação leva a que (i) o formato em Xml seja desenhado à medida da classe ou, (ii) a classe seja desenhada à medida do formato Xml pretendido. Tal inflexibilidade pode levar a que uma aplicação se sujeite a uma medíocre representação dos seus dados em prol do cumprimento de um formato imposto. Adicionalmente a aplicação fica totalmente vulnerável a alterações do formato Xml, pois estas podem implicar alterações à estrutura das próprias classes, o que, por sua vez, geralmente implica alterações em todos os pontos da aplicação.

Uma solução satisfatória é a criação de um modelo de dados paralelo, constituído por classes, para as quais são transformados os dados das classes que ficam emparelhadas com o formato Xml. Uma vantagem óbvia é a criação de uma camada de protecção contra as adversidades a que está exposto o formato Xml. Uma desvantagem óbvia é a criação de mais uma fase de processamento em que se copiam os dados de um modelo para o outro, com o único objectivo de poder utilizar a infra-estrutura de serialização do .Net.

A classe XmlSerializer tem vista curta. Por muito que me esforce a tentar gostar dela, só me vêm à baila as coisas que não permite fazer.

"O que faz falta é" uma forma de especificar:
  • um ou mais formatos Xml para uma mesma classe;
  • formatos que se componham, classe a classe, sendo definidos separadamente;
  • formatos desgarrados da definição das classes, permitindo a sua definição posterior, bem como a separação entre os dados e a sua representação;
  • formatos que sejam herdados por classes derivadas (isto o XmlSerializer faz);
  • formatos que possam divergir da estrutura das classes que representam, podendo acrescentar níveis (de indentação) no formato inexistentes nas classes ou misturar diferentes classes num só nível - sim, que possam ser uma reestruturação da classe que representam.
Tudo isto e mais "algumas coisitas" que aqui não couberam é o que o XOFL resolve.

O resultado final é uma linguagem Xml, declarativa, que define um formato Xml para uma classe de objectos. Os formatos passíveis de ser expressados pela linguagem são garantidamente bidireccionais! Os formatos são atribuídos a cada classe e compõem-se promovendo a sua reutilização.

Eis um cheirinho do aspecto final:

<?xml version="1.0" encoding="iso-8859-1"?>
<xofl:Template version="1.0"
type="Delfim.Model.Rendimento, Delfim.Model"
xmlns:xofl="http://www.delfim.org/2007/10/xofl">

<Rendimento>
<AnoDoRendimento bind="AnoRend" />
<ValorAnualDoRendimento bind="ValAnual" />
<EstouAquiSoAEncher />
</Rendimento>

</xofl:Template>

E um outro template que usa este último (através da propriedade Rendimentos):
<?xml version="1.0" encoding="iso-8859-1"?>
<xofl:Template version="1.0"
type="Delfim.Model.Rendimentos, Delfim.Model"
xmlns:xofl="http://www.delfim.org/2007/10/xofl">

<LstRendimento>
<Rendimento bind="Rendimentos" />
</LstRendimento>

</xofl:Template>

As classes em .Net podiam ser:
public class Rendimento
{
int _iAnoRend;
decimal _dValAnual;

public int AnoRend
{
get { return _iAnoRend; }
set { _iAnoRend = value; }
}

public decimal ValAnual
{
get { return _dValAnual; }
set { _dValAnual = value; }
}
}
e
public class Rendimentos
{
IList<Rendimento> _lstRendimentos;

public IList<Rendimento> Rendimentos
{
get { return _lstRendimentos; }
set { _lstRendimentos = value; }
}
}

A linguagem define outras construções para além das apresentadas. Em suma contém os seguintes elementos:

<xofl:Element name="NomeDoElemento" [bind="Caminho"]/>

<xofl.Attribute name="NomeDoAtributo" [bind="Caminho"]/>

<xofl:With bind="Caminho"/>

<xofl:Place bind="Caminho"/>

Os elementos Element e Attribute permitem criar elementos e atributos Xml, respectivamente.
Nos exemplos apresentados utilizou-se uma notação simplificada que permite a especificação de elementos literalmente.
O elemento With permite alterar o objecto de contexto (ou corrente) sem qualquer alteração na estrutura do formato.
O elemento Place permite "colocar" nesse "lugar" o formato associado à classe do caminho do atributo bind.

That's all folks - já estou farto de me ouvir e vocês com certeza também!