tadarank afiliados

29 dezembro, 2006

Caixa Econômica Federal corrige i-Banking

Lembram-se da minha reclamação de que a Caixa Econômica Federal queria, de certa forma, que eu gastasse R$500,00 em licença do Windows para que eu pudesse usar o Internet Banking dela?

Então, graças a diós (não sei se foram graças às minhas reclamações), ela resolveu a questão.

Agora, ela identifica o navegador do usuário e, só solicita a instalação do tal plugin se ver que o cara já está usando o Internet Explorer.

Como eu tinha reclamado antes, achei justo fazer este novo post informando que eles resolveram o problema.

Bom para nós usuários.
Espero que algúem tenha levado um CR lá no depto. de tecnologia da Caixa. :-)

//Ah, terminei meu TCC sobre WebStandards. Já publiquei a apresentação e estou esperando o ano novo pra publicar o texto em PDF aqui pra vocês.

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

21 dezembro, 2006

Rec6 - Botão de número de votos já mandando o título

Opa.

Sei que estou falando demais nesse Rec6 mas, olhando minha postagem anterior, ví que dava pra fazer um upgrade que ia auxiliar a toda comunidade que tem o botão de número de votos do Rec6 no seu site.

Bom, no capítulo anterior (heheh postagem anterior), vimos que não precisamos ficar presos ao layout oferecido pelo script do Rec6 e aprendemos também a guardar em uma variável JavaScript a quantidade de votos de qualquer link no Rec6.

Mas, ví que, ao clicar no link do botão oferecido pelo script, só vai a URL da página para a indicação, não vai o título automaticamente. O que dá trabalho a nosso visitante que indica o post (ou a nós mesmos quando somos nós que indicamos). Temos que escrever toooodo o título (ou usar a técnica milenar do Ctrl+C Ctrl+V).

Chega de blablablá, o truque consiste apenas em alterar o href dos 2 links presentes no botão, via JavaScript. Simples não? Por que o mico não pensou nisso antes? Mico burro.

O script deles gera um botão sem o parâmetro 'titulo', nosso script adiciona ao link do botão o atributo 'titulo'. É claro que pra fazer isto cada botão precisa estar dentro de algo (div) que tenha um nome único (ID). Mão na massa:

<div class="cod_syxt" id="cod_syxt_js">
 <script language="JavaScript" src="http://rec6.via6.com/link.php?action=widget&url=http://sua_url" type="text/javascript"></script>
</div>
<script>
 links_rec6 = document.getElementById("cod_syxt_js").getElementsByTagName("a");
 ptos = links_rec6[0].innerHTML;
 links_rec6[0].href = links_rec6[0].href + "&titulo=" + "Seu Titulo";
 links_rec6[1].href = links_rec6[1].href + "&titulo=" + "Seu Titulo";
</script>

Se você tiver mais de um botão na mesma página, tem que usar alguma coisa pra dar um nome diferente pra cada div pai dos botões. Eu usei os IDs das postagens. Veja abaixo.

Pro pessoal do Blogger:

<div class="cod_syxt_css" id="cod_syxt_js_<$BlogItemNumber$>">
 <script language="JavaScript" src="http://rec6.via6.com/link.php?action=widget&url=<$BlogItemPermalinkUrl$>" type="text/javascript"></script>
</div>
<script>
 links_rec6 = document.getElementById("cod_syxt_js_<$BlogItemNumber$>").getElementsByTagName("a");
 ptos = links_rec6[0].innerHTML;
 links_rec6[0].href = links_rec6[0].href + "&titulo=" + "<$BlogItemTitle$>";
 links_rec6[1].href = links_rec6[1].href + "&titulo=" + "<$BlogItemTitle$>";
</script>

Não sei muito de WordPress mas arrisquei aqui:

<div class="cod_syxt_css" id="cod_syxt_js_<?php the_ID(); ?>">
 <script language="JavaScript" src="http://rec6.via6.com/link.php?action=widget&url=<?php the_permalink(); ?>" type="text/javascript"></script>
</div>
<script>
 links_rec6 = document.getElementById("cod_syxt_js_<?php the_ID(); ?>").getElementsByTagName("a");
 ptos = links_rec6[0].innerHTML;
 links_rec6[0].href = links_rec6[0].href + "&titulo=" + "<?php the_title(); ?>";
 links_rec6[1].href = links_rec6[1].href + "&titulo=" + "<?php the_title(); ?>";
</script>

Veja esse negócio funcionando ao passar o mouse sobre o botão que tem aqui no meu blog (aproveita e clica heheh). Veja na barra de status que, além do parâmetro 'url', agora também temos o parâmetro 'titulo'.

Bugs? Grita nos comentários ae. Té. (Agora acho que já acabaram minhas postagens sobre Rec6).

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

Codigo

A essência: www.codigo.com

Muito profundo isso. Profundo e recursivo. heheheaheh
//O menor post da história do 'El Micox'.

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

19 dezembro, 2006

Rec6 - Pegando o número de votos de qualquer postagem

Opa pessoal,

Lembram-se da minha reclamação do botão do Rec6 com código feio?

Pois é. O tópico ficou 1 dia e meio em primeiro lugar no Rec6, mandei mensagem para os caras do syxt, mas nada de alguém mostrar alguma solução (como escolha de skins para o botão, ou uma página para recuperar o valor diretamente, ou pelo menos, um código menos feio). Daí, nós mortais, temos que nos virar pra resolver a questã. hehehee

Implantei a solução no meu blog, quase que eu esqueço de falar pra vocês aqui comé que foi, mas lembrei: pegando o número de votos do seu post de qualquer post no Rec6 via JavaScript.

Bora ao trabalho.

Bom, primeiramente identei este belo código gerado pelo script do Rec6:

<div style="font-family: Trebuchet MS, Tahoma, Verdana, Arial; background-image:url(http://rec6.via6.com/imagens/pontos_bg.gif); background-repeat:no-repeat; text-align:center;width:57px;height:80px;padding:3px 2px 3px 2px; line-height:normal;" valign="top"> <div style="color: #ffc317; font-size: 21px; margin: 0; padding: 0"> <a href="http://rec6.via6.com/link.php?nv=1&url=http://elmicox.blogspot.com" style="text-decoration:none; color: #ffc317;font-size: 21px; "> 0 </a> </div> <div style="color: #ffc317; font-size: 12px; margin: 0; padding: 0"> Pontos </div> <div style="margin: 10px 0px 0px 0px; color: #A5A5A5;"> <a href="http://rec6.via6.com/link.php?url=http://elmicox.blogspot.com"> <img src="http://rec6.via6.com/imagens/botao_subir.gif" border="0" /> </a> </div> </div>

Fica melhor assim né?

<div style="font-family: Trebuchet MS, Tahoma, Verdana, Arial;
  background-image:url(http://rec6.via6.com/imagens/pontos_bg.gif); background-repeat:no-repeat;
  text-align:center;width:57px;height:80px;padding:3px 2px 3px 2px; line-height:normal;" valign="top">
  <div style="color: #ffc317; font-size: 21px; margin: 0; padding: 0">
    <a href="http://rec6.via6.com/link.php?nv=1&url=http://elmicox.blogspot.com"
      style="text-decoration:none; color: #ffc317;font-size: 21px; ">
      0
    </a>
  </div>
  <div style="color: #ffc317; font-size: 12px; margin: 0; padding: 0">
    Pontos
  </div>
  <div style="margin: 10px 0px 0px 0px; color: #A5A5A5;">
    <a href="http://rec6.via6.com/link.php?url=http://elmicox.blogspot.com">
      <img src="http://www.syxt.com.br/rec6/imagens/botao_subir.gif" border="0" />
    </a>
  </div>
</div>

Agora já fica fácil perceber que pra pegar o número de votos via JavaScript é só pegar o innerHTML da primeira tag A.
Pero antes, agente tem que colocar uma div ao redor do script, para nomeá-la e ser possível chegar ao código gerado do script do Rec6.

Ficará assim:

  <div id="cod_syxt">
    <script language="JavaScript" src="http://rec6.via6.com/link.php?action=widget&url=<$BlogItemPermalinkUrl$>" type="text/javascript"></script>
  </div>
  <!-- pegando a quantidade de pontos no Rec6 e jogando na var ptos -->
  <script>ptos = document.getElementById("cod_syxt").getElementsByTagName("a")[0].innerHTML;</script>

Veja que eu coloquei uma div ao redor do script (chamada cod_syxt). Daí todo código javascript gerado pelo Rec6 ficará aí dentro. Depois é só buscar o primeiro elemento A e guardar na variável chamada "ptos".

Como usar a variável "ptos"? Ué, do jeito que você quiser.
Por exemplo, assim:

<p>Olá, tenho <script>document.write(ptos)</script> pontos no Rec6. <a href="link_do_rec6">Clique aqui</a> para aumentar meus pontos</p>

Beleza né? Sem mexer com PHP ou com plugin (é claro que existem ótimos plugins para o Wordpress do Rec6 se quiser usar).

Se ainda quiser, também pode mexer ou ocultar o código gerado do Rec6 via CSS.
Por exemplo:

#cod_syxt { display: none; /* oculta o botão do rec6, mas a variável ptos continua valendo */}

Ou

#cod_syxt { width: 63px; margin: 4px 10px; float: left; /* coloca o botão à esquerda do texto */}

(Perceba que se pode pegar a quantidade de votos de qualquer link, é só mudar o link.)

Se procura dicas sobre como inserir o código do Rec6 no wordpress ou blogger, veja este post.

Dúvidas, erros ou comentários posta ae :)

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

18 dezembro, 2006

Novo i-banking da Caixa Economica Federal só funciona no IE

Olha só que legal.

Lá estava o mico tentando acessar seu internet banking da Caixa Economica Federal como faz toda semana.

Daí eu vejo que agora eles estão pedindo um novo cadastro no i-banking. Já estranhei de cara, pois já fiz este cadastro a um tempo atrás. Mas vamos lá, vamos fazer novamente. O pior ainda estava por vir.

De repente me jogam em uma maldita tela chamada "Instalando o Módulo de Segurança". Lá vem bomba: é um controle ActiveX que você deve instalar no seu computador para "supostamente" deixar sua conexão mais segura. Que legal né?

Eu, que uso Firefox ficarei sem acesso ao internet banking da caixa. Quem usa outro navegador que não seja o IE, também ficará sem acesso. Quem usa outro Sistema Operacional que não seja o Windows também.

Será que os competentes do departamento de TI deles vivem em um casulo? Nã lêem notícias? Não sabem que o IE só está perdendo mercado? Será que estes caras não lêem jornal, não se atualizam, não acessam sites de TI?? Será que os caras não vêem isto???

Já liguei lá reclamando geral. Me prometeram corrigir até o final da semana. Vamos ver.

Editado 29-12-06: problema corrigido. Vivaa!!

Mais problemas com bancos no post do jader: Acessibilidade e Usabilidade na web: um caso (realmente) sério

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

16 dezembro, 2006

Supersalários - A palhaçada brasileira

Pessoal, fugindo um pouco do assunto do blog, mas gostaríamos que todos déssemos atenção à palhaçada que tá rolando lá em Brasília.

Começou com o Rafael Dohms: Indignação! (Atenção! cunho político)
O Leandro também: Os Geeks ficarão parados quanto a política brasileira?
E agora o Mico.

Vamos aumentar as manifestações nos blogs ae. Espero que não fiquemos apenas nestes blogs técnicos.
Quem souber de outros links pode falar que eu postarei aqui.

Não podemos esquecer que, além deste supersalário nominal, eles ainda recebem: auxílio transporte, auxílio moradia, auxílio gabinete e outros “auxílios” por aí.

Cadê os caras pintadas? Cadê os líderes de grupos estudantis (que hoje parece que só estão preocupados em vender carteirinha em sua maioria)? Cadê os movimentos das donas de casa? Cadê os sindicatos?? E nós? o que vamos fazer?

<Editado em 18/12/06 >
Mais alguns links para protesto virtual interessantes descobertos graças à postagem no ótimo blog SemJanelas.net:

</Editado>

Lista de email de alguns "representantes do povo", postada no tópico do Rafael:

dep.aldorebelo@camara.gov.br; renan.calheiros@senador.gov.br; dep.cironogueira@camara.gov.br ; dep.jorgealberto@camara.gov.br; dep.lucianocastro@camara.gov.br ; dep.josemuciomonteiro@camara.gov.br; dep.wilsonsantiago@camara.gov.br; dep.miroteixeira@camara.gov.br; dep.sandrarosado@camara.gov.br; colbertmartins@camara.gov.br; dep.bismarckmaia@camara.gov.br; dep.rodrigomaia@camara.gov.br; dep.josecarlosaleluia@camara.gov.br; dep.sandromabel@camara.gov.br; dep.givaldocarimbao@camara.gov.br; dep.arlindochinaglia@camara.gov.br; dep.inacioarruda@camara.gov.br; dep.carloswillian@camara.gov.br; dep.marioheringer@camara.gov.br; dep.inocenciooliveira@camara.gov.br; demostenes.torres@senador.gov.br; efraim.morais@senador.gov.br; tiao.viana@senador.gov.br; neysuassun@senador.gov.br; dep.beneditodelira@camara.gov.br; ideli.salvatti@senadora.gov.br

Bloguem pessoal, bloguem e comentem, bloguem, comentem e avisem quem puderem. Abaixo a palhaçada.

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

Include em JavaScript

Olá povo.

Uma coisa de JavaScript um pouco incomum, que aparentemente ninguém possa ter precisado, mas que deve fazer muita falta para programadores que vêm de outras linguagens: um include em JavaScript.

"Bah, que isso mico, é só eu escrever a tag script e dizer o arquivo que quero chamar no head do HTML".

Sim, malandro, mas se você tiver vários arquivos javascript e não quiser incluir todos de uma vez?
Se você precisar incluir algum só se alguma determinada condição for feita?

Por exemplo

if(sou_bonito==true)  {
 include("chama_mulher.js");
} else if(tenho_grana==true) {
 include("chama_mais_mulher.js");
}else if(sou_inteligente==true){
 include("vai_trabalhar_vagabundo.js");
}

"Perae macaco doido. Comé que você vai fazer isso com JavaScript?"

Elementer meu caro leitor:

function include(arquivo){
//By Fabrício Magri e Micox
//http://elmicox.blogspot.com/2006/12/include-em-javascript.html
 var novo = document.createElement('script');
 novo.setAttribute('type', 'text/javascript');
 novo.setAttribute('src', arquivo);
 document.getElementsByTagName('head')[0].appendChild(novo);
 //apos a linha acima o navegador inicia o carregamento do arquivo
 //portanto aguarde um pouco até o navegador baixá-lo. :)
}

Infelizmente, pra variar, o meu Opera 8.5 não gostou deste script. Mas é a vida... No IE 6.0 e no FF 2.0 deu tudo beleza.
Graças ao comentário de um anônimo Fabrício Magri o script funfou no Opera 8.5 (vejam os comentários), muito obrigado :). Agora funciona corretamente no FF, IE e OP.

Bugs, dúvidas, sugestões é só comentar aí. Comenta pra eu escrever mais.

Amanhã tem mais postagem. Agora tô com pressa. Até lá.

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

13 dezembro, 2006

Entrevista Marlos Carmo, referência em Flash

Opa.

Saiu agora a pouco no iEvolution, mais uma entrevista interessante.

Após a nossa entrevista inicial com o Maujor, agora é a vez dos flasheiros ficarem sabendo um pouco mais sobre o Marlos Carmo.

Marlos Carmo, trabalha com internet desde 97 e é um profissional que foca seu trabalho em soluções interativas para internet, utilizando o Flash.

Ex-manager do Macromedia User Group Minas Gerais (MUGMG), palestrante em assuntos relacionados a produtos Macromedia / Adobe, certificado em Flash MX 2004 Developer, Marlos tem experiência nas principais tecnologias de mercado, principalmente envolvendo o conceito RIA (Rich Internet Application), como Flash, Flash Remoting, Flash Media Server, Flex, ColdFusion, PHP, ASP.Net, entre outras.

Dedicou-se a escrever sobre produtos Macromedia. Produzindo artigos sobre os mesmos em vários sites da área, como Imasters, WMOnline, entre outros.

Passou por algumas empresas, acumulado experiência em várias áreas, como Cadsoft, empresa com foco em softwares acadêmicos, B8 – Soluções Digitais e Weblife – Studio Web como Programador Flash, com foco principalmente em desenvolvimento de aplicações utilizando o flash e soluções em e-learning.

Atualmente é sócio-diretor da agência 5Clicks (www.5clicks.com.br), em Belo Horizonte. A empresa é especializada em desenvolvimento de soluções interativas para internet, utilizando em sua maioria o Flash como plataforma.

Texto do inicio da entrevista.

Passa lá. Se tiver gostado da entrevista, aproveita e vota nela lá no rec6 (botão pra votar tá aí abaixo também se quiser aproveitar o embalo).

Pontos

Té mais.

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

Rec6 - Código de número de pontos é horrível

Olá povo.

Lá estava eu tentando inserir aquele código do Rec6 para exibir o número de votos de determinada notícia em meu blog.

<script language="JavaScript"
src="http://www.syxt.com.br/rec6/link.php?action=widget&url=http://elmicox.blogspot.com" 
type="text/javascript"></script>

Bom, de primeira já achei que o botão não ficaria bem com o visual da minha página. Mas fazer o quê né? Não havia outra opção a escolher. Então decidi colocar ele ao lado dos outros botões de indicação na minha página.

Tudo beleza, até eu perceber que o botão é anti-social. Não gosta de ficar na mesma linha que outros elementos e cria uma nova linha só pra ele.
Ah, aí já é pegar pesado demais. Quer dizer que, além de ter que colocar um botão totalmente estranho ao layout, ele ainda tem que ficar ocupando um bloco de 90px de altura só pra ele??

Nãaao. Isso eu não aceito. Está na hora de eu usar meus "poderes sobrenaturais" no JavaScript (modéstia mico) e pegar diretamente o número de votos pra fazer meu próprio botão customizado (não, não tentei customizar o botão usando apenas CSS. Iria ser muito trabalho. Logo, logo verão o motivo).

Editado 24-01-07: Feito, peguei o número de votos apenas com JavaScript e mostrei como posicionar usando CSS.

Falei: "vou pegar o código gerado, entrar nos filhos usando DOM e capturar o valor". Tudo seria uma tarefa simples até eu ver isto:

<div style="font-family: Trebuchet MS, Tahoma, Verdana, Arial; background-image:url(http://www.syxt.com.br/rec6/imagens/pontos_bg.gif); background-repeat:no-repeat; text-align:center;width:57px;height:80px;padding:3px 2px 3px 2px; line-height:normal;" valign="top"> <div style="color: #ffc317; font-size: 21px; margin: 0; padding: 0"> <a href="http://www.syxt.com.br/rec6/link.php?nv=1&url=http://elmicox.blogspot.com" style="text-decoration:none; color: #ffc317;font-size: 21px; "> 0 </a> </div> <div style="color: #ffc317; font-size: 12px; margin: 0; padding: 0"> Pontos </div> <div style="margin: 10px 0px 0px 0px; color: #A5A5A5;"> <a href="http://www.syxt.com.br/rec6/link.php?url=http://elmicox.blogspot.com"> <img src="http://www.syxt.com.br/rec6/imagens/botao_subir.gif" border="0" /> </a> </div> </div>

Gostou? Pois é. É este belo código que é printado na sua página pra que aquele belo botão apareça, com o perdão da ironia. O código também não é identado.

O meu serviço com JavaScript e DOM iria virar uma complicação até chegar ao valor que eu queria. Mas bora lá. Mão na massa mico. Com alguns childNodes eu consigo chegar até o valor que está dentro do primeiro <A>, mas terei problemas com interpretações em alguns navegadores. Assim que eu tiver novidades sobre isso posto pra vocês.

Não, não é uma crítica destrutiva. Avisarei ao pessoal da Syxt (rec6) e proponho algumas soluções:

  • Dar outras opções visuais de botão (skin) pra que leigos possam escolher o tipo de botão sem precisar mexer no CSS ou JavaScript.
  • Para ter um html mais "bonito", simplificar o código acima para umas 2 ou 3 tags apenas. Sem excesso de divs. É possível sim.
  • Para os não-leigos, fornecer uma página que retorne diretamente a pontuação de determinada notícia sem códigos HTML adicionais, apenas o número de pontos.
  • Incluir o parametro "titulo" no link da indicação pra, caso seja a primeira indicação, o usuário não ter que digitar o título na mão.

Gostou desta postagem? Então aproveita e vota nela ai :-)

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

12 dezembro, 2006

Quem linka pra você?

Navegando pelo rec6 descobri uma postagem interessante no xAjax.com.br sobre sites que te permitem descobrir quem linka pra você.

O mais interessante dentre eles na minha opinião e na do xAjax.com.br foi o "Who Links to Me?".

Ele mostra em um só lugar o PageRank da página, os links by Yahoo!, by MSN Search, by Blogrolling, by Google, by Alexa, by Technorati, by Icerocket e bookmarks do Del.icio.us.

Achei meus resultados bem interessantes hehe. Mostraram comentários antigos, citações gringas, links que eu nem sabia, etc. Muito bom.
Até gringo achando que agente falava espanhol em vez de português é possível achar heheh.

Zóia seu site aí e comenta me falando o que você achou de curioso. Se quiser é só usar o campo abaixo :-)

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

Apresentação do TCC Webstandards

Hoeeeeeeeeeeeeeeee

Agora acabou o bendito TCC: Web Standards - Os benefícios do desenvolvimento Web baseado na metodologia Tableless.

Não, não explicamos códigos, teorias, hacks, técnicas ou coisas do tipo. O objetivo do trabalho foi apenas dar uma visão geral, mostrar os benefícios e comparar uma página tableless com uma não-tableless.

A apresentação foi perfeita, os medos que eu tinha não se concretizaram, batemos um papo legal com a banca, passamos bem o conteúdo.
São poucos que vêm com tanta autoridade e sabedoria, segundo um dos avaliadores. haheuhaeuhueh. Só alegria.

Agora é só fazer as correções sugeridas pela banca, encadernar e esperar sair a colação de grau (provavelmente março). Coisa pequena. O pior já passou.

Abaixo, a o slide que usamos pra apresentar os tópicos.

O texto do trabalho final eu postarei quando terminarmos as correções sugeridas.
Agora terei um tempinho a mais pros outros projetos (e para o blog hhehe).
//Se alguém tiver alguma correção a sugerir, etc. é só comentar.

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

08 dezembro, 2006

Trabalhar com XML usando JavaScript

Olá pessoal,

Hoje vou mostrar como trabalhar com XML usando apenas JavaScript (através de DOM).
Agente vê muito tutorial de XML com PHP, ASP, Java, etc, porém quase nenhum sobre JavaSript.

Ao final deste tutorial, você saberá manipular os dados de seu XML pra fazer um menu por exemplo, ou uma tabela, ou uma lista, puxar RSS, etc.

Um lembrete antes de iniciar: diferente das linguagens server-side (php, asp, etc), por motivo de segurança, o navegador não permite que você carregue qualquer arquivo que esteja fora de seu domínio, ou seja, nem adianta tentar carregar XML's ou RSS's de outros sites.

Editado em 19/12/06: Olha só outra forma interessante que eu achei no site da IBM (via MDC)

Postado também no fórum iEvolution.

Chega de papo, bora lá.

1. Fazendo um XML pro teste

(Se você já tem algum arquivo xml pode pular esta etapa)
Abra seu bloco de notas e coloque o seguinte conteúdo:

<?xml version="1.0" ?>
<pessoa>
   <identificacao id="1">
    <nome>Joao</nome>
    <email>joao@mail.com</email>
   </identificacao>
   <identificacao id="2">
    <nome familia="ze" data="2">Maria</nome>
    <email>maria@mail.com
    </email>
   </identificacao>
</pessoa>

Salve este arquivo com o nome de nomes.xml, por exemplo. Na mesma pasta deste arquivo xml, iremos criar nosso HTML que irá carregá-lo.

2) Carregando o XML

Os navegadores carregam um arquivo xml de formas diferentes. O IE usa ActiveX. Para o Firefox e Opera, iremos usar o XMLHttpRequest (o mesmo que se usa em ajax).

O código que irá retornar um objeto xml para os três navegadores citados é:

function xmlMicoxLoader(url){
  //by Micox: micoxjcg@yahoo.com.br.
    if(window.XMLHttpRequest){
        var Loader = new XMLHttpRequest();
        Loader.open("GET", url ,false);
        Loader.send(null);
        return Loader.responseXML;
    }else if(window.ActiveXObject){
        var Loader = new ActiveXObject("Msxml2.DOMDocument.3.0");
        Loader.async = false;
        Loader.load(url);
        return Loader;
    }
}

Perceba que tivemos que deixar o carregamento síncrono para que ao chegar na linha do "return" o carregamento já ter sido concluído.
Se você não sabe o que é modo síncrono ou assíncrono, no modo síncrono o script aguarda o carregamento antes de executar a próxima instrução. No modo assíncrono, o carregamento é feito em segundo plano e a execução das linhas continua indepentende de já ter chegado algum dado pelo open.
Para ler mais sobre estes modos (e suas consequências) veja esta parte do tutorial de ajax do Elcio do Tableless.com.br.

Se quiser mais informações sobre o responseXML, dê uma lida neste texto do Newton (blog Viche): a propriedade responseXML.

Pronto. Agora que agente já tem o objeto XML pra ser trabalhado, mãos à obra com o DOM.

3) Manipulando o XML

XML pode ser manipulado como se fosse um esquema de árvore através das rotinas do DOM, ou seja, pra trabalhar com o XML nós apenas manipularemos propriedades como childNodes, nodeType, nodeValue, firstChild e outras expressões bem comuns pra quem já mexeu com XML ou Javascript.

Na rotina que eu coloco abaixo, apenas faço um laço for que percorre todos os filhos do objeto XML retornado pela função xmlMicoxLoader.
A cada filho percorrido, eu pego o valor dele através de nodeValue, e os atributos através do array attributes[]. O nome dos elementos pode ser recuperado através de nodeName. Se determinado nó tem outros filhos, eu percorro estes filhos também e faço o mesmo. Bah, vá estudar DOM hehehe

Uma observação: o IE ignora os espaços em branco e não os interpreta como filhos. Eu acho isso bom. Porém o FF e o Opera, seguem os padrões e interpretam estes espaços em branco e Enter's como se fossem um elemento do tipo #text. Daí precisamos filtrar estes elementos testando o nodeType (elementos tem nodeType=1, textos tem nodeType=3).

Este exemplo apenas printa na tela o esquema XML feião mesmo. Mas já dá uma base pra você entender e trabalhar com o XML. Leia e entenda, isto é uma ordem:

function xmlMicoxArvore(xmlNode,identacao){
  //by Micox: micoxjcg@yahoo.com.br
    var arvoreTxt=""; //esta var armazenara o conteudo
    for(var i=0;i<xmlNode.childNodes.length;i++){//percorrendo os filhos do nó
  if(xmlNode.childNodes[i].nodeType == 1){//ignorar espaços em branco
   //pegando o nome do nó
   arvoreTxt = arvoreTxt + identacao + xmlNode.childNodes[i].nodeName + ": "
   if(xmlNode.childNodes[i].childNodes.length==0){
    //se não tiver filhos eu já pego o nodevalue
    arvoreTxt = arvoreTxt + xmlNode.childNodes[i].nodeValue 
    for(var z=0;z<xmlNode.childNodes[i].attributes.length;z++){
     var atrib = xmlNode.childNodes[i].attributes[z];
     arvoreTxt = arvoreTxt + " (" + atrib.nodeName + " = " + atrib.nodeValue + ")";
    }
    arvoreTxt = arvoreTxt + "<br />\n";
   }else if(xmlNode.childNodes[i].childNodes.length>0){
    //se tiver filhos eu tenho que pegar o valor pegando o valor do primeiro filho
    arvoreTxt = arvoreTxt + xmlNode.childNodes[i].firstChild.nodeValue;
    for(var z=0;z<xmlNode.childNodes[i].attributes.length;z++){
     var atrib = xmlNode.childNodes[i].attributes[z];
     arvoreTxt = arvoreTxt + " (" + atrib.nodeName + " = " + atrib.nodeValue + ")";
    }
    //recursividade para carregas os filhos dos filhos
    arvoreTxt = arvoreTxt + "<br />\n" + xmlMicoxArvore(xmlNode.childNodes[i],identacao + "> > ");
   }
      }
    }
    return arvoreTxt;
}

Agora é só chamar as funções:

xml = xmlMicoxLoader("nomes.xml"); //carrega o xml
document.write(xmlMicoxArvore(xml,"")); //printa a árvore na tela 

4) Carregando um RSS

Bom, o exemplo anterior não é muito útil não né? Serve só pra você aprender.
Vamo mostrar um exemplo mais útil: uma função que carrega um RSS de seu próprio site.

function xmlMicoxRSS(xmlNode){
 //by Micox: http://elmicox.blogspot.com
 var retorno = "";
 var objNodeList = xmlNode.getElementsByTagName("item")
 for(var i=0;i<objNodeList.length;i++){
  var strTitulo = ""
  var strURL = ""
  var strDescr = ""
  var objNode = objNodeList[i];
  if(objNode.nodeType == 1){//ignorar espaços em branco
   for(var j=0;j<objNode.childNodes.length;j++){
    var objNode2 = objNode.childNodes[j];
    if(objNode2.nodeType == 1){//ignorar espaços em branco
     switch (objNode2.nodeName) {
      case "title": 
       //alert(objNode.childNodes[j].firstChild.nodevalue);
       strTitulo = objNode2.firstChild.nodeValue; 
       break;
      case "link": 
       strURL = objNode2.firstChild.nodeValue; 
       break;
      case "description": 
       strDescr = objNode2.firstChild.nodeValue; 
       break;
     }
    }
   }
   retorno += " <li><a href='" + strURL + "'>" + strTitulo + "</a><br />" + strDescr + "</li>\n";
  }
 }
 retorno = "<ul>\n" + retorno + "</ul>";
 return retorno;
}

Agora é só jogar o resultado na sua div:

xml = xmlMicoxLoader("rss.xml"); //carrega o xml
document.getElementById(div_alvo).innerHTML = xmlMicoxRSS(xml); //lista o rss

Editado 12/12/06: O Bernardo Rufino fez outro ótimo exemplo de como se trabalhar com XML e Javascript: Criando Gráficos Dinamicamente com Ajax e XML

5) Conclusão

Pronto. Agora acho que você já tem uma base para trabalhar com XML no JavaScript da mesma forma que faz com outras linguagens.
Pra ficar bão mermo, repito, estude DOM, nem venha me fazer perguntas básicas sobre isso. :-)
Dúvidas ou se tiver algum bug aí é só me falar.

Ó, tô desestimulado de ficar escrevendo estes tutoriais gigantescos, postando notícias no blog, etc. Ninguém comenta nessa bagaça. Então comenta aí caramba.

Té a próxima.

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

07 dezembro, 2006

Contra-ataque: ajude a combater o spam

Pois é. Não tá adiantando apenas ocultar os arrobas dos endereços de emails. Os malandros sempre dão um jeito de enviar propagandas de Viagra, mandar um lindo cartão.exe, ou pedir ajuda a um príncipe na África.

Isto sem contar a quantidade de banda que este pessoal consome. Os elementos já são responsáveis por 67% dos emails enviados (pesquisa de jan/2006).

Que tal contra-atacar? Um pessoal aí inventou uma forma: Spam Poison Community: ajude a combater o spam.

Eles redirecionam os robôs de busca de emails, para endereços contendo toneladas de emails falsos, de forma a tornar o trabalho do spammer mais difícil. Tomara que a tática dê certo. Tá certo que, com o tempo, provavelmente os robôs de spam descobrirão uma forma de se desviarem disso, mas no momento tá valendo.

Ajude aí também inserindo o link do Spam poison no seu blog/site. Eu já fiz minha parte (no menu "extras" ao lado.

Via: br-linux e Rec6.

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

Quer conhecer o algorítimo do Page rank do Google?

Então prepare-se para muito texto (em inglês), muita matemática e muita, muita paciência.

How Google Finds Your Needle in the Web's Haystack

Se você entendeu, comente aí e me explique (minha paciência pra ler isso não tá lá essas coisas hehe).

Independente de ter entendido essa viagem toda, te aconselho a ler este texto de 4 anos atrás mas que continua super atual e funcional: As palavras-chave nos lugares certos (na verdade é uma série. Leia toda a série que não se arrependerá).

Descoberto by: Esdruxulo e Rec6.

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

Resultado! Concursos