Javascript: aprenda fácil

Eu sempre quis ver um artigo legal que me ensinasse Javascript, porque tudo o que vi até hoje escrito com ele é fantástico, claro que tem umas baboseiras que não valem a pena, mas a linguagem em si é show. Eu clico em um botão e aparece um formulário, eu passo para o campo seguinte do formulário e o dado é validado, eu mostro conteúdo, eu escondo conteúdo, etc, e o AJAX? é genial.

Quando eu falo em artigo legal me refiro a ele ser prático, rápido e fácil pegar a idéia da coisa. Nada de textos e mais textos teóricos e exemplos complicados, nem muito menos ficar copiando, colando e adaptando scripts que os outros fizeram, eu queria algo que me fizesse sair implementando minhas próprias coisas, do meu jeito. Até que tive no meu trabalho a oportunidade de fazer um enorme formulário com uma validação no cliente que não tinha mais tamanho, e tudo em Javascript, então… Bum! foi paixão à primeira vista, e desde então tenho fuçado a linguagem cada dia mais.

Preparado? então vamos lá… Vou falar de forma bem simples

1. Um pouco de teoria apenas

O Javascript é uma linguagem de script orientada à eventos criada pela empresa Netscape porque era de interese dela que as páginas da Internet tivessem maior dinamicidade e movimento. Não tem nada a ver com Java, exceto semelhança uma leve na sintaxe, só a nomearam assim porque o Java estava na moda na época.

Como em tempos de webstandard nada na Web é só alegria, existem coisas que funcionam para uns navegadores e coisas que não funcionam para outros. É importante se manter o código enxuto o suficiente para que eles funcionem até na geladeira de sua casa.

2. Vamos à prática então

Primeiro um bloco de código JS é declarado assim assim:

<script type=”text/javascript”>
/* aqui vem o script */
</script>

Isso é o mesmo que o <% %> do asp ou o <? ?> do PHP. Mas esse bloco do Javascript deve ficar entre as tags <head></head> por convenção da W3C. Obedeçam isso ;)

O ideal é explorar bastante o uso de funções (function) pra organizar as coisas, é fácil de pegar o jeito, um exemplo:

<script type=”text/javascript”>
function escrevaMeuNome() {
document.getElementById(’divDoNome’).innerHTML = ‘Henrique’;
}
</script>

Esta função claramente diz que ao ser chamada ela escreverá meu nome dentro do DIV de id “divDoNome”. Como chama-la? assim:

<input type=”buttom” value=”Meu Nome” onclick=”escrevaMeuNome()” />
<div id=”divDoNome”></div>

Vamos lá, eu tenho um DIV como elemento HTML que o Javascript vai usar para exibir meu nome. Sim, eu preciso ter isso porque do contrário onde ele vai imprimir?

O Javacript é orientado à eventos como eu disse no começo, ou seja, algum componente HTML precisa dispará-lo para que ele seja executado (interpretado). Quem disparou a função “escrevaMeuNome()” neste caso foi o botão, através do “onclick=escrevaMeuNome()”.

A função tem uma linha apenas de código. Ela chama cada objeto pela hierarquia:

* Document = o documento HTML atual;
* getElementById(’divDoNome’) = aqui é a função que Document tem para apanhar elementos pelo id, bastante claro, não? e quem estamos pegando é o nosso div “divDoNome”;
* innerHTML = Quando pegamos um elemento, podemos usar o método innerHTML que permite imprimir algum HTML nele;

Eu gosto muito de usar essas funções do Javascript como getElementById, getElementByDivName (pegar pelo nome da DIV), getElementByName, etc.. elas são praticamente mágicas porque como elas mesmo nos deixa entender, podemos pegar o nome de uma tag, o nome de um objeto HTML qualquer, etc, e com isso em mãos podemos fazer o que bem entender. Vamos à outro exemplo.

Um form:

<form name=”cadastro”>
 <input type=”text” name=”nome” value=”" onblur=”validaCampoVazio(’nome’)”>
 <label id=”label_nome”></label>
</form>

Este exemplo faz com que o campo “sobrenome” somente apareça se o campo “nome” tiver preenchido com algum valor. O campo ”nome” verifica isso assim que o mouse é clicado fora. Se o campo ficar em branco, uma mensagem de erro é exibida no label ”label_nome”.

Eu concluí que com Javascript a ordem é generalizar quando se trata de formulários. Então nada de sair aplicando funcionalidades específicas ao seu campo de texto ou etc, as funções devem ser aplicáveis à qualquer componente HTML e não à este ou aquele campo.

<script type=”text/javascript”>
function validaCampoVazio(campo) { //função validaCampoVazio (qualquer campo), que recebe um valor, que é o nome do campo que queremos validar.
var valorcampo;  //declara opcionalmente a variável que receberá o valor do campo.
valorcampo = document.cadastro['nome'].value; 
// document.nomedoformulario['camponome'].ovalordele (hierarquia de objetos). Isto resgata o valor daquele campo no momento em que foi chamada a função em questão.

if (valorcampo == ”) {  //se o valor do campo for nulo.
     mostraMsgErro(campo);  //chama a função que vai mostrar mensagem de erro, passando o mesmo NOME DO CAMPO (veja bem, nao é o valor, é o nome!). Apartir do nome do campo podemos tirar o que quisermos dele: valor, estilo, etc.
     escondaSobreNome(); //chama a função que vai esconder o campo e o label do sobrenome.
} else {
     mostraMsgOk(campo); //chama a função que vai mostrar mensagem de ok.
     mostraSobreNome(); //aqui mostra o label e o campo sobrenome.
}

function mostraMsgErro(campo) {
     var msgErro = campo + ‘ inválido(a) ou vazio(a)’; //a variável msgerro aqui recebe o nome do campo e concatena com a mensagem.
     var labelErro = document.getElementById(’label_’ + campo) //aqui resgata-se o nome do label que mostrará a mensagem.
     labelErro.innerHTML = msgErro; //e manda-se imprimir a mensagem no label.
}

function mostraMsgOk(campo) { //aqui faz-se praticamente a mesma coisa de ali acima mas nao se exibe nada no label.
     var labelOk = document.getElementById(’label_’ + campo)
     labelOk.innerHTML = ”;
}

function mostraSobreNome() {  //esta função mostrará o campo sobrenome.
     document.getElementById(’sobrenome’).style.display = ‘block’;  //aqui mostra-se o label, acessa-se o atributo “style” e depois o “display” e dá-se um block!
     document.cadastro['sobrenome'].style.display = ‘block’; //e aqui o campo.
}

function escondaSobreNome() { //esta função é o contrário da mostraSobreNome() de cima.
     document.getElementById(’sobrenome’).style.display = ‘none’;  // acessa-se o atributo “style” e depois o “display” e esconde.
     document.cadastro['sobrenome'].style.display = ‘none’; //e aqui o campo.
}

}
</script>

O que é brilhante é a maneira como os objetos se hierarquizam, de forma que posso ir acessando atributos e sub-atributos como no caso do “objeto.style.display” ou do “objeto.value”. Assim posso manipular com o que quiser.

Falta muito? falta. Tem coisas muito interessantes como o tratamento de erro com “Try” e “Catch”, AJAX,.. etc, etc, etc, etc. Isso aqui foi apenas uma idéia de como as coisas funcionam. Com um pouco de exercício você que já conhece programação pra Web vai conseguir tirar coisas interessantes desses exemplos que eu dei.

Introduzam ou retomem o Javascript em suas vidas e me contem como foi!

Como criar um CAPTCHA (para ASP e PHP)

Atualizado em 28 de Maio de 2008
Pronto, a versão do CAPTCHA em PHP está criada e testada, usem e abusem. O link está no final deste post na seção “Downloads”. Lembrem-se de deixar algum comentário sobre a experiência com quaisquer versões que usarem. :P

 

Atenção: POST TÉCNICO
Se você não trabalha com desenvolvimento este post não será entendido por você.

Se você já fez um cadastro na internet concerteza já teve que preencher um código composto por uma mistura de letras e números embaralhados bem chato de ler, como este:

Pois bem, isto se chama CAPTCHA. Muitos formulários na internet hoje em dia são preenchidos por computadores spammers, pessoas que ”extremamente ocupadas” elaboram um mecanismo para, por exemplo, preencher o seu formulário de contato de forma descontrolada com propagandas e outras porcarias, e tudo é feito automaticamente. Se o formulário inserir dados em um banco de dados, então têm-se um banco ocupando espaço com lixo, ou até pior: vírus. E é incrível como esse tipo de coisa acontece com frequência. Se eu disponibilizar um form na internet que remete para meu e-mail, pronto! é questão de minutos pra uma enxurrada de tranqueira chegar na minha caixa de entrada. 

O CAPTCHA praticamente não permite que esse problema aconteça, dependendo da complexidade do código ou da forma como ele é implementado, os spammers são capazes de burlá-los rapidinho.

Bom, em resumo, eu pensei esses dias: por que não criar o meu próprio CAPTCHA? Algo simples, pra que a idéia seja entendida. Eu estava lendo o post “CAPTCHA de pobre” do Aurélio há um tempo atrás, e decidi fazer o meu baseado no modelo do dele, que segundo ele mesmo, foi a maneira que realmente barrou os spams após várias insistentes tentativas. Se ainda te restam dúvidas sobre o que é spam, vamos à própria definição do Aurélio:

Um SPAM é um recado oportunista e indesejado, geralmente uma propaganda comercial ou links para sites pornográficos. Como se isso já não fosse irritante o suficiente, geralmente são programas que enviam estes recados automaticamente, então não adianta simplesmente apagar que ele vai ser enviado novamente. Alguns enviam diariamente esse lixo para o seu site, imagine o tamanho da dor de cabeça.
 

1º Passo: o que não pode ter num CAPTCHA

Vou explicar usando a versão para ASP, mas em PHP o esquema é o mesmo.

Para que um CAPTCHA seja realmente eficiente, em primeiro lugar deve-se pensar o que NÃO pode ter nele. E a primeira coisa é: o código que a imagem mostra embutido no código-fonte!

Em hipótese alguma pense em colocar o código/palavra/número que a imagem está mostrando em seu código como por exemplo num campo de texto tipo “hidden”. Isso é facilmente encontrado pelos programas de spam.

A segunda coisa é uma imagem mostrando algo completamente dedutível e fácil de ler como: “111″, “222″ ou mesmo: “ABC” ou “OI”, “VOCE”, etc. Spammers também lêem o que tem na tela.

Ainda segundo o próprio Aurélio, cores ou números digitados na tela para serem ”colados” no campo de texto também não funcionam.

2º Passo: elaborando como vai ser o código da imagem

Números. Este CAPTCHA que estamos elaborando não tem a garantia de ser completamente seguro, mas vamos seguir (a nível de experiência) o modelo que deu certo para o Aurélio (os quatro números completamente sem ordem lógica ou significado para estranhos) como os últimos dígitos do meu antigo celular, ou da casa em que morei, ou parte do meu RG e CPF.

Eu criei 20 imagens:

imagens para o CAPTCHA

3º Passo: o esquema

Criei um diretório imagens na raiz do meu site, e joguei todas as imagens acima lá. Para facilitar, as imagens têm nomes simples como: 1.jpg, 2.jpg, 3.jpg…

Cria-se então uma página chamada “captcha.asp”,  que ficará um nível acima do diretório imagens. A “captcha.asp” vai chamar as imagens de “imagens”, entendeu né?

Agora dentro de captcha.asp cria-se em primeiro lugar o formulário, ele vai submeter para a própria página “captcha.asp” neste exemplo só para facilitar:

<!– até aqui tudo ok, um formulário submetendo para a mesma página –>
<form action=”captcha.asp” method=”post”>
<label for=”codigo”>Digite o código ao lado:</label>
<!– o campo que receberá o código –>
<input type=”text” name=”codigo” size=”4″ maxlength=”4″ />
<!– aqui estou chamando as imagens dinamicamente, na função ASP de logo mais adiante –>
<img src=”imagens/<%= nome_imagem_gerada %>.jpg” alt=”">
<br/>
<!– um campo oculto que precisarei para informar ao ASP qual o nome da imagem gerada –>
<input type=”hidden” value=”<%= nome_imagem_gerada %>” name=”imagem” />
<!– um campo oculto que me dirá se o form está sendo submetido ou nao, já que está na mesma página–>
<input type=”hidden” value=”sim” name=”enviando” />
<input type=”submit” value=”enviar” />

Logo acima do formulário, implementei o seguinte código ASP:

<%
‘aqui eu verifico se o caso é: o form está sendo enviado
if request.form(”enviando”) = “sim” then
 ’se está sendo enviado, eu apanho o código que o usuário inseriu e o nome da imagem que foi gerada lá no form.
 codigo = request.form(”codigo”)
 imagem = request.form(”imagem”)
 
 ’um case verifica se a imagem foi 1.jpg, então ela tem o código “0266″, se foi 2.jpg então o código dela é “9032″ e assim por diante…

 select case imagem

 case 1
 cod = “0266″
 case 2
 cod = “9032″
 case 3
 cod = “5610″
 case 4
 cod = “1277″
 case 5
 cod = “0501″
 case 6
 cod = “7090″
 case 7
 cod = “2111″
 case 8
 cod = “9831″
 case 9
 cod = “0003″
 case 10
 cod = “1012″
 case 11
 cod = “5123″
 case 12
 cod = “2299″
 case 13
 cod = “6974″
 case 14
 cod = “4415″
 case 15
 cod = “7618″
 case 16
 cod = “8870″
 case 17
 cod = “1610″
 case 18
 cod = “0102″
 case 19
 cod = “6048″
 case 20
 cod = “5599″

 end select

‘ se o código digitado pelo usuário bater com os códigos que defini para cada imagem… voilá!
 if cod = codigo then
  response.write “<span style=’color:green’>Parabéns! Código correto.</span>”
 else
‘ se o código digitado pelo usuário NÃO bater com os códigos que defini para cada imagem… Código errado!
 response.write “<span style=’color:red’>Ops! Código incorreto.</span>”
 end if
 response.write “<br/><input type=’submit’ value=’voltar’ onclick=’javascript:history.back();’ />”
 response.end

‘ se o form não estiver sendo enviado, então a função “randomiza()” gera números randômicos de 1 a 20 e o número que for a bola da vez vai virar nome de uma imagem, tipo:  numero.jpg
else

 function randomiza()
 dim RndTemp
 Randomize
 RndTemp = Rnd * 19 + 1
 RndTemp= Int(RndTemp)
 randomiza = RndTemp
 end function

 nome_imagem_gerada = randomiza()

end if
%>

4ª Passo:  o desafio

Desafio você a testar a eficiência deste CAPTCHA em seu site/blog. Por que não experimenta em seu formulário de contato por exemplo? Observe bem sua caixa de entrada ou lixeira, está entrando spams ou o troço foi eficiente?

Conte-me aqui os resultados.

Observações

1. Quanto mais você proteger o diretório imagens melhor para não ter suas imagens rastreadas por programas ou indivíduos maliciosos.

2. É importante tentar criptografar partes do seu código, principalmente os que se referem aos nomes das imagens.

Download

Este post ficou enorme, mas foi preciso, então se você quiser a coisa toda mastigada fique à vontade para baixar o pacote completo do mais novo “Simple Captcha”:

Você usou? gostou? tem dúvidas, críticas, reclamações, sugestões? Deixe seu comentário neste post.

Agora eu sou “.com.br”

Um domínio .com.br é importante. Se você quer dar seriedade a seu nome ou negócio sim. Eu sempre tive vontade de ter o meu. Uma vaidade que nunca as oportunidade$$$ permitiram. Então apartir de agora  (desde a semana passada) o endereço:  www.henriquearaujo.com.br agora leva à este blog.

Como isto é uma notícia que não interessa muito a ninguém além de mim, neste post eu vim lembrar a importância de um endereço “.com.br” pra todo mundo:

  • Confiança. Primeiro que quando você entra num endereço .cjb.net gratuito e estranho ninguém leva a sério o seu site do que se você tem um www.você.com.br;
  • Credibilidade. Pra quem o trabalho depende diretamente da internet (como eu), passar um protótipo para um cliente no seu próprio endereço na internet passa uma seriedade show de bola;
  • Liberdade. Se me der na telha criar um: ”www.henriquearaujo.com.br/qualquercoisa” eu vou lá e faço. Se eu quiser um site normal ao invés de um blog, faço, se eu quiser apenas uma placa:  “estou de férias! volte depois.” também;
  • Organização e praticidade.  É mais fácil achar o Henrique por um www.henriquearaujo.com.br do que por um henriquearaujo.algumacoisa.outracoisa.blabla.com.br 

É legal. faça o seu também. :P

Profissão: webdesigner (xiiii coitado eim?)

“A preocupação fundamental do webdesigner é agregar os conceitos de usabilidade com o planejamento da interface, garantindo que o usuário final atinja seus objetivos de forma agradável e intuitiva.”
(Wikipedia)

E não é só isso não, tem tanta coisa encima dos ombros desses caras que você (que não é webdesigner) nem imagina. Imagina só produzir algo com todos os cuidados profissionais adequados, horas e horas triturando a coluna, e ser criticado por leigos do assunto que se adiantam e falam: vix, que negócio morto! ou: nossa, que negócio aceso! Pois bem, hoje me bateu o seguinte flash:  o que é layout bonito? 

ATENÇÃO
Se você não trabalha na área de Web então este post não interessa à você. Tente um pouquinho de CBN. :P

Vamos partir do começo. Do pressuposto de que Bonito e Feio são conceitos inerentes à cada ser humano, ou seja, o site da Globo.com é bonito? Eu não acho, e você? Logo, o produto visual criado pelo profissional Webdesigner (o layout), é algo que ele bolou da caixola dele (claro que com vários critérios) e que o chefe dele ou o cliente dele aprovou. As idéias bateram. Combinaram. Mas a pergunta correta é: o site da Globo.com é claro? é confortável de ler e navegar? traz o que quero ver? é fácil? Ahhh… aí sim, essa é a questão que importa!

Pergunte à sua avó ou à seu amigo médico se 2 Advanced é bonito. Você provavelmente vai ouvir opiniões diferentes, e além disso confusas. Usuários comuns não ligam para degradês, transparências, piscadelas, aquela sombrinha no topo. Webdesigners (ou metidos a webdesigners) sim. Beleza é apenas um conceito abstrato da cabeça. Eu acho o 2 Advanced bonito.

Vale lembrar que cada site tem um significado de existir. Um sistema usado internamente na sua empresa é BEM DIFERENTE de um site público, visto por todo mundo. Sistemas internos não precisam ser “lindosssss”, vibrantes, cheios de pirotecnia, eles são formais e caretas, eles têm obrigação sim de ser essencialmente claros, eficientes e amigáveis. Webdesigner bom é aquele que melhor e mais sabe principalmente de CSS, Padrões Web, Semântica, Usabilidade, Arquitetura de informação e Acessibilidade. O resto se aprende na escola do bom senso.

E você? já teve algum cliente ou chefe sem noção? já foi criticado por algo que produziu? foi elogiado por algum trabalho? Abra o seu coração, discorde, chore seu drama (ou conte sua alegria). :P Dê sua opinião sobre este post! 

Floater? é IE 6 hack!

Ok, imagine o seguinte caso:  você quer criar uma Rich Media tipo flutuante (?), aí você pensa: tudo bem né, crio um <div> “position:absolute” e fica tudo lindo. Porém se você tiver o mínimo de preocupação com seu site e com as resoluções em que ele será visto, vai ver que como a <div> absolute possui a característica de ficar fixa na página, dependendo do tamanho que a janela do navegador apareça, o seu floater vai ficar lá paradão. Tosco.

A solução

O que aprendi parece ser a solução mais adequada. Primeiro o <div> na posição absoluta vai existir sim, com os ajustes de esquerda e topo que você precisa, mas… …pra que esse conteúdo se adeque à diferentes resoluções, você vai precisar colocar um novo <div> por fora, mas  dessa vez relativo, assim:

<div style=”position:relative;”>
  <div style=”position:absolute; top:26px; left:460px;”>
<img src=”aquiomeulfloater.jpg” />
</div>
</div>

Bom, até então a lógica da coisa ta certa né, porém isso resolve seu problema para o Firefox e para o IE7, mas para o IE 6 não. (Aeeee! :P)

Então eu como webmaster do site da SET/RN quase enlouqueci com este selinho aí do topo:

site_set_imagem_selo.jpg

Ele PRECISAVA ficar legal, mas estava fixo exatamente como se eu não tivesse colocado <div> relativo nenhum. Como fazer ele se adaptar à janela, também no IE 6? Mas já está tudo correto! Devo deixar só um <div>? Que raios! Então, descobri! voilá! Mais um par de <div>’s nesta sequencia relative e absolute deve ser colocado! É um comportamento do navegador que não tem muita lógica (típico do IE ne?), então a coisa ficará:

<!–[if IE 6]>
  <div style=”position:relative;”>
  <div style=”position:absolute; top:26px; left:460px;”>
  <![endif]–> 

<div style=”position:relative; z-index:1″>
  <div style=”position:absolute; top:seutop; left:seuleft; z-index:1; width:larguradaimagem; height:alturadaimagem;”>
<img src=”aquiomeulfloater.jpg” />
</div>
</div>

<!–[if IE 6]>
  </div>
  </div>
  <![endif]–>

Clap! Clap! Clap! Clap! Clap! (aplausos). Que belo de um hack eim tio Bill?!

Web sites - Cartilha para construir ou reformar (versão 1.0)

update:   um material relacionado, que pode ser um conjunto de precauções adotadas posteriormente (ou simultâneamente) ao que falei neste post, está no Blog do Juliano Barreto.

(Este post fala sobre técnicas de desenvolvimento, padrões, usabilidade, acessibilidade e arquitetura da informação. Atenção: post extenso)

Interessou? siga em frente…

Com base primeiro em gente especializada e depois na experiência própria (+ uma pitada de bom senso e responsabilidade) me veio à cabeça a idéia: listar um conjunto de melhores (e essenciais) práticas na hora de dispor os elementos de um site e criar suas sub-páginas. O objetivo é ajudar na luta por uma Web menos desleixada e amadora, e resgatar para discussão os critérios que vêm sendo utilizados por nossos web-developers. Pra estes pode também servir como guia de bolso. :)

É extremamente importante lembrar que a criação de mídias interativas para clientes do tipo institucional ou comércio requer uma extensa análise que vai de cores à número de páginas, tais como:

  • Análise de público alvo: que linguagem utilizar? o que dizer? como dizer? como projetar a navegação?
  • Análise de cliente: usar esta ilustração? esta fonte está adequada? necessita desse recurso? a cor ficou adequada? como atingir o que ele precisa?
  • Análise de mercado: os concorrentes estão dizendo o que? e como estão dizendo? e os casos de sucesso? e os casos de fracasso?
  • Público não-alvo: o que irão fazer neste site? o site é claro? foi útil de que forma?

Se você leu até aqui é porque o assunto te interessou. Então, com a idéia acima firmada e com as vibrações positivas do Nielsen atuando, let’s get it started…

I. Página Inicial: Bem vindo! (ou Adeus)

Ela é a principal responsável por dizer se o internauta vai continuar a visita no site ou nunca mais vai voltar (sim, eles são radicais!). É o portão de entrada, é a primeira impressão que vai ficar. Deve estar elegante, prática, clara, e principalmente, fornecer o que o usuário procura. Se ela desagradar ao primeiro encontro, adeus fulaninho.com!

Logomarca:
como de praxe, fica sempre no lado esquerdo no topo do site, tamanho maior que qualquer outro elemento e em 90% dos casos ligando à página inicial. O desenvolvimento de sites não tem a ver diretamente com a atividade de branding, mas a logomarca deve dizer claramente a natureza do negócio, ex: O Carrão - venda e aluguel de automóveis.

Busca:
sempre no topo, porém à direita. Não tem obrigação nenhuma de estar alinhada com a logomarca, mas é vital que esteja no topo porque é onde o usuário vai procurá-la. A melhor busca não é a que traz maior número de resultados, é sim aquela que traz resultados mais próximos do que o usuário procura. Nada de botões “>” ou “ir”. Os resultados devem ser apresentados com título em azul, negrito, um resumo do que se trata e o link escrito na tela logo abaixo, para dar oportunidade ao usuário acessar diretamente. Ex.: simplesmente o Google.

Opções de acessibilidade:
é um dever do desenvolvedor dar à todos a oportunidade de acesso ao site, reduzindo as limitações que eles tiverem. Se o mouse está quebrado, o teclado deve permitir uma navegação mesmo que parcial. Se a visão é míope, o texto pode ser lido em tamanho maior. Recursos de acessibilidade devem estar à mão do usuário num simples clique, localizados preferencialmente no topo.

Floaters e pop-ups:
usar em casos de extrema necessidade. Como eu já abordei aqui no blog anteriormente, eles são propagandas invasivas e inconvenientes. Portanto não se deve deixar que animações cheias de movimentos radicais ou cores em excesso tomem conta da tela, nem de 5% dela, isto irrita, e o botão de Fechar deve estar muito bem destacado.

Notícias / novidades:
é comum as pessoas acharem que pode fazer do site uma fonte de informação ao internauta, uma mini agência de notícias. Notícias só devem existir se realmente a sua informação importar ao seu publico alvo, do contrário é preferível um espaço vazio do que textos “enche-linguiça” que ficarão enfeitando e acumulando poeira por lá.

Área Destaque (imagem ou Flash):
destaque realmente precisa estar em destaque, senão ele se auto-elimina. Em casos comuns o destaque exibe informação inútil. Portanto, só deve ser destaque o que merece ser destacado.

Newsletter:
cabe aqui a mesma regra colocada para notícias, porém a coisa é um tanto mais séria. O que mais enche o saco dos usuários da Internet é receber informação que não lhes interessa em forma de cartinhas digitais, folhetos com imagens enormes, informativos sobre produtos, novidades de loja, etc. Portanto, a questão é: o público do site precisa REALMENTE receber informativos seus? Se for um site de alguma loja (por exemplo: Americanas.com) pode ser bem importante ter esta seção no site. Ela deve aparecer nas laterais da página inicial. Não esquecer do botão de retirar da lista o e-mail do usuário, ou o seu cliente acabará virando um spammer.

Rodapé:
deve informar onde fisicamente se encontra o dono/empresa do site, isso dá confiança ao negócio. Se o site possuir formulários que coletem dados dos visitantes é obrigatório que você esclareça como estes dados são coletados, para onde vão e o objetivo de coletá-los, através de uma Política de Privacidade. Uma Ajuda é muito importante também. Se o site possuir parceiros, colaboradores, ou créditos, aqui é o local onde eles devem ser mostrados.

II. Quem é você?

E o que faz? qual a sua intenção? Dizer isso é básico! se o site for simples demais é recomendado que este tipo de apresentação esteja na própria página inicial, esteticamente elegante. Quando conhecemos uma pessoa, nos apresentamos (ou somos apresentados) e dizemos o que fazemos da vida. Isto é esclarecedor e muito útil. O conteúdo precisa ser extramamente claro e objetivo. Se quer falar muito, então divida o texto em partes como: “História”, “Passado”, “Um pouco mais”, etc. Não cansar o usuário é uma meta também.

Uma foto (da empresa ou sua) e uma linguagem descontraída cabem bem aqui, o formalismo tem deixado de ser uma característica dos sites, ele é seco, frio e artificial, o usuário quer sentir um ambiente amigo, confortável e simpático. Porém é preferível formalidade do que humor sem graça.

III. O que você já fez?

É a hora de se exibir casos de sucesso, experiências passadas, portfólio, etc.

De um modo geral isso é obrigatório se o(a) empresa/dono quiser obter resultados positivos com o site. Esta seção é uma chance de mostrar um passado de vitórias e bons momentos; passar credibilidade.

IV. Ajuda

Como eu disse antes, usuários são radicais na internet. Dê uma chance pra ele pedir socorro caso não esteja achando algo no site ou passando por dificuldades devido à erros ou instabilidades de navegação. Use formulários, FAQ, atendimento online, ajuda demais não atrapalha. Todo mundo quer ser bem servido. Mas é preciso responder com simpatia o contato feito pelo visitante, somente receber a mensagem dele não adiantará de nada.

V. Contato

É vital que o internauta tenha a possibilidade de entrar em contato com a empresa/dono do site via formulário de contato. O contato é a parte principal do site, dependendo de como ele esteja apresentado na página, o dono do site pode perder ou ganhar oportunidade$ de ouro ;). Se não for possível uma programação para implantar um formulário, deve se exibir um endereço, um telefone, e todos os meios possíveis de se encontrar o seu negócio, nem que seja por sinal de fogo.

Link de correio eletrônico “mailto” JAMAIS! ninguém deve ser obrigado a ter um cliente de e-mail instalado e configurado para entrar em contato por este site.

Observações:

Este é simplesmente um resumo das regras de construção dos websites com base no J. Nielsen. De fato um projeto certamente engloba aspectos bem mais detalhados, que vão além do abordado neste post. A tentativa aqui não foi de sobrepor ou reinventar conceitos já estudados e apresentados por autoridades no assunto como Nielsen, mas reforçá-los.

Espero estar trazendo uma atualização em breve dessa “cartilha” (uma versão 2), com exemplos, casos reais, demonstração do certo ou errado a se fazer, outras coisas mais. E você tem alguma dica a adicionar? discorda de algo? esqueci alguma coisa? fique à vontade para trazer seu comentário.

+ Dá uma olhada nesse material complementar à esse post:
Felipe Memória - Projetando a Experiência Perfeita

+ Última revisão desta cartilha:
10 Mar 2008

Internet Explorer 8 e a luz no fim do túneo

Pra quem não sabe,  o barato de desenvolver páginas para a Web custa caro. Durante o processo (de construção da página) há uma série de incansáveis testes em diferentes navegadores, para ver se cada coisa ficou no seu lugar. Testa aqui, testa ali. Ficou ruim? testa aqui e testa ali de novo. Ainda assim ficou mais ou menos? testa aqui, testa ali de novo e a cada ponto novo colocado, lá vamos nós de novo. Neste caso, as palavras “aqui” e “ali” podem ser substituídas por Microsoft Internet Explorer e Mozilla Firefox (pra quem não sabe os mais usados pelos usuários no momento). Como diz meu amigo (Val) “o bagulho é loco mano”. 

Aí a Microsoft do tio Bill lança o IE7. Hm… as coisas passaram a melhorar. Quem acompanha o blog viu que a atualização do IE pro 7 seguiu um pouquinho melhor os padrões web, tanto que passou a renderizar parecido com o Firefox. Mas não era suficiente. A dura jornada permanecia, e os fios de cabelo de nós desenvolvedores ainda continuavam caindo.

E agora… pimba! a MS soltou nesta quarta uma versão beta do IE 8, e ele passou no teste Acid2 (uma maravilhosa página rigorosamente dentro dos padrões que põe à prova qualquer navegador - Quer brincar com o Acid2?). Parece que a infelicidade do “testa aqui , testa ali” tá morrendo. Como de costume se trata de uma primeira versão para profissionais de TI e desenvolvedores web para a galera ja ir testando aos poucos. Ah, antes que eu me esqueça, aqui vão algumas novidades anunciadas do novo IE:

  • Browser rigorosamente dentro dos padrões web;
  • Função WebSlices - será possível separar o site em partes, e pedir para que o navegador atualize apenas as áreas escolhidas;
  • Função Activities - integra o conteúdo dos sites com outras aplicações;
  • CSS 2.1 e Certificação CSS;
  • Compatibilidade nativa com a linguagem HTML 5.

E você, já baixou o seu IE8 zerinho?

“O novo motor da web”

http://freephotoshopguides.com

Esse eu não poderia deixar passar. Encontrei esse artigo escrito por Paulino Michelazzo quando eu navegava a procura de algo interessante nessa internet recheada de conteúdo dos dias atuais, um texto realmente ótimo e que diz tudo! É extenso, portanto coisa para os apaixonados pelo assunto como eu. Confiram:

A web está com um motor 2.0 zerinho. Mas estão seus desenvolvedores prontos para tanta potência? Conheça dois exemplos diferentes de motorização.

Admiro Tim O’Reilly por vários motivos. Criou uma empresa muito bem conceituada www.oreilly.com, edita ótimos livros e desenvolve um bom trabalho na área de FLOSS. Mas admiro-o ainda mais estando lado a lado com os gênios do marketing tecnológico, Bill Gates e Steve Jobs, para os quais não deve absolutamente nada quando o assunto é criatividade. Dentre suas façanhas para galgar tal posto encontra-se a cunhagem do termo Web 2.0 Wikipedia. Um nome bonito, simples e que ao mesmo tempo nada diz, como a maioria das propagandas dos grandes gênios. A evidência que ele é tão bom quanto seus pares está na capacidade de arrebatar milhares de seguidores em todo o mundo para o nada novo.

Pode pensar o leitor que sou contra a web 2.0. De forma nenhuma. Acho-a bonita, interessante, excitante. Mas sim, sou contra a forma como os fanáticos seguidores desta nova onda tentam pegar o bonde andando querendo sentar na janelinha. Deixando a analogia de lado, me impressiona a busca incessante por informações sobre novas tecnologias da afamada web 2.0 quando o programador ao menos toma cuidado de manter antigos conceitos fundamentais paralelos ao novo aprendizado. Neste momento, o possante motor da web 2.0 se torna um xumbrega 0.2.

Um mau exemplo

Há alguns dias precisei fazer a aquisição de uma passagem aérea partindo de São Paulo para o Oriente Médio. Sendo uma pessoa da web, nada mais lógico que usá-la para tal tarefa. Usando um conceituado site multinacional de viagens que opera no Brasil, consegui a reserva somente após vários telefonemas para o site, gastando tempo e dinheiro que não precisava. Os erros? Muitos. Uma mesma busca com as mesmas variáveis retornava resultados diferentes, datas incorretas, trechos errados e cancelamentos não solicitados. Tudo isso sinalizava para mim um mau código criado por um mau desenvolvedor que no deslumbre da web 2.0 maciçamente usada no site, esqueceu do básico que seria a verificação de queries executadas em uma base de dados, ou seja, acredita este que o novo motorzão de tão moderno, não precisa nem de óleo.

artigo_paulino.jpg

O leitor atento vai achar estranho como podem dois vôos entre as mesmas cidades possuírem uma diferença tão grande de tempo de viagem (10 horas). Poderia ser por alguma escala no meio do caminho, mau tempo ou então vento contrário, mas nenhum destes poréns era correto. De tão estranho, comecei a procurar na Internet se o avião usado pela companhia tinha autonomia para 20 horas seguidas sem reabastecimento e descobri que não existe um único aparelho hoje capaz disso (exceto em condições excepcionais para quebras de recordes). Assim sendo, a conclusão foi óbvia: soma-se ou subtrai-se o número de horas entre a partida e chegada sem levar em conta os fusos horários. Um erro tolo mas que custou-me vários dólares em tempo e ligações, além de alguns milhares de reais da empresa que precisa manter um (ou vários) funcionários ao lado do telefone para sanar problemas com clientes que não podem acreditar no horário de chegada de um vôo para marcar outro pois, a cada momento, uma nova informação é fornecida.

E o motorzão 2.0 da web? Virou um 0.2 no velho e bom telefone.

Um bom exemplo

Mas existem bons exemplos de como a web pode funcionar bem (e muito bem, obrigado) quando mesmo com um motor novo, não são esquecidas as lições aprendidas lá na auto-escola da Internet.

No mesmo período desta passagem, tive que solicitar um visto de entrada no Camboja, pequeno país da Indochina bem conhecido pelas suas paisagens florestais usadas em filmes do Rambo e da bela Lara Croft. Ao contrário do que o leitor preconceituosamente possa imaginar, este país que só conheceu a tranqüilidade civil em 1999 e que atualmente possui somente 44 mil endereços na Internet, mantém um dos melhores sistemas de e-visa do planeta E-visa, deixando para trás nações desenvolvidas de todos os continentes. De forma simples, fácil e objetiva, qualquer viajante (com as exceções de praxe) pode solicitar seu visto e de mais quatro pessoas eletronicamente, recebendo-os em qualquer lugar do mundo no prazo de três dias úteis. Erros e problemas no sistema? Simplesmente nenhum. Um pouco de web 2.0 bem dosada e uma sólida programação por trás do sistema fizeram com que mais de trinta e cinto mil turistas utilizassem a ferramenta desde seu lançamento que permitiu a redução de custos com papéis, funcionários, burocracia e claro, a paciência daqueles que desejam conhecer este interessante país.

Se existe comparativo dentro da Internet, o trabalho do ministério de turismo cambojano é a verdadeira web 2.0: eficiente, simples, prática e, neste caso, turbinadíssima.

A lição de mecânica

Não importa se você está pilotando um site 1.0, 1.3, 1.8 ou 2.0 (e já está chegando a 3.0!). Existem pequenas lições que aprendidas uma vez em qualquer motorização, devem ser usadas sempre. O usuário da web antes de querer cores bonitas, janelinhas saltitantes, efeitos especiais made in DreamWorks deseja informação e mais que isso, informação correta. Não acredita no que digo? Pois veja dois campeões unânimes de ibope, Google e Wikipédia e encontre onde está a web 2.0 multicolorida neles. Não é o show de efeitos que faz um site ser bem visitado, mas sim seu conteúdo bem estruturado e de fácil recuperação. A web 2.0 está errada não em sua conceituação, mas sim na mão daqueles que a programa e que acreditam ser o máximo uma janelinha Ajax aqui e ali. Bonita e bacana, ela perde toda a funcionalidade e finalidade quando o suporte dela é capenga e permite o retorno daquele motor 0.2 a lenha!

Você pode fazer muito pela saúde de seu motor 2.0 (e não ser um exemplo em um artigo como estes) se manter a manutenção básica do mesmo em dia com os seguintes pontos:

  • Atenha-se primeiro a informação e depois em como ela será distribuída. De nada adianta as belas caixinhas Ajax o códigos DOM mirabolantes se a informação não é estruturada ou é simplesmente, uma nuvem de CO2. É preferível um site simples, básico, funcional e com informação relevante do que aquela mega produção entediante. Conteúdo é o que conta (claro que se bem apresentado, melhor ainda);
  • Tome cuidado redobrado com fidelidade da informação que está distribuindo. Um pequeno erro em um zero pode custar uma retífica completa ou ainda a perda total do seu motor (inclusive de seu emprego). Faça verificações dentro e fora do sistema com o intuito de encontrar erros na programação e sane-os o mais breve possível. A web 2.0 aceita o conceito de ajuda do usuário para encontrar falhas e erros mas não abuse. Usuários não são seus beta-testers (como algumas empresas adoram fazer) mas sim parceiros.
  • Aproveite-se daquilo que seus usuários mais possuem: senso crítico. Quando um usuário navega de um lado para outro num site (facilmente verificável com um código de log atrás do sistema), alguma coisa errada está ocorrendo. Será que ele está encontrando a informação que precisa ou será que está pulando aqui e ali tentando achá-la? Se você possui formulários de contato para críticas e sugestões, use-o efetivamente. Críticas são sempre bem-vindas e muito úteis quando se deseja melhorar o que existe. Responda as críticas tanto com a correção/adaptação quanto para o usuário que a fez;

Finalizando

A web 2.0 e a novíssima 3.0 podem e devem ser usadas pelos desenvolvedores. Mas como já cantado por Jorge Benjor, prudência e canja de galinha não faz mal à ninguém. Deixe de lado os efeitos pirotécnicos (a menos que esteja fazendo o site do concurso mundial de fogos de artifício Festival de fogos de artifício) e atenha-se onde realmente é necessário usar tal conceito. Interações com o usuário são muito importantes mas ainda mais importante é a resposta dada. A frustração do usuário é muito maior quando a resposta obtida à sua necessidade é pífia do que aquela encontrada na dificuldade de obtenção da resposta.

Não esqueça que aquelas regrinhas básicas aprendidas nos gols, unos e até fuscas são usadas até para dirigir uma Lamborghini. E na web a analogia é a mesma, o básico é básico mas nunca deve ser desperdiçado. “

Perfeito!

Tratamento com o cliente

Um fato que me ocorreu este fim de semana, me fez querer falar de comportamento do mundo corporativo, mais especificamente o tratamento com o cliente.

Eu sou obsecado por ser bem tratado. Se eu fosse dono de algum estabelecimento comercial, seja de que tamanho ele fosse, eu iria tratar meus clientes como reis, porque isto fará ele retornar, usufruir dos meus serviços/produtos com lealdade e consequentemente me fazer faturar $. Cliente satisfeito, empresa crescendo.

E foi isso que a Pizzaria Reis Magos fez após receber uma reclamação que fiz. Eu havia pedido uma pizza no Sábado que veio extremamente pobre de recheio e com massa queimada. Lamentável falta de carinho no preparo pra um preço um tanto alto. No Domingo, recebi uma ligação da pizzaria, dizendo que lamentavam a minha reclamação, e queria me dar uma cortesia de desculpas pelo ocorrido, alegando querer preservar a minha lealdade (que já se arrasta por anos). Ótimo papel. Parabéns. Me ganhou.

Quando um cliente reclama, ele está dando ao estabelecimento uma chance de se redimir de um atendimento ou produto falho. Quando a empresa responde, e ainda dá cortesia, ela diz ao cliente: nós erramos, vimos sua insatisfação, nos preocupamos com você, somos uma empresa de qualidade.

Ganhei uma pizza grande do sabor que eu bem quis, mais um refrigerante, e a vontade de de comprar na Reis Magos sempre.

Múltiplos IE’s

Sim, é possível rodar IE6 (e 3, 4 e 5, ainda por cima!) e IE7 numa mesma máquina, sem mágicas perigosas nem pesadas máquinas virtuais! Maravilhas do mundo moderno para facilitar a vida!

O programa que descobri hoje, quando estava afim de realizar meus testes no IE6 e 7, permite instalar as versões passadas do navegador com liberdade e rapidez. Perfeito!

O software se chama Multiple IE, e foi fabricado e fornecido pela Tredosoft

setup1.png

Tela de instalação, com opção de instalara as versões que se desejar.

Multiple IE Baixar o “Multiple IE” (.exe / 10.3 MB)

Próxima Página »