João Bosco's profileJoão Bosco SeixasBlogListsGuestbook Tools Help

João Bosco Seixas

João Bosco Seixas

Occupation
Location
Interests
January 11

Movido para: http://joaoseixas.blogspot.com

 
 
Se você quer acompanhar as ultimas noticias em tecnologia ou aprender.
Lá você irá encontrar artigos tecnicos e noticias.
Fique de olho.
 
November 01

Construção de gadgets no Windows Vista

Construção de gadgets no Windows Vista

Gadgets também são chamados de mini-aplicativos em português. Para quem não sabe são aqueles ícones que ficam em uma barra lateral transparente do Windows Vista. Os gadgets já são conhecidos de outras plataformas, no Linux por exemplo, acredito que o primeiro gerenciador de janelas a utilizar esse recurso foi o Window Maker, que trazia a possibilidade de se fazer “docks”. No Mac OS também já existe esse recurso há algum tempo.

Para quem pensa que a Microsoft somente agora resolveu “copiar” a idéia, está enganado. Desde Office 97 já vem sendo discutida a introdução desse conceito, mas somente agora ele se consolidou.

 

O que são gadgets?

Existem 3 tipos diferentes de gadgets

 

      • Gadgets do Vista
      • Gadgets do Live.com ou Windows Live Spaces
      • Gadgets SideShow

 

Nesse post iremos falar apenas dos gadgets para Windows Vista, que são aqueles que ficam na barra lateral, na área de trabalho.

Os gadgets para Windows Live Spaces, são gadgets para rodar na web, e os SideShow, são para dispositivos com vídeo secundário, como laptops, que tem um visor na tampa que exibem algumas informações, controles remotos, celulares etc.

 

Um gadget de barra lateral do Vista, pode ser definido de forma simplória como uma pagina HTML rodando em uma janela do Internet Explorer. A visualização na área de trabalho é provida por uma instancia do IE, sem borda e com tamanho pré definido.

O gadget pode estar acoplado ou desacoplado da barra lateral. Quando está acoplado a dimensão padrão recomendada pela Microsoft é 130 X 130px. Sendo que ao estar acoplado a largura máxima é 130px mas a altura pode variar.

Quando está desacoplado essas dimensões podem ser modificadas .

 

 

Por que usar gadgets?

        • Aplicações leves
        • Customização da Área de Trabalho
        • Aumento da produtividade
          • Dados vindos de outras aplicações
          • Informações atualizadas
          • Simplicidade no acesso a informações

 

 

O que preciso para desenvolver um gadget?

Para desenvolver um bom gadget você precisa saber apenas HTML, CSS e Java Script. Por ser executado sempre pelo Internet Explorer, o desenvolvedor não precisa se preocupar com compatibilidade entre browsers ao desenvolver seu gadget. Também é possível a utilização de controles específicos do IE e controles ActiveX, que podem propiciar por exemplo o controle de recursos do Windows como, Windows Media Player, Microsoft Office e etc...

Você também pode escrever seu próprio controle ActiveX. Existe também os objetos da própria barra lateral, que você pode usar para fazer diversas manipulações que facilitam muito o desenvolvimento.

 

Para iniciar seu primeiro aplicativo você irá precisar apenas de um arquivo HTML e um arquivo de configuração XML que irá abrigar algumas informações e definições sobre o seu aplicativo.

 

Para publicar o seu gadget você pode fazê-lo de varias formas, vou falar apenas das formas mais rápidas e fáceis. Na pasta Program Files -> WindowsSidebar -> Gadgets ficam os gadgets globais, que servem para todos os usuários do sistema operacional. Temos também os gadgets locais que servem apenas para o usuário especifico, C:\Users\JOAOBOSCO\appdata\local\microsoft\windows sidebar\gadgets

No local onde tem JOAOBOSCO, você irá substituir pelo seu usuário.

Para criar um gadget basta dentro dessas pastas cria uma pasta com uma “extensão”  .gadget

Por exemplo, crie uma pasta com o nome, “Demonstração.gadget”, dentro dela coloque seus arquivos e você já terá seu gadget publicado, bastando apenas ir a barra lateral do Windows e clicar no botão de adicionar novo gadget, na lista exibida já irá aparecer seu novo gadget.

 

Outra maneira simples é criar todo seu mini-aplicativo numa pasta, zipar a pasta e depois renomear o arquivo zipado, tirando a extensão .zip e colocando a extensão .gadget.

Fazendo isso o Windows reconhece automaticamente a extensão do arquivo e você precisa apenas dar 2 cliques no arquivo para que ele seja executado e adicionado a barra lateral.

 

Exemplo de gadget

 

Vamos agora ao nosso Hello World.

Começaremos pelo nosso arquivo de manifesto, o gadget.xml

Nesse arquivo ficam definições de autoria, nome, ícones, versão descrição e etc.

 

Segue um exemplo do arquivo:

 

<?xml version="1.0" encoding="utf-8" ?>

<gadget>

< name>Gadget IT Extreme</ name>

< namespace>IT Extreme</ namespace>

< version>1.0.0.0</ version>

<author name ="Joao Bosco">

< info url="http://joaoboscoseixas.spaces.live.com " text="Gadgets " />

< logo src="logo.jpg" />

</author >

< copyright>© 2007</ copyright >

< description>Gadget de exemplo para o IT Extreme</ description>

<icons>

< icon width="64" height="64" src ="logo.jpg" />

</icons >

<hosts >

<host name ="sidebar">

< base type="HTML" apiVersion="1.0.0" src ="gadget.html" />

< permissions>full</ permissions>

< platform minPlatformVersion="0.3" />

</host >

</hosts >

</gadget >

 

Temos varias tags, todas agrupadas dentro da tag <gadget>. Temos tags para definição de nome do aplicativo, versão, autor, logo, ícone, descrição e etc.

A tag mais importante é a <base>. Nela é definida o arquivo que será executado, no caso desse XML, ele está apontando para gadget.html

 

Nesse exemplo vamos usar um HTML bem simples para fazer essa demonstração.

 

<html>

<head>

            <title>Meu Primeiro Gadget</title>

            <style>

                        body{

                                   width: 130px;

                                   height: 80px;

                        }

            </style>

</head>

<body>

            <span>Hello World!!!</span>

</body>

</html>

 

A parte de estilo poderia estar normalmente num arquivo .CSS, mas nesse caso para simplificar mais ainda, estou colocando no HTML para facilitar a vida de quem não conhece. Dessa mesma forma num arquivo .css você poderia fazer qualquer formatação, fonte, cor etc., exatamente como numa aplicação web normal.

Se você leu a primeira parte do artigo, então já sabe como publicar o seu gadget, em qual pasta ele deve ficar ou a forma de publicar ele como um arquivo zip.

Publique e veja o resultado.

 

Agora vamos colocar algum código com Java Script no gadget para tratar os eventos de dock e undock. Esses eventos são responsáveis pelas ações que acontecerão ao anexar ou desanexar o gadget da barra lateral.

 

 

 <html>

<head>

            <title>Meu Primeiro Gadget</title>

            <style>

                        body{

                                   width: 130px;

                                   height: 80px;

                        }

            </style>

           

<script>

            function main()

            {

                        System.Gadget.onUndock = verificarEstado;

                        System.Gadget.onDock = verificarEstado;

}

 

function verificarEstado()

{

            if(!System.Gadget.docked){

                        setUndockedSize();

}

else{

            setDockedSize();

}

                                                                      

}

 

function setUndockedSize(){

            document.body.style.width = “280px”;

            document.body.style.height = “180px”;

            gadgetContent.innerHTML = ‘<h1> DESANEXADO </h1>’;

}         

 

function setDockedSize(){

            document.body.style.width = “130px”;

            document.body.style.height = “130px”;

            gadgetContent.innerHTML = ‘Anexado a barra lateral ’;

}         

 

 

 

</script>

 

 

</head>

<body onload=”main()”>

            <span id=”gadgetContent” >Hello World!!!</span>

</body>

</html>

 

Pelo código você pode notar que a depender do conteúdo retornado pelo método System.Gadget.docked, que retorna um boolean, você poderá saber se o gadget está anexado a barra lateral ou não, com isso ele vai ser redimensionado para um determinado tamanho e o texto exibido se modificará.

Como eu sei que existe um método System.Gadget.docked ?

Na verdade eu tenho super poderes, e me comunico com maquinas, então foi fácil, eu simplesmente perguntei para API do Windows Sidebar, qual era o método que me retornava se a aplicação estava anexada ou não a barra lateral.

Mas caso você não tenha os mesmos super-poderes que eu, você pode encontrar todas essas informações e muito mais na pagina oficial da documentação no MSDN.

http://msdn2.microsoft.com/en-us/library/aa965850.aspx

 

Nessa pagina você encontrará vários métodos muito úteis para construção dos seus gadgets, com exemplos que ensinam a aplicar os métodos.

Existem métodos que verificam as medidas de processador e memória, das interfaces wireless e etc.

Esse é o material de referencia. Tudo está lá, desde a referencia do arquivo de manifesto XML até os métodos que podem ser usados.

 

Esse é um exemplo BEEEMM básico. Você pode e deve aprender como se faz telas de configurações e flyouts para melhorar o seu gadget.

Flyouts são as expansões que provêem uma visualização diferenciada quando você passa o mouse sobre o gadget. Por exemplo, num gadget que exibe noticias você pode ter a noticia passando de forma rotativa como se fosse um letreiro e ao passar o mouse sobre a noticia, seria aberto um flyout com um resumo da noticia.

Já no arquivo de configuração você pode fazer modificação do visual do gadget por exemplo.

Enfim, as possibilidades são infinitas, basta deixar sua criatividade agir.

Você pode pegar por exemplo dados de alguma pagina web para exibir no seu gadget na sua área de trabalho. Você pode ter um software que grava sua agenda de contatos em um arquivo XML e o seu gadget vai ler esse arquivo XML e mostrar a você os seus contatos.

Possibilidades infinitas, então… Mãos a obra!

October 22

Fundamentos do Framework 2.0 - Tipos por Valor

Fundamentos do Framework

Tipo por Valor

 

 

Esse é o primeiro artigo de uma serie que irá falar sobre fundamento do .NET Framework 2.0 utilizando C#.

O objetivo é falar de alguns pontos importantes do framework para quem está começando com .NET 2.0

Grande parte do conteúdo foi baseado no livro Microsoft .NET FRAMEWORK 2.0 Application Development Foundation que serve de guia para prova 70-536 da Microsoft.

 

Vamos começar essa serie falando sobre algo muito básico. Os tipos por Valor.

Tipos por valor guardam diretamente os dados, enquanto tipos por referencia são apenas apontadores para alguma área de memória.

 

Os tipos por valor são guardados numa área de memória chamada stack(pilha), onde o runtime pode criar, ler, atualizar e deletar rapidamente, com o mínimo de sobrecarga.

Quando você copia um tipo por valor os dados da variável são copiados em outro ponto da pilha. Ficando assim armazenados em dois locais diferentes na pilha, se você altera um deles, o outro continua com o mesmo valor.

A vantagem mais obvia de se usar tipos por valor é a performance. Mais tarde discutiremos os ganhos com tipos por valor.

 

 

Existem 3 categorias básicas de tipos por valor

    • Built-in
    • User-Defined
    • Enumeration

 

Built-in, são tipos fornecidos pelo .NET Framework. Todos os tipos numéricos básicos inclusos no .NET Framework, são tipos por valor.

Exemplos:

 

      • sbyte 
      • byte   
      • short  
      • int      
      • uint    
      • long   
      • float   
      • double

 

 

 

*Nota do Livro*

Segundo os autores o runtime otimiza a performance dos inteiros de 32 bits ou seja, o int (System.Int32).

Para operações de ponto flutuante o recomendado seria double(System.Double), pois suas operações são otimizadas pelo hardware.

 

 

Alguns tipos não numéricos também são tipos por valor.

Exemplos:

char (System.Char)     bool(System.Boolean) date(System.DateTime)

 

Esses são os tipos mais comuns, porem existem outros tipos por valor que são fornecidos pelo framework.

 

Tipos por valor Built-in possuem construtores implícitos, por isso não há necessidade de se declarar com a palavra “new” como é feito com classes normais.

*Lembrando que todos as classes herdam de System.Object.*

Exemplos de inicialização em variáveis por valor.

int x;

bool k = false;

double y = 10.2;

 

No .NET FRAMEWORK 2.0, temos um novo tipo por valor, o Nullable.

Esse tipo pode assumir 3 valores (true, false, null).

Pode ser aplicado em uma rotina onde os valores possíveis são true e false, mas que se deseja ter um controle sobre o campo.

Exemplo, se o usuário preencheu o campo então a variável receberá true ou false de acordo com o escolhido pelo usuário, mas se o usuário não preencheu o campo, então o valor fica null.

Existem também outras possibilidades para o uso do Nullable

Um exemplo de declaração:

Nullable<bool> b = null;

 

Em um futuro artigo iremos falar sobre essa sintaxe de declaração do Nullable, abordando Generics.

 

 

Temos também os tipos User-Defined que são chamados de struturas ou structs.

As structs são tipos por valor, na maioria das vezes se parecem muito com uma classe, a única diferença é que ela é armazenada na pilha como se fosse um objeto referenciado por valor

 

 

Structs são agrupamentos de dados que facilitam o trabalho. Por exemplo, o System.Drawing.Point , que é um struct que contem as coordenadas X e Y de um ponto qualquer.

Você poderia perfeitamente criar uma variável inteira para X e outra para Y, mas agrupa-las numa struct provê uma forma mais fácil de trabalhar com as coordenadas, dando a possibilidade de usar um construtor por exemplo.

 

System.Drawing.Point ponto = new System.Drawing.Point(100,200);

 

 

Como se pode observer, a forma de se trabalhar com struct é idêntica a um classe. Para declarar uma estrutura, é usada a palavra reservada struct em C#.

Segue um exemplo de struct:

 

 struct ponto{

           

            int X, Y; //campos - atributos

           

            //Construtor que recebe as coordenadas X e Y como parametros

            public ponto(int coordX, int coordY){

                       

                        X = coordX;

                        Y = coordY;

}

 

            //Propriedade que manipula a coordenada X

            public int CoordenadaX{

                        get { return X; }

                        set  { X = value; }

}

 

//Propriedade que manipula a coordenada Y

public int CoordenadaY{

                        get { return Y }

                        set  { Y= value; }

}

} 

 

Como da para perceber, pode-se converter facilmente essa struct para uma classe, a diferença é que ela passará a ser um tipo por referencia e ocupará mais espaço na memória. Um tipo por valor, ocupa 4 bytes para cada campo inteiro. No caso dessa struct ela teria o tamanho de 8 bytes, já se fosse uma classe teria 16 bytes.

Structs são normalmente mais eficientes e performáticas que classes, pois um tipo por valor tem melhor desempenho que tipos por referencia.

Lembrando que quando se trabalha dessa maneira com structs, é importante sobrescrever alguns métodos como por exemplo o Equals().

 

Por ultimo vamos falar sobre enumerações, que também é um tipo por valor. Enums, como são comumente conhecidas,  facilitam a legibilidade do código, portanto é uma boa pratica de programação empregar essa funcionalidade sempre que possível. É muito simples de implementar, vamos a um exemplo:

 

           

 

 

 

 

 

enum diaSemana{

                        domingo,

segunda,

                        terca,

                        quarta,

                        quinta,

                        sexta,

                        sabado

}

 

 

O padrão do enumeration é começar a contagem do 0 e ir incrementando 1 a cada elemento.

No exemplo acima temos os seguintes valores:

Domingo = 0

Segunda = 1

Terca = 2

Quarta = 3

Quinta = 4

Sexta = 5

Sábado = 6

 

Porem podemos atribuir nosso próprios valores.

 

Enum mês { janeiro = 1, fevereiro, marco, maio, abril }

 

Nesse exemplo janeiro começa com 1 e os outros elementos são incrementados de 1. Podemos também ter o valor atribuído para todos os elementos.

 

Vamos ver agora 2 exemplos

 

int dia = diaSemana.segunda;

int dia = (int) diaSemana.segunda;

 

O primeiro exemplo está errado em C#, pois o valor de retorno de diaSemana.segunda não é um int.

Já o segundo exemplo está correto, pois faz o cast do valor de retorno para int.

 

As enumerações tem como padrão o tipo int, mas podem assumir outros tipos por valor como Byte, Int32 e UInt64.

Podemos criar um enum do tipo long, no exemplo abaixo podemos demonstrar isso.

enum maximo : long {

                        Max = 2147483648L,

                        Min = 255L

}

 

 

 

Lembrando que sempre será necessário o cast, caso deseje armazenar o valor do campo do enum numa variável, como demonstrado mais acima.

 

Lembrando que enum difere completamente de struct e obviamente de classes. Uma enumeração não pode definir métodos, não pode implementar interfaces e não define propriedades.

 

Em breve entraremos em outro tema, dando continuidade aos Fundamentos do Framework 2.0

Espero que tenham gostado.

Foi minha primeira experiência com blogs e construção de materiais.
Não tenho pretensão de ter feito um bom trabalho logo de primeira, mas acredito que com o tempo eu posso melhorar muito.

Espero que ajude alguem que está começando.

 

Abraços,

João Bosco.

October 19

Aprendendo Java com o Bope

Sou .NET mas essa eu não podia deixar passar!
Muito engraçado!!!
 
/**
 * O Bope foi criado para atuar quando a policia perde o controle
 * E no rio de janeiro isso acontece com bastante frequencia
 */


class Bope{

private String nome;
private int qtdeVitimas = 1; // ja começa bem!
public Bope(String nome){
this.nome = nome;

}

// sobrecarga do método ondeTaOBaiano
public void ondeTaOBaiano(Estudante e){
e
.sabeVoarEstudante();
}

public void ondeTaOBaiano(Traficante t){
t
.levaSacoNaCabeca();
}

// exemplo de método final!

public final Doze encontreiOBaiano(Baiano b){
return b.naCaraNaoQueEhPraNaoEstragarVelorio();
}

}
public class Treinamento{

public void missao(CapitaoNascimento cn){
cn
.sentaOdedoNessaPorra();
} // Sugestão do leitor Luciano Silva

public static void main(String [] xxx){
//Apresento o capitão nascimento

Bope capitao = new Bope(”01″); //Capitao Nascimento
try{

//de cada 100 policiais que fazem o curso do Bope,
//so se formam 5, e eu, quando me formei parceiro,
//eramos apenas 3.

Turma.tentaFazerCursoBopeCom(capitao);

while(aluno.count >= 3){
aluno
.pedePraSair();
 
if(aluno istanceof Cafetao){
capitao
.say(”Pede pra sair!”);
capitao
.say(”Seu Lugar Eh Com Puta!”);
 
}
 
if(aluno istanceof PorraLoka){
  capitao
.say(”Tira essa farda preta!”);
  capitao
.say(”Voce nao eh cavera. voce eh MULEQUE!”);
 
}
 
if( aluno.isXerife() ) aluno.desiste();
}
} catch (PolicialCorruptoEncontrado pce){
} catch (PolicialFracoEncontrado pfe){
} catch (PolicialSemABandoleiraNessaAlturadoCampeonato e) {
}
}
}
 

SEUS FANFARRÕES!

VCS TEM 10 SEGUNDOS PARA COMPLETAR ESSE CÓDIGO!

- O zero-dois NÃO está escrevendo!

- SEU zero-dois, porque o senhor não escreveu nenhuma linha?

- A-a minha IDE não terminou de carregar, senhor…

- Agora a sua IDE ja carregou, seu zero-dois?

- S-sim senhor…

- Então, seu zero-dois, termine o seu programa, senão todos os seus colegas terão que usar o EDIT do MS-DOS até o fim do curso E A CULPA EH DO ZERO-DOIS!

HOMEM DE PRETO QUAL É A SUA MISSÃO?

É APRENDER JAVA SEM PRECISAR DE CERTIFICAÇÃO!

HOMEM DE PRETO O QUE É QUE VC FAZ?

FAÇO CODIGO FONTE QUE ASSUSTA O SATANÁS!

Estratégia, do inglês, Strategy…

- Senhor, o zero-cinco está dormindo…

 

Muito boa essa!!! uhahuahauhauhauha

 
 
October 05

Imagine Cup 2008

O que é imagine cup?

Imagine Cup é a competição mundial, promovida pela Microsoft que visa incentivar estudantes de tecnologia a aplicarem sua imaginação, criatividade e espírito inovador, em soluções que irão fazer a diferença no mundo. Nos últimos anos a Imagine Cup cresceu e se tornou realmente uma competição global que procura soluções para desafios do mundo real.

 

Tema de 2008

O tema da competição em 2008 é o meio ambiente.

Nosso planeta está sofrendo mudanças de todas as ordens diariamente. Devemos nos apressar então em desenvolver soluções para que tenhamos um equilíbrio e um meio ambiente sustentável.

Diariamente geleiras glaciais derretem, florestas são derrubadas, novos desertos se formam. Tudo isso sinaliza que devemos ter pressa na mudança do nosso estilo de vida e concepção de mundo.

Este ano a Microsoft está chamando os jovens estudantes para participarem da competição, com o intuito de desenvolver soluções que ajudem a prover um meio ambiente sustentável.

O slogan da competição esse ano é: “Imagine um mundo onde a tecnologia permita um meio ambiente sustentável.”

Segundo a Microsoft, o resultado da união do poder da tecnologia e o potencial de pessoas jovens, é ilimitado. As idéias que surgirão desse casamento, poderão ajudar milhões de pessoas no futuro.

Tudo isso ainda gira em torno de uma premiação em dinheiro para os 3 melhores colocados em cada categoria.

 

Categorias

Este ano temos 9 categorias:

 

  • Design de Software

Nessa categoria o objetivo é desenvolver um software que tenha ligação com o tema, usando os requisitos mínimos que são: Implementar e consumir um web service, usar o Microsoft .NET Framework 2.0 ou superior e usar o Visual Studio para desenvolver o projeto.

Essa categoria é em equipe e pode ser composta de 4 pessoas e mais um mentor, que pode ser um professor da faculdade. A premiação para o primeiro colocado é de 15 mil dólares.

 

  • Desenvolvimento Embarcado

Times de 2 a 4 participantes com direito a um mentor, vão construir protótipos de dispositivos. Premiação é de 15, 10 e 5 mil dólares para o primeiro segundo e terceiro colocados.

 

  • Desenvolvimento de Games

O objetivo dessa categoria é desenvolver um game 2D ou 3D, utilizando a plataforma XNA, com linguagem de programação C#. Esses jogos devem ser executados tanto em pc quanto em Xbox 360. O premio para a equipe que ficar em primeiro é de 25 mil dólares.

 

  • Projeto Hoshimi

O projeto Hoshimi é basicamente um jogo onde você controla um exercito de nano-robôs que tem que percorrer o corpo humano para cura-lo. O premio para o campeão dessa categoria é 8 mil dólares.

 

  • IT Challenge

Nessa categoria você terá que prover uma infra-estrutura segura e robusta com base em um problema. Durante a competição é indicado o material que pode servir como base de conhecimento para resolver os problemas propostos. A premiação para o campeão é de 8 mil dólares.

 

  • Algoritmo

Nessa categoria você terá que desenvolver complexos algoritimos para resolver questões propostas. A primeira fase é baseada num pequeno robô que tem que percorrer a arena passando por certos pontos. O objetivo é programar esse robô para cumprir essa tarefa gastando o mínimo de bytes. A segunda fase é baseada na solução de problemas utilizando C# ou VB . NET. O premio para o vencedor é de 8 mil dólares.

 

  • Fotografia

O concurso de fotografia visa sensibilizar o publico ao tema proposto na competição. O objetivo é tirar uma serie de fotos de forma que elas contem uma historia que sensibilize as pessoas para a causa em questão. Essa categoria é disputada em dupla e tem premiação de 8 mil dólares para o vencedor.

 

  • Filme (curta metragem)

Tem o mesmo objetivo da categoria de fotografia, porem aqui será um filme com menos de 25MB de tamanho e menos de 500 palavras em inglês. Nessa categoria os times são formados por 4 membros.

 

  • Design de Interface

Criatividade, idéias inovadoras e usabilidade, esses são os pilares dessa categoria. Em duplas com direito a um mentor, sua equipe deve criar uma interface de interação inovadora com o usuário para um aplicação. A premiação para o campeão é de 8 mil dólares.

 

Essa é uma competição muito importante, que infelizmente ainda tem pouca tradição no Brasil e principalmente na Bahia, mas vamos tentar reverter esse quadro. Apesar do Brasil já ter ficado entre os 3 melhores por mais de um ano ainda são poucos os trabalhos submetidos levando em conta a quantidade de estudantes de tecnologia que temos no pais.

A competição é uma grande oportunidade de ganhar projeção, sem falar na chance de ganhar dinheiro realmente.

Para participar é só se registrar em:  http://www.imaginecup.com

Se você decidir competir, nós iremos nos encontrar....

 
Agradeço a sua visita!
Please wait...
Sorry, the comment you entered is too long. Please shorten it.
You didn't enter anything. Please try again.
Sorry, we can't add your comment right now. Please try again later.
To add a comment, you need permission from your parent. Ask for permission
Your parent has turned off comments.
Sorry, we can't delete your comment right now. Please try again later.
You've exceeded the maximum number of comments that can be left in one day. Please try again in 24 hours.
Your account has had the ability to leave comments disabled because our systems indicate that you may be spamming other users. If you believe that your account has been disabled in error please contact Windows Live support.
Complete the security check below to finish leaving your comment.
The characters you type in the security check must match the characters in the picture or audio.