Programas do linux no windows

Dezembro 27th, 2008

Bom vou compartilhar com vocês alguns programas nativos do linux que foram compilados para serem executados no windows, e já de antemão vou dizendo que muitos desses programas são uma “mão na roda”.

A2Ps -> Formata arquivos para Postscript [download link]
Arc -> Cria e extrai arquivos .arc [download link]
Bzip2 -> Melhor compressor de arquivos [download link]
Enscript -> Converte textos para Postscript [download link]
FFMPEG -> Conversor de arquivos de midia (áudio e vídeo) mesmo usado pelo youtube. [download link]
FileUtils -> GNU utilidades para arquivos [download link]
Gzip -> Compressor de arquivos [download link]
Tar -> Agrupa arquivos num único arquivo [downlad link]
Wget -> Baixe arquivos http por este simples e eficiente programa [download link]

Outros programas podem ser vistos em: http://gnuwin32.sourceforge.net/packages.html

Para instalar os programas basta o NNF (next, next e finish)
Depois de instalados recomendo adicionar o diretório que foi instalado no path do windows.
Painel de controle->Propriedades do sistema->Avançado->Variáveis de ambiente->
em Variáveis do sistema na variável path adicionar ; (ponto e virgula que separa os valores) e o caminho até o diretório bin do gnuwin32. Ex.: C:\Arquivos de programas\GnuWin32\bin.

Assim todos os programas poderão ser executados no seu prompt em qualquer diretório que esteja.

Para ver como usa os programas basta dar no prompt o nome do programa –help.
Ex.: bzip2 –help vai te mostrar as opções e modo de uso do programa de compreensão de arquivos.

Abraços a todos.

Não se pode perder visitantes!

Dezembro 10th, 2008

É isso mesmo, está proibido perder visitas! (para que não conhece o jargão veja o vídeo )

Pensando nisso que desde 1999 a w3c vem desenvolvendo e consolidando técnicas de acessibilidade para usuários de internet com algum tipo de deficiência.

Para se ter idéia da quantidade de clientes que você pode estar perdendo, pode ser estimado em 14,5% o número de pessoas com algum tipo de deficiencia no Brasil e a nível mundial chega a 10%. (fonte: http://www.serpro.gov.br/acessibilidade/)

Assim como quem me lê hoje deve se interessar pelo assunto, ele está sendo discutido pela web por vários sites. Dentre eles me interessou bastante o http://www.bengalalegal.com/dicas.php que é mantido por um portador de deficiência visual.

Vídeo depoimento de usuários web, seriam eles também seus visitantes?


Para quem quiser ajudar a tornar a web um ambiente sem discriminação, este é mais um passo a ser tomado.

Abraços,

Teste Unitário - Cakephp

Setembro 4th, 2008

Com o concentimento do autor, estou publicando este artigo que é simplesmente uma aula de testes.

class  Aula{

Vou falar um “pouco” sobre o que eu sei, mas eu recomendo que todos procurem na internet e estudem, pois o assunto é interessante.

A primeira vantagem de se escrever teste é trivial. Ao invés de ficar fazendo testes manualmente, você escreve programas que testam automaticamente. Testes automatizados criam uma malha protetora, garantindo que seu código faça aquilo que você pensa que ele tem que fazer. Automatizar testes ajudam você testar aquela  aplicação de 5000 linhas em pequeno tempo de execução.

Bem, como esta técnica notoriamente é vantajosa, os desenvolvedores começaram a usa-la e uns malucos acharam TÃO boa que começaram a testar antes mesmo de escrever código. Dai nasce o TDD[1]. Você não pode testar manualmente alguma coisa que ainda não criou, mas pode programar algo que teste.

Como os programadores buscam sempre o DRY (dont repeat yourself), foram criados vários frameworks e ferramentas para melhorar a forma com que testamos, posso citar os xUnits, a cobertura de testes, gerenciadores de macros, fixtures, etc. São inúmeras ferramentas e, normalmente, cada linguagem possui um grande conjunto delas, portanto não vou me aprofundar nisto.

No CakePHP, o framework de teste utilizado é o SimpleTest[2]. A função de um framework de teste é prover o cenário ideal para se realizar testes. Quem mexe com experimentos sabe a importância de se ter um ambiente apropriado. Um exemplo desta preparação de ambientes são os fixtures. Para fazermos testes é importante sabermos o estado inicial de sua aplicação. Imagine testar a inserção de um comentário em um tópico, no momento de desenvolvimento do teste, você tinha certeza que o tópico existia, mas se no momento de execução do teste ele não existir? Seu teste irá falhar, mas não por que seu programa está corrompido, mas sim por que o estado inicial do teste não estava controlado.

Os principais métodos que usamos no framework são os métodos de Assert, no SimpleTest encontramos diversos[3], eles nos auxiliam a testar vários tipos de situações. É fazendo asserções que vocês irão testar seus códigos. Um exemplo de asserção é: Se eu passar o valor 5 para uma função de fatorial o resultado tem que ser 120. As asserções são feitas na tentativa de explorar seus códigos. Não é interessante fazer 10 asserções testando todos os valores entrado entre 5 e 15. Mas se eu testar alguns valores chaves, que realmente tragam significado, estarei realmente protegendo minha aplicação. No exemplo, alguns testes interessantes são valores negativos, 0 e 1.

Os testes são divididos em 3 grandes áreas (me desculpem se estou falando alguma merda): Unitário, Funcional e de Aceitação. Os de aceitação são aqueles que envolve testes que o seu cliente faria, testes que envolvem a interface, algo que pegue a aplicação inteira. Mesmo existindo ferramentas para estes testes, normalmente não se roda toda hora, eles podem ser custosos. Testes funcionais são aqueles que testam integrações entre objetos e métodos, é quando dois ou mais objetos devem trabalhar juntos. Já os testes unitários testam a lógica local de um objeto, de um método. Não tem muita diferença entre unitário e funcional, somente o conceito.

Bem, é este o conceito por trás dos testes, não sei mais o que eu posso falar. Para dar algo prático, vou tentar falar um pouco de como testar no CakePHP, mas não prometo muita coisa, não tem como falar de tudo.

A primeira coisa que vocês terão que fazer é colocar o SimpleTest na pasta Vendors (seja ela da aplicação ou do cake), assim vocês poderão rodar os testes. A título de experiência, visitem o link http://endereco_aplicacao/test.php . É nesta página que vocês irão executar os seus testes. O CakePHP deixa que você execute os testes do Core (coisa que acredito que não precisava, mas acho que eles deixaram para estimular o pessoal a contribuir com o desenvolvimento). Rodem algum teste (recomento o Views, pois não usa banco de dados). Vocês vão encontrar ou uma barra verde ou uma barra vermelha com os erros que ocorreram. Quando ocorre alguma exceção, algum warning, erro, o que seja, também aparecerá lá.

Agora que sabem como executar os testes, vamos fazer alguns testes. Primeiramente, como tudo no CakePHP, existe uma convenção de nomes de arquivos O padrão do Cake é XXXX.test.php. O XXXX pode ser qualquer coisa, mas é recomendável que seja o nome do arquivo que você quer testar (quando forem fazer cobertura de teste vocês entenderão). Utilizem as pastas predefinidas do CakePHP.

Eu vou utilizar um exemplo aqui sobre um Model de Tópicos, vocês utilizem o que for necessário para sua aplicação. Primeira coisa, vou criar um arquivo chamado topico.test.php na pasta /app/tests/cases/models. E, utilizarei a seguinte estrutura:

App::import(’Model’,'Topico’);
class TopicoTestCase extends CakeTestCase {

var $fixtures = array (’topico’);
}

Antes de mais nada, eu não utilizo o método que tinha no CookBook do Cake. Eu faço diferente e parece que outras pessoas[4] também não gostaram e já incluiram uma correção no Cake. Como não sei se esta correção está no RC2 ou só no SVN, vou explicar o que é necessário para fazer do meu modo. Peço desculpas, mas não vou explicar o por que disto, pois só iria complicar, mais explicações no [4].

Adicionem no app_model.php de sua aplicação a seguinte lógica:


function __construct(){

if(isset($_GET[’app’])){

 

$this->useDbConfig = ‘test’; // Ou nome do seu DataSource de teste (aquele que fica no arquivo database.php)

}
parent::__construct();

}

Agora voltando, o código inicial é simples, primeiro estamos incluindo a classe Topico para podermos instancia-la e testa-la. Criamos uma sub-classe de Case do CakeTestCase, assim teremos todo o ambiente necessário para podermos testar. E colocamos uma variável chamada fixtures. PARA! O que é fixtures?

Bem, lembram quando falei de ambiente de testes? de que tínhamos de ter controle do estado inicial de nossos testes? Quem garante isto são os Fixtures. O fixture vai, A CADA teste LIMPAR todo o banco e REPOPULAR com as ENTRADAS especificadas no arquivo de fixtures. Assim, você terá a certeza de que todo inicio de teste você tem um banco limpinho e bunitinho. No meu exemplo, o arquivo teria o nome topico_fixture.php e ficaria no /app/tests/fixtures/ :

class TopicoFixture extends CakeTestFixture {

var $name   = ‘Topico’;
var $fields = array(

 

‘id’ => array(
‘type’ => ‘integer’,
‘key’  => ‘primary’
),
‘titulo’ => array(

 

 

‘type’   => ’string’,
‘length’ => 200,

 

),
‘publicado’=> array(

 

 

‘type’   => ‘boolean’

 

)

);
var $records = array(

 

array(
‘id’=>1,
‘titulo’=>’Como escrever um e-mail gigantesco’,
‘publicado’=>true
),
array(
‘id’=>2,
‘titulo’=>’Como ler um texto antes de escrever?’,
‘publicado’=>false
)

);

}

Só para explicar, a variável $fields é a estrutura do banco (vocês podem utiliza o shell schema para gerar isto para vocês[5]) e o $records são os dados que ele irá incluir. (olhem o CookBook, tem mais coisa [6])

Agora é só fazermos os testes. Para fazermos nossos testes, vamos usar a convenção de nome de função do CakePHP. Iniciamos todas as funções que queremos que sejam executadas no Case com o seguinte formato testXXXXXX, cada função será um teste. Dentro desta função você usa os Asserts. No exemplo, vou testar uma funcionalidade do meu model que retorna o número de Topicos publicados.

function testNumeroPublicados(){

$modelo =& new Topico();
$esperado = 1;
$encontrado = $modelo->numeroPublicado();
$this->assertEqual($esperado,$encontrado);

}

Simples não? A lógica do método numeroPublicado() não importa, ele pode até mesmo não exitir, o que estamos fazendo aqui é o teste. Uma coisa importante de se lembrar é que temos liberdade de “estragar” o banco, pois os fixtures vão recompo-lo novamente no próximo teste, exemplo:

function testNumeroPublicados(){

$modelo =& new Topico();
$esperado = 1;
$encontrado = $modelo->numeroPublicado();
$this->assertEqual($esperado,$encontrado);
$modelo->publicarId(2);
$esperado = 2;
$encontrado = $modelo->numeroPublicado();
$this->assertEqual($esperado,$encontrado);
}

Entenderam? Agora é só melhorando os testes, forçando algumas situações, algo que possa dar problemas. Bem, escrever teste é como escrever código, vocês vão ter que melhorar, refatorar, pensar em novas lógicas, etc.

Bem pessoal, espero ter ajudado. Com mais calma eu vou melhorar o que escrevi aqui. Mas agora eu quero que vocês tentem em casa, no trabalho, façam perguntas e o mais importante: testem suas aplicações completamente.

Abraços.

[1]http://www.improveit.com.br/xp/praticas/tdd
[2]http://simpletest.org/
[3]http://simpletest.org/api/SimpleTest/UnitTester/UnitTestCase.html
[4]http://debuggable.com/posts/testing-models-in-cakephp—now-let%27s-get-rid-of-the-unnecessary-modeltest-classes-!:4890ed55-be28-4d4a-ba4c-7fd64834cda3
[5]Comando: php cake.php -app aplicacao schema generate // isto criará um arquivo schema.php no na pasta /aplicacao/config/sql/
[6]http://book.cakephp.org/view/358/Preparing-test-data

}

Autor: João José Carvalho Pedrini

O Livro de Mozilla

Agosto 13th, 2008

Digitando na url do firefox 3 “about:mozilla” (sem aspas) ele te mostra este versículo do livro de mozilla (sagrado), ele te mostra o seguinte texto, metáfora ao IE.

Mamon adormeceu.
E o renascimento da criatura disseminou-se pela terra e seus seguidores tornaram-se exércitos.
E eles apregoaram a mensagem e sacrificaram lavouras com fogo, com a astúcia das raposas.
E eles criaram um novo mundo à sua imagem e semelhança conforme prometido pelo
texto sagrado e
contaram da criatura para suas crianças.
Mamon despertou e, veja só, nada mais era do que um discípulo.

de O Livro de Mozilla, 11:9
(10ª edição)

CONAPHP - Congresso Nacional de PHP

Agosto 7th, 2008

A comunidade de PHP do Brasil se organizou mais uma vez este ano para promover mais um grande evento de PHP, desta vez com marca própria: CONAPHP - Congresso Nacional de PHP.

Durante os 2 dias do evento, serão apresentadas várias palestras pelos habituais nomes da cena de PHP do Brasil, mas este ano o evento contará com as presenças dos palestrantes internacionais: Andrei Zmievski (Smarty, PHP-GTK, PHP 6 Unicode) e César Rodas (PHP Programming Innovation Award, Google Summer of Code, WordPress).

O CONISLI é um evento muito popular de Software livre que sempre teve uma forte presença da comunidade de PHP desde 2005. Este ano a comunidade de PHP do Brasil se empenhou para organizar um evento de PHP que será um embrião de um tão desejado futuro evento organizado de forma independente, ou seja, organizado apenas por membros da comunidade de PHP.

CONAPHP - Congresso Nacional de PHP é a proposta inicial para uma nova marca que destinguirá eventos de PHP organizados exclusivamente por membros da comunidade de outros organizados por outras entidades.

À semelhança do que acontece noutros países, os maiores eventos de PHP são organizados por membros da comunidade. O CONAPHP não será diferente.

O tamanho da comunidade de PHP no mundo está estimado em 4,5 milhões de profissionais que trabalham no desenvolvimento e manutenção de mais de 20 milhões de sites. A comunidade de PHP no Brasil tem cerca de 5% do total global, portanto são mais de 200.000 profissionais de PHP brasileiros.

Como demonstração da sua força, a comunidade de PHP do Brasil está trazendo para este evento 2 palestrantes internacionais, para além de vários outros nomes conhecidos no Brasil.

Andrei Zmievski é um reputado desenvolvedor no núcleo de PHP. Ele é mais conhecido por ter sido o criador do sistema de templates Smarty e pela extensão de criação de aplicações desktop PHP-GTK.

Este ano ele vem falar o PHP 6, nomeadamente da maior mudança da qual ele foi o principal arquiteto: suporte nativo a Unicode. Este recurso vai facilitar muito o desenvolvimento de aplicações internacionalizadas em que o texto usa alfabetos distintos dos usados na Europa e Américas, como por exemplo os usados nos paises da Ásia, Leste Europeu, tais como Rússia, China, Japão, Coreia, etc..

César Rodas é o outro palestrante internacional convidado. Apesar de ser ainda um jovem universitário que estuda no Paraguai, César já participou em atividades dignas de grande destaque, como o fato de ter sido o vencedor do PHP Programming Innovation Award de 2007 organizado pelo site PHPClasses.org.

Neste evento Cesar virá falar sobre o seu mais recente trabalho de destaque incluido na iniciativa Google Summer of Code (GSOC). Trata-se do desenvolvimento de recursos avançados para o popular sistema de blogs WordPress que permitem lidar com arquivos de conteúdo de grande porte em sistemas mais apropriados para esse efeito, como o YouTube, Amazon S3, Google Picasa, etc..

Tudo aponta para que este seja mais um evento concorrido com grande participação de profissionais de PHP de todo Brasil. Se trabalha com PHP, não deixe de participar neste evento imperdível.

A chamada para trabalhos do CONISLI já começou. As pessoas interessadas em dar palestras no evento sobre PHP ou outros temas devem submeter as suas propostas no site do evento.

Maiores informações em:

http://www.conaphp.com.br

Como matar o dragão

Julho 24th, 2008

Java

Chega, encontra o dragão. Desenvolve um framework para aniquilamento
de dragões em múltiplas camadas.
Escreve vários artigos sobre o framework, mas não mata o dragão.

.NET
Chega, olha a idéia do Javanês e a copia, tenta matar o dragão, mas é
comido pelo réptil.

ASP
Os componentes necessários para levantar a espada são proprietários e
caros. Outros tantos componentes proprietários para achar a
localização do dragão, e mais outros tantos a localização da
princesa. Chama então seu amigo programador de PHP.

C
Chega, olha para o dragão com olhar de desprezo, puxa seu canivete,
degola o dragão. Encontra a princesa, mas a ignora para ver os
últimos checkins no cvs do kernel do linux.

C++
Cria um canivete básico e vai juntando funcionalidades até ter uma
espada complexa que apenas ele consegue entender … Mata o dragão,
mas trava no meio da ponte por causa dos memory leaks.

COBOL
Chega, olha o dragão, pensa que tá velho demais para conseguir matar
um bicho daquele tamanho e pegar a princesa e, então, vai embora de
volta ao seu
mundinho.

Pascal
Se prepara durante 10 anos para criar um sistema de aniquilamento de
dragão… Chegando lá descobre que o programa só aceita lagartixas
como entrada.

VB
Monta uma arma de destruição de dragões a partir de vários
componentes, parte pro pau pra cima do dragão e, na hora H, descobre
que a espada só funciona
durante noites chuvosas…

PL/SQL
Coleta dados de outros matadores de dragão, cria tabelas com N
relacionamentos de complexidade ternária, dados em 3 dimensões, OLAP,
demora 15 anos para processar a informação. Enquanto isso a princesa
virou lésbica.

PHP
Pesquisa bancos de scripts e acha as classes de construção de espada,
manuseio da espada, localização da princesa e dragão. Remenda tudo e
coloca umas firúlas próprias.
Mata o dragão e casa com a princesa. Como tudo foi feito com
gambiarras, o dragão um dia vai ressuscitar e comer os dois.

Ruby
Chega com uma p*t* fama, falando que é o melhor faz tudo, quando vai
enfrentar o dragão mostra um videozinho dele matando um dragão … O
dragão come ele de tédio.

Smalltalk
Chega, analisa o dragão e a princesa, vira as costas e vai embora,
pois eles são muito inferiores.

ASSEMBLY
Acha que está fazendo o mais certo e enxuto, porém troca um A por um
D, mata a princesa e transa com o dragão.

Shell
Cria uma arma poderosa para matar os dragões, mas na hora H, não se
lembra como usá-la.

Shell (2)
O cara chega no dragão com um script de 2 linhas que mata, corta,
stripa, pica em pedacinhos e empalha o bicho, mas na hora que ele
roda, o script aumenta,
engorda, enfurece e coloca álcool no fogo do dragão.

Fortran
Chega, desenvolve uma solução com 45000 linhas de código, mata o
dragão e vai ao encontro da princesa …
mas esta o chama de tiuzinho e sai correndo atrás do programador java
que era elegante e ficou rico.

FOX PRO
Desenvolve um sistema para matar o dragão, por fora é bonitinho e
funciona, mas por dentro está tudo remendado. Quando ele vai executar
o aniquilador de
dragões lembra que esqueceu de indexar os DBF’s.

CLIPPER
Monta uma rotina que carrega um array de codeblocks para insultar o
dragão, cantar a princesa, carregar a espada para memória, moer o
dragão, limpar a sujeira, lascar leite condensado com morangos na
princesa gostosa, transar com a princesa, tomar banho, ligar o carro,
colocar gasolina e voltar pra casa. Na hora de rodar recebe um “Bound
Error: Array Access” e o dragão come ele com farinha.

ANALISTA DE PROCESSOS
Chega ao dragão com duas toneladas de documentação desenvolvida sobre
o processo de se matar um dragão genérico, desenvolve um fluxograma
super complexo para libertar a princesa e se casar com ela, convence
o dragão que aquilo vai ser bom pra ele e que não será doloroso. Ao
executar o processo ele estima o esforço (usando FPAs) e o tamanho do
estrago que isso vai causar, consegue o aval do papa, do Buda e do
Raul Seixas para o plano, e então compra 2 bombas nucleares, 45
canhões, 1 porta aviões, contrata 300 homens armados até os dentes,
quando na verdade necessitaria apenas da espada que estava na sua mão
o tempo todo.

Por dentro do interminas

Maio 17th, 2008

Neste sábado 17 de abril de 2008, rolou aqui em Minas Gerais um evento de repercusão nacional, o InterMinas2008, evento realizado pelo portal Imasters.

Durante todo o evento houveram pessoas escrevendo suas mensagens de dúvidas, reclamações, papos furados, e rs por todo o twitte. O evento foi muito bem realizado, palestras interessantes e agora que vos escrevo com um fechamento fantastico com Luli Radfahrer.

Entre várias gargalhadas e trocas de conhecimentos este foi um encontro que ficará para a história de Belo Horizonte.

Aguardamos mais eventos como estes aqui em minas, vamos ver o que nos espera no Encontro da Locaweb.

1 de abril

Março 31st, 2008

@pinoquio

O famoso 1º de abril, com todas as suas brincadeiras mentirosas, tem gente que que está querendo brincar neste dia. Bom no twitter <www.twitter.com> foi criado um usuário chamado @pinoquio que está adicionando muitas pessoas e espalhando um grande suspense por toda a twittosfera.

Em seu perfil ele promete fazer alguma ação amanhã dia 1º de abril. No blog do twitterbrasil <www.twitterbrasil.org> tiveram uma entrevista com o narigudo que prometeu dar um presente para a maior mentira contada a ele no dia 1º de abril, no entanto o site mantém sigilo sobre o fanfarrão.

Bom uma verdade eu vou falar, um presentinho neste preço (0800) não vai fazer mal algum, mesmo tendo que contar uma mentirinha, afinal de contas no dia 1º de abril pode.

Legal a brincadeira, agora vamos esperar pra ver no que vai dar.

Matrix

Março 26th, 2008

Segundo o filme matrix a história era para ser realizada no ano de 2200, mas a tecnologia avança tão rápido que hoje isto já acontece, não com a mesma enfase que prende a atenção do espectador, mas ainda assim o virtual está mudando a forma de vida dos seres humanos.

A confusão:

Um dos principais motivos que me fez pensar nesta questão foi o acreditar ou não nas coisas que são expostas na internet? Muitos acreditam em mentiras e duvidam da verdade, esta confusão é causada por uso impensado ou por brincadeiras não explicadas sobre conteúdos publicados na grande rede. Um dos milhares de exemplos disso foram fotos do incidente de 11 de setembro de 2001, que pessoas sem conciencia do que poderiam estar fazendo publicavam fotos montagens sobre o ataque.

As maquiagens sempre foram um aliado das mulheres que posavam para fotografias, mas hoje isto talvez seja coisa do passado, pois com recursos tecnológicos qualquer imagem pode ser melhorada ao gosto do cliente. Este é outro motivo pelo qual se duvida de muita coisa que “pode” ser real, mas por ser tão perfeito torna-se irreal. A maior idéia que se pode ter é que tudo que é perfeito é virtual/digital o que tem imperfeções é real.

Agora é criado uma crise existêncial, sou real ou virtual. Com todas as minhas perfeições fica dificil dizer que sou real, mas podem acreditar não sou um ser virtual, apenas contribuo para a criação deste mundo, jovem e dominante.

Abraços,

Interminas2008

Março 26th, 2008

Interminas 2008

Bom é com muito prazer que venho escrever este texto convidando todos para comparecerem no interminas2008, este evento tende a ser uma experiência única no mercado mineiro de internet, pois em São Paulo acontece anualmente o intercon que é o maior evento de internet doBrasil.

A vantagem para nós mineiros do interminas é que será realizado em nossa capital (menor custo com deslocamento) e o ingresso está com um valor muito abaixo de qualquer evento do nível, o custo benefício é muito grande.

Nesta primeira edição terá apresentações sobre o futuro do mercado mineiro na internet, grandes nomes como Carlos Merigo (#9), Luli Radfahrer, Fábio Seixas (camiseteria), Saulo Medeiros (5clicks) entre outros, estarão presentes neste encontro que reune informações, conhecimentos e experiências em diversas áreas neste setor tão promissor.

Aguardo a presença de todos os nerds (podem ser CDFs também) neste grande evento.

Abraços,


    Sobre o autor

    Opa! E ai turma, vou me aprensentar. Me chamo Michael Mafort, nasci em 1987, resido em Belo Horizonte (Terra do Uai). Atualmente sou sócio e diretor de tecnologia da Criasol - Desenvolvimento Web. Mas é isso ai, espero que gostem e entrem sempre no meu blog.
    Abraços.

    Links recomendados
    Contato rápido

     

    1.  (Obrigatório)
    2.  (Requerido e-mail válido)

    cforms contact form by delicious:days