tadarank afiliados

30 novembro, 2006

Web 2 não é só uma palavra para Tim O'Reilly

Update 07/12/06 - Que legal, não tem ningúem lendo meu blog pra perceber o erro grotesco: troquei Tim O'Reilly por Tim Berners-Lee. Corrigido agora. Ah sim, a entrevista completa em português pode ser vista aqui.

Web 2.0 é a mudança para uma internet como plataforma, e um entendimento das regras para obter sucesso nesta nova plataforma. Entre outras, a regra mais importante é desenvolver aplicativos que aproveitem os efeitos de rede pra se tornarem melhores quanto mais são usados pelas pessoas.

By blog W2BR.
Mais aqui (em inglês).

Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

28 novembro, 2006

Tabelas: exibindo o cabeçalho em todas as páginas na impressão

Olá povo, hoje gostaria falar de mais uma tag excluida mas que é bastante útil: thead (e suas irmãs tfoot e tbody).

A tbody já é conhecida e bem usada devido a alguns bugs javascript quando não se usa ela. Ela indica onde estão os dados na tabela, bem simples. Agora neste post, veremos mais sobre as outras duas: thead e tfoot.

Um problema comum é quando agente tem uma pancada de dados a serem exibidos em uma página Web para serem impressos.
Na primeira página da impressão fica tudo beleza com cabeçalho bonitinho e talz, mas a segunda página faz agente perder os cabelos pois a dita cuja não está com cabeçalho de cada coluna indicando os dados!!!

Como resolver isso?
Simples, com as tags esquecidas: thead (cabeçalho da tabela em todas as páginas) e tfoot (rodapé da tabela em todas as páginas).

Vamos ver o que a W3C diz sobre as pobres:

Table rows may be grouped into a table head, table foot, and one or more table body sections, using the THEAD, TFOOT and TBODY elements, respectively. This division enables user agents to support scrolling of table bodies independently of the table head and foot. When long tables are printed, the table head and foot information may be repeated on each page that contains table data.
The table head and table foot should contain information about the table's columns. The table body should contain rows of table data.

Olha o exemplo:

<TABLE>
<THEAD>
<TR> ...header information...
</THEAD>
<TFOOT>
<TR> ...footer information...
</TFOOT>
<TBODY>
<TR> ...first row of block one data...
<TR> ...second row of block one data...
</TBODY>
<TBODY>
<TR> ...first row of block two data...
<TR> ...second row of block two data...
<TR> ...third row of block two data...
</TBODY>
</TABLE>

(Sim, a tfoot deve vir antes da tbody).

"Que beleza!!! Agora todas as páginas da impressão sairão com cabeçalho e rodape mico?" Siiimmm! Faça o teste. Gere uma tabela grande e depois vá em visualizar impressão.

Mais info sobre as danadas você encontra aqui e aqui.

Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

27 novembro, 2006

AJAX - botão voltar: A solução

Olá povo,

Hoje vim falar de um problema que atormenta o pessoal que usa ajax sem moderação (variação da utilização do ajax onde os desenvolvedores praticamente jogam fora a tag <a> - aqui outra ótima explicação do termo by JulioGreff): O maldito problema do botão voltar que não funciona com ajax.

Bom, como eu e o Julio já falamos, Ajax não foi feito pra reinventar o sistema de links, mâaas o pessoal que ainda insiste em usar o ajax dessa forma têm uma dúvida existencial: como é que o danado do Gmail faz pro tal botão "voltar" funfar?

Várias soluções já foram propostas: soluções complicadas, soluções gringas, soluções envolvendo server-side, soluções que funcionam só no IE, que só funcionam no FF, etc.

Porém agora, após uma longa briga travada por 3 paladinos do ajax (Bernardo Rufino, Julio Greff e Cau Guanabara), parece que finalmente está saindo uma solução definitiva: Solução simples para o Botão Voltar do Ajax, Cross Browser.

Texto da postagem do Bermonruf:

Começou tudo aqui, pelo menos para mim. Eu criei uma gambiarra feia e suja que só funcionava no Firefox, aí o JulioGreff criou uma (não gambiarra!) com a mesma lógica, só que beeeeeeeeemm mais simples e objetiva, porém ainda não funcionava no nosso amiguinho IE. Depois o Cau Guanabara criou uma solução baseada nesta página que apesar de bem objetiva tinha código pra caramba, o Júlio criou uma bem parecida e mais simples, e eu lá só vendo no que ia dar. Depois disso tudo, achei que ainda dava pra simplificar mais. Resolvi analisar a página que o Cau Guanabara passou, nem rolei a barra de rolagem e fui para , a solução dos utilizadores de Flash. Aí fiz uns desenhos, isso mesmo, não pra layout não, e consegui uma solução rápida, simples, não necessita linguagem server-side, e Cross Browser (Testada no Opera, IE e Firefox).

Este macaco aqui não participou da brincadeira hheeh.
Bom, chega. Já falei demais. Visita a página com a solução e a página com os códigos.
Lá na página com a solução tem a tabela de compatibilidade dos navegadores e o link para os screenshots.

Té. Adiós.

Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

26 novembro, 2006

Indicar o post do blog em bookmark social

Postado também no: fórum iEvolution.

Olá povo.

Nesta postagem ensinarei uma forma rápida de inserir botões/links de indicação da sua postagem em sites como Digg, del.icio.us, rec6 e TutoCle. (Assim como há no final dos meus posts)

Editado 27/11/06: A pedido nos comentá estou adicionando o LinkBlog e favorit0br (que nome!).

Após inovar colocando no Fórum iEvolution este sistema de indicação decidi escrever este post.

Sim, sei que nos sites dos caras eles devem ensinar a fazer isso, porém nos sites que eu pesquisei ví que só ensinam de forma genérica (para o site todo) e com aquelas imagenzinhas chatas. Não ensinam especificamente para usuários do blogger ou wordpress.

Bom, basicamente é só você fazer um link para a página de recepção dos links do site de bookmark passando como parâmetro a URL e o título que você quer. (obs.: O rec6 ainda não tem suporte para receber o título, mas eu já inclui na esperança de que eles corrijam a mancada futuramente Graças ao comentário do Anônimo descobri que o Rec6 usa 'titulo' ao invés de 'title' - editei os códigos).

Exemplo para o blogger:

Adicionar esta página no
<a href='http://tutocle.com/post?url=<$BlogItemPermalinkUrl$>&title=<$BlogItemTitle$>' target='_blank'>TutoCle,</a>
<a href='http://del.icio.us/post?v=4&partner=fb&url=<$BlogItemPermalinkUrl$>&title=<$BlogItemTitle$>' target='_blank'>Del.icio.us,</a>
<a href='http://digg.com/submit?phase=2&partner=fb&url=<$BlogItemPermalinkUrl$>&title=<$BlogItemTitle$>' target='_blank'>Digg,</a>
<a href='http://rec6.via6.com/link.php?url=<$BlogItemPermalinkUrl$>&titulo=<$BlogItemTitle$>' target='_blank'>Rec6,</a>
<a href='http://www.linkblog.com.br/novoPost.jsp?acao=voltar&link=<$BlogItemPermalinkUrl$>&titulo=<$BlogItemTitle$>' target='_blank'>LinkBlog,</a>
<a href='http://favorit.0br.com.br/bookmarks/?action=add&address=<$BlogItemPermalinkUrl$>&title=<$BlogItemTitle$>' target='_blank'>Favorit0br,</a>

Exemplo para o Wordpress:

Adicionar esta página no
<a href='http://tutocle.com/post?url=<?php the_permalink(); ?>&title=<?php the_title(); ?>' target='_blank'>TutoCle,</a>
<a href='http://del.icio.us/post?v=4&partner=fb&url=<?php the_permalink(); ?>&title=<?php the_title(); ?>' target='_blank'>Del.icio.us,</a>
<a href='http://digg.com/submit?phase=2&partner=fb&url=<?php the_permalink(); ?>&title=<?php the_title(); ?>' target='_blank'>Digg,</a>
<a href='http://rec6.via6.com/link.php?url=<?php the_permalink(); ?>&titulo=<?php the_title(); ?>' target='_blank'>Rec6,</a>
<a href='http://www.linkblog.com.br/novoPost.jsp?acao=voltar&link=<?php the_permalink(); ?>&titulo=<?php the_title(); ?>' target='_blank'>LinkBlog,</a>
<a href='http://favorit.0br.com.br/bookmarks/?action=add&address=<?php the_permalink(); ?>&title=<?php the_title(); ?>' target='_blank'>Favorit0br,</a>

//Pessoal do Wordpress, não tenho muita habilidade com o mesmo, por isso me corrijam aí nos comentários a respeito de qualquer erro cometido.

Prontim, espero ter ajudado. :)

Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

24 novembro, 2006

Bookmarks Sociais em fórum - Novidade

Mais uma inovação by iEvolution: indicação dos tópicos e tutoriais do fórum em bookmarks sociais como o Digg, Del.icio.us, TutoCle e Rec6.

Estes sites são como favoritos compartilhados, indicação de links, etc. Não sei uma forma de definir bem estes sites pra quem não tá por dentro da "Web 2" não hehhe.

Ainda bem que pessoas com melhor didática que eu já explicaram (aqui também, e aqui).

Dei uma pesquisada no Painel de administração do Invision (sistema gerenciador do fórum) e consegui inserir formas de indicação no Del.icio.us, no Digg, TutoCle, ou no Rec6.

Agora o visitante pode marcar determinado tópico ou tutorial do fórum e indicá-lo / guardá-lo em seu favoritos online: Digg, Del.icio.us, TutoCle e Rec6.
Ebaaaaaaa.

Imagem do recurso no Forum

Espero que a moda se espalhe.
(Você está de saco cheio destas minhas notícias? Calma povo, os tutoriais tão voltando heheh. É que fazer tutorial dá trabalho.) :)

Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

23 novembro, 2006

Entrevista com o Maujor, the king of CSS-br

Hoeeeeee!!!

Hoje venho postar sobre uma notícia forte mesmo: uma entrevista com Maujor, a lenda viva do cenário webstandard brazuca, lá no fórum iEvolution.

Tem curiosidade de saber da onde veio esse apelido de 'Maujor'? Como ele começou a mexer com HTML, CSS e Padrões Web? O que ele pensa sobre o futuro da Web? O que ele pensa a respeito dos blogs sobre padrões web brasileiros? Dicas para iniciantes e iniciados? O que ele pensa sobre a questão da validação? Entre outras diversas perguntas/informações (algumas que eu sempre tive curiosidade de saber).

Editado 23/11/06: Olha só que emoção.

Nós do fórum ficamos muito felizes ao conseguirmos a entrevista. Afinal, o cara até se considerou o padrinho pois foi o primeiro entrevistado.
Eu preparei algumas perguntas, outra colega fez outras, o Felipe me deu uma dica que eu já tinha perguntado, mas enfim: Acho que saiu uma ótima entrevista. Passem lá e confiram.

Acho que esta notícia merece ser espalhada (blogada, digg, delicious, etc), pois não é todo dia que temos uma lenda viva dando entrevista. heheh
Eu já deliciousei.

Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

20 novembro, 2006

Curso de programação Web Grátis

Sim, sim acredite: Um curso completo de programação de graça! Nada de propagandas, popups, lista de spam, cartão, identidade, etc. Nada disso, simplesmente gratuito.
Tal loucura só poderia vir do pessoal do fórum iEvolution.

Abordando desde o início com a Lógica de programação, até as linguagens mais usadas no ambiente web: PHP, ASP, Java, Java Script, VB.Net e ASP.Net.

Pra você que não entende essas viagens de operadores, loops, métodos, algorítmo, o curso inicial (lógica de programação) é sua oportunidade.

Mas espere, ainda não acabou! Se você entrar e for uma das primeiras 94645 pessoas a se inscrever, ainda ganha inteiramente grátis exemplos dos algorítimos nas linguagens mais usadas (PHP, ASP, Java, Java Script, VB.Net e ASP.Net). Aliás, este é o grande diferencial do curso iEvolution. Em vez de ficar só nos algoritmos, portugol, agente parte pra exemplos práticos.

Corra e se comprometa a participar. Vagas limitadas!
A primeira aula já começou.

(Outros cursos já estão engatilhados, fique atento)

Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

Menu em árvore, cascata, como queiram

Opa. Tamo de volta.


Hoje, menuzinho em árvore, cascata, tree, explorer, etc (vários nomes né?). Existem zilhões deste modelo de menus na net, mas acredito que o diferencial deste meu é a simplicidade (e acessibilidade com o javascript desativado). Nada de loucuras mirabolantes só no Javascript, nada de adicionar itens através de linhas em Javascript. Coisa simples, fácil de ser entendida, light.

  • Os ítens do menu, sub-ítens e links são feitos no velho HTML que todo mundo já conhece. Sem burocracia.

  • Depois agente estiliza o menu através do flexível CSS. Sem complicação. (se não entende nada de CSS, vá estudar um pouco antes de sair simplesmente me perguntando "mico, como muda a imagem?")

  • Por último, é só colocar um Javascript básico pra mudar a classe dos ítens entre "aberto" e "fechado". Simplex.

Editado dia 18/09/07 de acordo com solicitação do Gustavo nos comentários.

Editado dia 23/09/08 de acordo com solicitação do 'Curioso' nos comentários.

Olha o HTML básico do menu. É onde você terá que alterar, inserir seus links e textos. Não precisa nem mexer no restante do código se achar complicado (O Javascript e o CSS):

    <ul id="menuteste">
      <li><a href="#">itens 1</a>
        <ul>
          <li><a href="#">itens 1.1</a>
            <ul>
              <li><a href="#">itens 1.1.1 </a></li>
              <li><a href="">itens 1.1.2</a></li>
              <li><a href="">itens 1.1.3</a></li>
            </ul>
          </li>
          <li><a href="">itens 1.2</a></li>
          <li><a href="">itens 1.3</a></li>
          <li><a href="">itens 1.4</a></li>
        </ul>
      </li>
       <li><a href="#">itens 2</a>
         <ul>
           <li><a href="#">itens 2.1</a></li>
           <li><a href="">itens 2.2</a></li>
           <li><a href="">itens 2.3</a></li>
           <li><a href="">itens 2.4</a></li>
         </ul>
       </li>
    </ul>

O código completo tá abaixo. Testado no FF2.0, IE 6 e Opera 8.5 (quem puder testar em outros navegadores/versões coloca um comentário aí...).

Nos comentários do código há bastante explicação sobre o que cada parte faz. É bem fácil de entender e de implementar. É só alterar os ULs e LIs do HTML. Não precisa mexer no restante se não souber (Javascript e CSS).

<head>
<style>
/* fazendo a estilização visual via CSS */
 li { list-style: square }
 .aberto{ display:block; }
 .paiaberto{ list-style: circle; list-style-image: url(folderopen.gif);  }
 /* espaçamento pro IE */
 * html .paiaberto { padding-left: 5px; }

 .fechado{ display:none; border: 1px solid  gray }
 .paifechado{ list-style: disc; list-style-image: url(folderclosed.gif);  }
 /* espaçamento pro IE */
 * html .paifechado { padding-left: 7px;}
</style>
<script>
/* atalho para o getElementById */
function ge(q){ return document.getElementById(q)}

function Menu(evt,id) {  
/* função que muda a classe CSS dos elementos da lista
   de forma a abrir e fechar a árvore */
    if(typeof(evt)=='undefined')var evt=window.event

    //pegando o li pai do link
    var lipai = id.parentNode;
    //pegando o primeiro ul
    var ulfilho = id.parentNode.getElementsByTagName ("ul")[0];
    
    if(ulfilho.className.indexOf('aberto')<0 && ulfilho.className.indexOf('fechado')<0){
        //definindo um estado inicial caso nao haja
        ulfilho.className = ulfilho.className + " aberto";
    }
    if(lipai.className.indexOf('paiaberto')<0 && lipai.className.indexOf('paifechado')<0){
        //definindo um estado inicial caso nao haja
        lipai.className = lipai.className + " paiaberto";
    }
    //fazendo a troca
    if(ulfilho.className.indexOf('aberto')>-1){
      ulfilho.className = ulfilho.className.replace("aberto","fechado");
    }else{
      ulfilho.className = ulfilho.className.replace("fechado","aberto");
    }
    //mudando a imagem do li pai
    if(lipai.className.indexOf('paiaberto')>-1){
      lipai.className = lipai.className.replace("paiaberto","paifechado");
    }else{
      lipai.className = lipai.className.replace("paifechado","paiaberto");
    }
    if(typeof(evt.preventDefault)=='undefined'){
        evt.returnValue = false;
    }else{ evt.preventDefault() }

    return false;
}
function ativaMenus(ul_pai){
/* função que ativa os menus */
 if(ul_pai.constructor == String) ul_pai = ge(ul_pai)
 //ativando os cliques
 var links = ul_pai.getElementsByTagName("a");
 for (var i=0; i < links.length ; i++){
  //vendo se é link que está dentro de um li com filhos
  if(links[i].parentNode.getElementsByTagName("ul").length>0){
   links[i].onclick = function(ev){ Menu(ev,this) }
  }
 } 
 //fechando todos os li
    var lis = ul_pai.getElementsByTagName("li");
    for (var i=0; i < lis.length ; i++){ if(lis[i].getElementsByTagName("ul").length>0){
  lis[i].className += " paifechado";  //fechando todos inicialmente     
    }}
    //fechando todos os ul inicialment
    var uls = ul_pai.getElementsByTagName("ul");
    for (var i=0; i < uls.length ; i++){
        uls[i].className += " fechado";
    }
}
//abaixo eu chamo a função pra ativar os menus, passando como parametro o ID do ul que é pai dos menus.
window.onload = function() { ativaMenus('menuteste') }
</script>
</head>
<body>
    <ul id="menuteste">
      <li><a href="#">itens 1</a>
        <ul>
          <li><a href="#">itens 1.1</a>
            <ul>
              <li><a href="#">itens 1.1.1 </a></li>
              <li><a href="">itens 1.1.2</a></li>
              <li><a href="">itens 1.1.3</a></li>
            </ul>
          </li>
          <li><a href="">itens 1.2</a></li>
          <li><a href="">itens 1.3</a></li>
          <li><a href="">itens 1.4</a></li>
        </ul>
      </li>
       <li><a href="#">itens 2</a>
         <ul>
           <li><a href="#">itens 2.1</a></li>
           <li><a href="">itens 2.2</a></li>
           <li><a href="">itens 2.3</a></li>
           <li><a href="">itens 2.4</a></li>
         </ul>
       </li>
    </ul>
</body>

Outros menus css aqui. Bugs é só comentar :)

Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

13 novembro, 2006

A polêmica da validação

Olha eu dinovo (sim, "dInovo" mermo).

Agora vou falar sobre uma polêmica que assola o mundo dos nerds WebStandards brasileiros:

"A morte do foguinho?" - nãaao, "A chegada do Windows vista?" - nãaao, "A chegada do IE 7?" - ée.. bem, ainda não hehe.

Vou falar sobre a "Grande Polêmica sobre Validar ou Não Validar" - tchananananannnn (tambores ao fundo)
("seu mico burro, estava no seu título, pra quê esse suspense idiota?" - vocês perguntam)

Não vou postar links de outros blogs sobre o assunto não, pois isso já tá até parecendo vírus na rede. Usem esta busca no google.
Mesmo já tendo muitos posts sobre isto, eu tinha que falar pois discordo dos anti-validação.

É claro que todo ser vivente sabe que semântica é mais importante que validar no desenvolvimento tableless, mas isto não tira nem em um milímetro a importância da validação.

Fazendo analogias:

  • Validar significa que "ocê sabi iscrevê direitu oras. agente precisamos de umas ferramenta que óia nossa sintaquissi. Num é pusque eu sei fazê uma redassaum bunita e com istória boa que quer diser qui minha redassaum vai tirá déiz na Fuvesti. A tar da sintáquissi tambeim é óiada."
  • Validar indica que na hora de compilar seu programa, o compilador não encontrou nenhum erro de sintaxe. Mas isso não quer dizer que não existam erros de lógica (analogia aos programadores - erros de sintaxe seriam os de validação, e erros de lógica seriam os de semântica).

Validar irá facilitar o trabalho de ferramentas DOM. Eu que mexo com PHP, já passei por algumas situações onde era necessário usar a biblioteca DOM do PHP em alguns sites e não conseguia. Motivo? Erros de sintaxe na página que uma simples validação resolveria. O mesmo vale para ferramentas XML (que eu também já tentei usar sem sucesso em alguns sites).

Já quem reclama que é difícil fazer um CSS que deixe o site igual em todos os navegadores e sem utilizar hacks fora do padrão da W3C, tem que dar uma lida sobre hacks que validam e também sobre comentários condicionais.

Tem também a questão do tempo. Dizem que fazer um site validado demora mais tempo e é mais trabalhoso e talz. Ué, eu nunca tive problema com isso não. Acho que é só costume, prática e conhecimento. A velocidade de desenvolvimento é praticamente a mesma. Com o tempo você já não comete mais erros que sabe que não passarão no validador.

Mas pra fechar. A grande questão que eu não entendo mesmo é:

Por que raios estão colocando semântica e validação como inimigas??? Quem disse que se deve pesar as duas em uma balança??

Té a próxima povo (daqui a pouco. Hoje eu tô inspirado).

//PS.: Sim, meu blog não valida. Assumo que é por pura preguiça de ficar brigando com o blogger ao invés de ficar dizendo que validar não é importante. "Faça o que eu digo, não o que eu faço". :-)

Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

Decisão judicial sobre plágio na Internet

Olá povo.
Depois de alguns séculos sumidos, vamo ver se eu volto mais à ativa aqui no blog.

Tô postando algo que eu acho que deva ser divulgado aos 4 ventos (mesmo eu tendo descoberto isto através de uma origem altamente duvidosa hheheh - "sim, eu acompanho o cocadaboa").

"Mas, mico, por que divulgado aos 4 ventos?"
Porque é algo que muito interessa à grande parte dos visitantes deste blog: Direitos autorais na Internet.
(olha eu divulgando notícia do codadaboa. tsc tsc.)

Abaixo, parte de texto obtido no site www.juristas.com.br (espero que não me processem por postar um pequeno texto deles aqui )

"O IG (Internet Group do Brasil) foi condenado pela 47ª Vara Cível do Rio de Janeiro a indenizar em R$ 20 mil por danos morais Ulisses Raphael Costa Mattos Júnior. O site plagiou textos do autor, que escreve para o concorrente Cocadaboa. A decisão foi da juíza Andréa Gonçalves Duarte, que entendeu que, ainda que não tenha havido cópia integral dos textos, ocorreu a contrafração, ou seja, a modificação da obra com a intenção de se negar sua real autoria.

'As modificações dadas possuem, claramente, o intuito de disfarce dos textos. No entanto, se verifica que, naqueles veiculados pelo IG nenhuma alteração substancial foi feita. Não há demonstração de criatividade', afirmou a magistrada.

Andréa Gonçalves Duarte enfatizou que, nesse caso, o meio de informação (internet) não torna a obra anônima e nem retira do seu autor o direito sobre a mesma. 'A internet aqui funcionou somente como veículo e não gerou normatização jurídica inédita. O que a lei protege é a livre disposição da obra pelo autor, que tem o arbítrio de autorizar ou não sua reprodução', finalizou.

"

A notícia em sua íntegra está aqui: http://www.juristas.com.br/mod_noticia.asp?n=25564

Não entendo muito de leis, mas acho que: se você produz textos, piadinhas (o caso acima), códigos, poesias, tutoriais, ou qualquer outra coisa divulgada na rede, pode começar a se sentir mais seguro com relação aos seus direitos autorais.

Mais aqui: http://srv7.tj.rj.gov.br/publicador/exibirnoticia.do?acao=exibirnoticia&ultimasNoticias=1127
E no cocadaboa: http://www.cocadaboa.com/arquivos/009355.php

É isso aí pessoal. Vou atualizar a lista de links aqui do blog e já volto.
Ah, se algum cristão (ou não cristão) souber como arruma esses acentos no blogger grita ae.

Gostou da dica acima? Então clica nos botões de compartilhamento abaixo e me ajude a dica a subir no Google.

Resultado! Concursos