10 Dicas JavaScript e Boas Práticas

10 comments

Posted on 5th November 2009 by Igor Escobar in Curiosidades | JavaScript | Web Standards

, ,

Recentemente alguns site e blogs vem divulgando listas de dicas para se codificar em javascript. Apresentando melhores práticas de desenvolvimento e muitas dicas bacanas, Pensei que este seria um bom tópico para se extender e compartilhar com vocês. Neste post estou reunindo as minhas top 10 dicas e boas práticas para codificação javascript.

Espero que gostem.

1. Use o atributo defer para indicar o uso scripts externos no IE

O propósito do defer é avisar o script que está sendo requisitado externamente para esperar  até que a página seja carregada ou o DOM esteja preparado. O mesmo pode ser realizado através de bons métodos não-obstrutivos via javascript, que usualmente inclui códigos que previne a execução de scripts antes que o DOM seja carregado por completo.

A vantagem do defer ocorre quando utilizamos o Internet Explorer, tendo em vista que é único browser que suporta o atributo defer. Então, se você precisa de um rápido script que rode únicamente e exclusivamente no Internet Explorer, e você não quer que ele execute antes que o DOM esteja preparado, então simplesmente adicione defer="defer" no sua tag <script> e ela irá rapidamente tratar o seu problema. Corrigir a transparência de arquivos PNG no IE6 é uma das possibilídades práticas do uso do defer.

(Edit: O atributo defer deve ser usado quando escondemos um script de outros browsers com o uso dos comentários condicionais  – conditional comment – que afete somente os navegadores da Microsoft – de outra maneira o script vai rodar normalmente em outros browsers.)

2. Use o CData Section para previnir erros de validação XHTML Strict

Muitas vezes seus scripts vão residir em arquivos externos e chamados dentro da tag <script> dentro do  <head> do documento, ou então antes do fechamento da tag </body>.

Mas este documento pode estar eventualmente usado em um local que junto dele existem marcações HTML, como abaixo:

<div>
<p>
<script type="text/javascript">
var my_variable = 100;
if (my_variable < 50) {
// alguma coisa aqui...
}
</script>
</p>
</div>

Você pode notar que no código acima, dentro do if, existe o símbolo <  que representa “menos”, que é parte da sintax, corréto? Este símbolo causa um erro de validação. O validador interpreta ele como um inicio de uma marcação ou uma tag HTML que não foi fechada, a não ser que você encapsule o seu código com o CData, assim:

<div>
<p>
<script type="text/javascript">
//<![CDATA[
var my_variable = 100;
if (my_variable < 50) {
// alguma coisa aqui...
}
//]]>
</script>
</p>
</div>

3. Evite palavras-chaves reservadas do JavaScript quando estiver criando funções e identificadores

Muitas palavras são reservadas no javascript, então você deve evitá-las quando forem criar variáveis ou outros idenficadores. A lista completa de palavras-chaves do javascript segue abaixo:

break
case
catch
continue
default
delete
do
else
finally
for
function
if
in
instanceof
new
return
switch
this
throw
try
typeof
var
void
while
with

4. Evite palavras reservadas do JavaScript quando estiver criando funções e identificadores

Que estão também algumas palavras reservadas, que não estão necessariamente sendo usadas pela linguagem mas são reservadas para o uso futuro. São estas:

abstract
boolean
byte
char
class
const
debugger
double
enum
export
extends
final
float
goto
implements
import
int
interface
long
native
package
private
protected
public
short
static
super
synchronized
throws
transient
volatile

5. Não mude o tipo das variaveis depois da declaração inicial.

No javascript, tecnicamente, isso é perfeitamente legal:

var my_variable = "Esta é uma string";
my_variable = 50;

Depois que a variável é inicialmente declarada como string na linha 1, na linha 2 o seu valor é mudado e o seu tipo também. Esta não é uma boa prática e deve ser evitada.

6. Não use variáveis globais.

Para previnir possíveis conflitos, em 99% dos casos, use o “var” no início quando estivermos declarando uma variável e seu valor. Isso faz com que a sua variável exista somente no escopo da função e não fora dela, ou seja, toda variável criada pelo var, só poderá ser acessível dentro do escopo no qual ela foi declarada e não mais fora dele. Então, se acontecer de você utilizar duas variáveis com o mesmo valor em lugares diferentes do seu script, nenhum conflito ocorrerá.

7. Javascript é Case-Sensitive.

Lembre-se do que vem a seguir: No código que segue temos duas variáveis que estão armazenando seus valores em 2 lugares diferentes na memória, e não um só, como alguns podem pensar. São duas variáveis completamente diferentes alocadas em lugares diferentes na memória:

var myVariable = "data";
var myvariable = "more data";

8. Use o switch para lidar com multiplas condições

Não faça isso:

if (example_variable == "cyan") {
// faça algo aqui...
} else if (example_variable == "magenta") {
// faça algo aqui...
} else if (example_variable == "yellow") {
// faça algo aqui...
} else if (example_variable == "black") {
// faça algo aqui...
} else {
// faça algo aqui...
}

Faça isso:

switch (example_variable) {
case "cyan":
// faça algo aqui...
break;
case "magenta":
// faça algo aqui...
break;
case "yellow":
// faça algo aqui...
break;
case "black":
// faça algo aqui...
break;
default:
// faça algo aqui...
break;
}

O segundo bloco de código faz exatamente a mesma coisa que o primeiro – mas o segundo é limpo, fácil de ler, fácil de dar manutenção e modificar.

9. Use o try-catch para previnir que erros sejam expostos para os usuários

Encapsulando todo o seu código no try-catch, você pode evitar que o usuário final nunca veja um feio erro de javascript exposto na tela. Assim:

try {
funcaoQueNaoExiste();
} catch (error) {
document.write("Um erro ocorreu.")
}

No código acima, eu tentei chamar uma função que não existe, para forçar um erro. O navegador não vai exibir o típico erro “not an object” ou “object expected”, mas ao invés disso, vai exibir um erro mais customizável que eu incluí dentro do meu “catch”. Você pode também deixar o catch vázio para nada ser mostrado para o usuário, ou você pode criar uma função que seja chamada dentro do catch que faça o tratamento deste erro para propósitos de debug etc.

Mantenha na sua cabeça que isso pode esconder erros do desenvolvedor também, então uma boa decumentação do código e comentários podem ser úteis neste ponto.

10. Faça comentários multi-linhas legíveis, mas simples

Em javascript, você pode comentar uma linha de código colocando um // no início da linha. Você também pode criar um comentário em bloco como mostra a seguir: /* [comentário aqui ] */. Algumas vezes você precisa incluir um comentário longo, um comentário de mais de uma linha. Um bom método para se utilizar que não tenha uma visual esmagador, mas é fácil de identificar o código é esse a seguir:

/*
* Este é um comentário multi-linha...
* bla bla bla...
* bla bla bla...
* bla bla bla...
* bla bla bla...
*/

E é isso :-)

Este artigo é uma adaptação e tradução do texto: 10 JavaScript Quick Tips and Best Practices

Legibilidade com with() statement no javascript

1 comment

Posted on 27th October 2009 by Igor Escobar in Curiosidades | JavaScript | Utilidades

,

Hora de falar de Javascript. Hoje vou falar sobre um recurso que o Javascript oferece para diminuir as referências aos objetos. Utilizando o with() você consegue deixar o seu código mais legível e prático.

Veja um exemplo:

Uma implementação comum, sem o with()

function foo(){
        var x = document.forms[0].elements[0].value;
        var y = document.forms[0].elements[1].value;
        var z = document.forms[0].elements[2].options[document.forms[0].elements[2].selectedIndex].text;
}

A mesma implementação, COM o with()

function foo(){
        with(document.forms[0]){
                var x = elements[0].value;
                var y = elements[1].value;
                with(elements[2]){
                        var z = options[selectedIndex].text
                }
        }
}

Viram como o código ficou menor e mais legível? Não não precisamos ficar repetindo instruções para se referenciar a um determinado objeto.

Gostaram? Ok, mais um exemplo então:

var a, x, y;
var r = 10;
with (Math) {
   a = PI * r * r;
   x = r * cos(PI);
   y = r * sin(PI/2);
}

Na forma tradicional teríamos que ficar nos referenciando ao objeto Math do javascript: Math.cos(PI) ou Math.sin(PI/2).

Atenção

O uso do with() pode ser nocivo. Como também o eval(), e também como o ajax pode ser nocivo e se pensar no mesmo raciocínio, muitos outros recursos disponíveis na linguagem podem ser nocivos se não forem aplicadas de forma correta. Caso for de interesse, leia mais em: http://yuiblog.com/blog/2006/04/11/with-statement-considered-harmful/

É isso aí, um abraço a todos.

Como debugar aplicações AJAX/PHP com FirePHP

0 comments

Posted on 27th October 2009 by Igor Escobar in Curiosidades | Internet | JavaScript | PHP | Utilidades

, , ,

Tradicionalmente, existem duas maneiras de se debugar uma aplicação server-side: você pode utilizar qualquer uma Integrated Development Environment (IDE) com algum build-in debugger ou registrar seus processos de depuração exibindo no próprio browser.

Neste artigo veremos uma forma elegante, simples e mais sustentável de se debuggar aplicações Ajax via browser (especificamente o Mozilla Firefox). Você vai aprender a turbinar o seu Firefox unindo o Firebug e o FirePHP, tornando-o uma elegante ferramenta de depuração.

Introdução

Quando técnicas como Ajax se tornam populares nos ambientes de desenvolvimento, é comum que junto surjam também novos desafios, por exemplo: como podemos debuggar requisições e respostas Ajax de forma eficiente para aplicações complexas?

Se utilizar um debugger foi difícil o suficiente com um modelo RESTful, interceptar uma requisição ajax específica é um saco e um pouco mais difícil. Geralmente o dumping de logs e informações destas transações devem ser feitas via JSON ou XML.

É aqui que o FirePHP ajuda, permitindo que você registre suas mensagens de debug dentro do console do Firebug. O FirePHP não faz uma bagunça no seu código (e não exige que você modifique nada para pegar erros). As mensagens que você imprime são enviadas para o browser através de HTTP response headers, ou seja, as suas mensagens de debug não vão “quebrar” as respostas das suas requisições com mensagens e erros de debug e fazendo parar de funcionar toda a sua aplicação. A resposta vem limpa e todo o processo de depuração vem catalogado no console do Firebug. Isso faz com que o FirePHP não seja só o aplicativo ideal para você debugar suas aplicações PHP, mas também o seu PHP codebase inteiro.

O que é o FirePHP?

O FirePHP é um add-on para um add-on (ahn?): ele estende o popular Firebug. O FirePHP é grátis e fácil de instalar através da seção Mozilla Add-Ons no site oficial da Mozilla. O site oficial do FirePHP pode ser encontrado neste endereço: www.firephp.org,e Christoph Dorn é a pessoa responsável pela criação do FirePHP.

O que eu preciso para iniciar?

Como você deve ter adivinhado, são necessáriastrês coisas para fazer com que o FirePHP funcione, são elas:

  1. Firefox
  2. Firebug
  3. FirePHP

Se você não tem um ou todas as aplicações listadas acima, você pode clicar no link respectivo de cada uma delas e receber instruções de como instalá-las de forma adequada.

Se você está começando agora a estudar um pouco mais sobre web development, o FirePHP pode ser um pouco “manhoso” no começo, mas o projeto é acompanhado por uma boa documentação e você pode aprender facilmente.

Instanciando a API OO

No seu script, você pode utilizar o bloco de código abaixo para instanciar o FirePHP ($firephp):

require_once('FirePHPCore/FirePHP.class.PHP');
$firephp = FirePHP::getInstance(true);
$firephp -> [classmethod];

Instanciando a API OO com os métodos estáticos

Esse é o formato como você deve chamar os métodos do FirePHP:

require_once('FirePHPCore/fb.PHP');
FB::[nameofmethod];

A API Procedural

E aqui está como se utiliza a API procedural do FirePHP:

require_once('FirePHPCore/fb.PHP');
fb($var);
fb($var, 'Label');
fb($var, FirePHP::[nameofmethod]);

Nós não vamos entrar em detalhes com relação aos benefícios em utilizar cada uma das APIs, cabe a você decidir a melhor forma para VOCÊ. Em outras palavras, eu não quero iniciar uma guerra para decidir qual é a melhor forma, procedural x orientada a objetos. It’s up to you.

Gravando mensagens no Firebug Console

Agora vamos detalhar as formas como você pode lidar com o Console do Firebug.

Exemplos básicos de log de mensagens

Se você está debugando um bug, o exemplo a seguir pode ser útil para você:

Fb::log("log message");

Isso vai imprimir a mensagem que você passou como parâmetro dentro do console do Firebug:

Fb::log($array, "dumping an array");

Passando um array (chega de print_r nos seus scripts) e mostrando o seu conteúdo. O exemplo acima vai mostrar a seguinte saída no seu console:

Dica: Quando você passar o mouse em cima das mensagens que foram logadas no seu console, uma janela aparece com todas as variáveis logadas, tudo tabulado de forma legível para desenvolvedor. Legal, né?

Registrando uma mensagem de Informação

Aqui vai uma forma de você exibir mensagens informativas no console:

Fb::info("information");

E o seu console exibirá assim:

Mensagens de Aviso

Segue aqui uma forma de você gravar mensagens de aviso:

Fb::warn("this is a warning");

Mensagens de Erro

Segue aqui uma forma de você gravar mensagens de Erro:

Fb::warn("error message");

Habilitando/Desabilitando o registro de logs no Console

Quando o seu site vai para o ar é muito importante que você desabilite o FirePHP para evitar que a pessoa errada veja a informação certa na hora errada (rs).

FB::setEnabled(false);

O bom de tudo isso é que você pode manter todo o código que você escreveu para debugar o seu código dentro do código, sem que você precise tirá-lo ou comentá-lo quando for para o ar. Se a sua aplicação possui um arquivo de configuração, é interessante criar uma variável dentro dele que através da qual você consiga habilitar e desabilitar o FirePHP.

Conclusão

Antes de tudo, aqui vai uma imagem com todas as mensagens possíveis de se utilizar no FirePHP:

Neste artigo, cobrimos coisas bem básicas de se fazer utilizando o FirePHP para ajudar você a debugar e ganhar informações sobre as suas requisições nas suas aplicações Ajax/PHP de forma fácil e sustentável no seu próprio browser. Eu espero que estes resultados tenham convencido você a explorar outras alternativas para debugar seu código fora da “old-school” techniques (echo’s print’s etc.). Usar o FirePHP é fácil e conveniente, dá a você muito mais opções e dados para propósitos de debug.

No futuro, pretendo cobrir recursos mais complexos do FirePHP para fazer desta simples ferramenta de debug uma ferramenta poderosa, completa e robusta.

[]’s

Trabalhando com Mascaras em Java Script

0 comments

Posted on 26th October 2009 by Igor Escobar in JavaScript | Utilidades

, , ,

Recentemente, tive problemas com algumas funções já disponíveis na internet para poder facilitar a aplicação de mascaras em campos do tipo string.

Por exemplo: o cliente precisava que no momento que eu fosse digitando a data no formato (00/00/000) o sistema automaticamente, iria colocando as barras “/” para facilitar o preenchimento do campo.

Baseando-se neste ,desenvolvi uma função em JavaScript para aplicar qualquer tipo de mascara que você precisar basta informar o template da mesma:

/**
 * Formata o Campo de acordo com a mascara informada.
 * Ex de uso: onkeyup=&amp;quot;AplicaMascara('00:00:00', this);&amp;quot;.
 * @author Igor Escobar (blog@igorescobar.com)
 * @param Mascara String que possui a mascara de formatação do campo.
 * @param elemento Campo que será formatado de acordo com a mascara, voce pode informar o id direto ou o próprio elemento usando o this.
 * @returns {void}
 */
function AplicaMascara(Mascara, elemento){

	// Seta o elemento
	var elemento = (elemento) ? elemento : document.getElementById(elemento);
	if(!elemento) return false;

	// Método que busca um determinado caractere ou string dentro de uma Array
	function in_array( oque, onde ){
			for(var i = 0 ; i &amp;lt; onde.length; i++){
			if(oque == onde[i]){
				return true;
			}
		}
		return false;
	}
	// Informa o array com todos os caracteres que podem ser considerados caracteres de mascara
	var SpecialChars = [':', '-', '.', '(',')', '/', ',', '_'];
	var oValue = elemento.value;
	var novo_valor = '';
	for( i = 0 ; i &amp;lt; oValue.length; i++){
		//Recebe o caractere de mascara atual
		var nowMask = Mascara.charAt(i);
		//Recebe o caractere do campo atual
		var nowLetter = oValue.charAt(i);
		//Aplica a masca
		if(in_array(nowMask, SpecialChars) == true &amp;amp;&amp;amp; nowLetter != nowMask){
			novo_valor +=  nowMask + '' + nowLetter;
		} else {
			novo_valor += nowLetter;
		}
		// Remove regras duplicadas
		var DuplicatedMasks = nowMask+''+nowMask;
		while (novo_valor.indexOf(DuplicatedMasks) &amp;gt;= 0) {
       		novo_valor = novo_valor.replace(DuplicatedMasks, nowMask);
    	}
	}
	// Retorna o valor do elemento com seu novo valor
	elemento.value = novo_valor;

}

Metodos de uso

Mascara para campos do tipo Data:

&amp;lt;input name=&amp;quot;data&amp;quot; maxlength=&amp;quot;10&amp;quot; onkeyup=&amp;quot;AplicaMascara('XX/XX/XXXX', this);&amp;quot; type=&amp;quot;text&amp;quot; /&amp;gt;[html]

&amp;lt;strong&amp;gt; Mascara para campos do tipo Hora:&amp;lt;/strong&amp;gt;
[html]&amp;lt;input name=&amp;quot;hora&amp;quot; maxlength=&amp;quot;8&amp;quot; onkeyup=&amp;quot;AplicaMascara('XX:XX:XX', this);&amp;quot; type=&amp;quot;text&amp;quot; /&amp;gt; 

Mascara para campos do tipo CEP:

&amp;lt;input name=&amp;quot;cep&amp;quot; onkeyup=&amp;quot;AplicaMascara('XXXX-XXX', this);&amp;quot; type=&amp;quot;text&amp;quot; /&amp;gt;  

Mascara para campos do tipo TELEFONE:

&amp;lt;input name=&amp;quot;tel&amp;quot; onkeyup=&amp;quot;AplicaMascara('(XX)XXXX-XXXX', this);&amp;quot; type=&amp;quot;text&amp;quot; /&amp;gt;  

Mascara para campos do tipo CPF:

&amp;lt;input name=&amp;quot;cpf&amp;quot; onkeyup=&amp;quot;AplicaMascara('XXX.XXX.XXX-XX', this);&amp;quot; type=&amp;quot;text&amp;quot; /&amp;gt;  

E por ai vai, basta seguir os exemplos e ser feliz ;) Espero ter contribuído!
[]’s

Iniciando com o JSON

0 comments

Posted on 26th October 2009 by Igor Escobar in JavaScript | Utilidades

Alguns dias atrás, recebi um e-mail de um leitor que acabou de iniciar em um novo emprego e seus supervisores lançaram a seguinte necessidade:

Na nossa empresa temos uma base de dados que ao fazer a consulta X, irá vai te retornar um JSON, ou seja, um valor que por sua notação é denominada JSON.

JSON quer dizer JavaScript Objection Notation, nada mais é do que um conjunto de chaves e valores, que podem ser interpretadas por qualquer linguagem. Toda essa estrutura, foi criada apartir do padrão ECMA-262 que por sua vez possui convenções muito semelhante às linguagens como C, C#, C++, Java, JavaScript, Perl, Python e várias outras. Com estas características o JSON se torna o formato ideal para troca de informações independente da linguagem.

Um estrutura JSON pode ser identificada por duas estruturas de dados:

Uma coleção de pares nome/valor. Em várias linguagens, isto é caracterizado como um object, record, struct, dicionário, hash table, keyed list, ou arrays associativas.

json-object

Ex:

var MeuBlog = {
nome:"Igor Escobar // blog",
ano:2008,
assunto:"Tecnologia",
getTitle:function(){
return ('TituloBlog:' + nome);
}
}

Uma lista ordenada de valores. Na maioria das linguagens, isto é caracterizado como uma array, vetor, lista ou sequência.
json-array

Ex:

["Igor Escobar // Blog", 2008, 0]

Viu só? é super simples se trabalhar com o JSON. Não se preocupe ao aplicar estas regras na prática, a teoria é valida para você entender como o JSON gera estes dados, no seu caso (e de muitos), você precisa decodificar um Array ou um Objecto JSON para a sua linguagem nativa.

Vou utilizar a linguagem PHP, como exemplo, para você entender como funciona e aonde entra o JSON nesta história toda.

json-na-pratica

  • Primeiro o PHP recebe os dados e envia estes dados para o JSON seja ele um Array ou um Objeto.
  • Depois o JSON codifica os dados e retorna este valor (uma inofenciva string) para uma variavel PHP que por sua vez é responsável por enviar esta váriavel para o banco com os dados codificados.

JSON na Prática

Estou disponibilizando aqui o JSON em:

Mais caso você precise da implementação JSON em outras linguagens basta ir até o site do projeto.
Na prática você só vai utilizar duas funções do JSON:

$JSON = new JSON();
// JSON - Encode
$dbValue = $JSON->;encode($objetoPHP); // Codifica um objeto PHP -> JSON
// JSON - Decode
$dbValue = $JSON->decode($dbObject->campoComJson); // Decodifica um objeto JSON -> PHP Object

E é exatamente isso que no caso do nosso “amigo do e-mail” precisa fazer. Você precisa receber este valor na estrutura de dados JSON e decodifica-lo para que sua linguagem nativa o entenda e interprete.

Possível problema

Se você estiver utilizando JSON -> JavaScript e este array/objeto JSON retornar uma estring é possivel que você tenha problemas com caracteres especiais e na hora de exibir apareça uns caracteres como (+%…etc).

Para corrigir este problema eu implemento em minhas funções javascript a seguinte solução:

function urlencode(str) {
str = escape(str);
str = str.replace('+', '%2B');
str = str.replace('%20', '+');
str = str.replace('*', '%2A');
str = str.replace('/', '%2F');
str = str.replace('@', '%40');
return str;
}

function urldecode(str) {
str = str.replace(/\+/g, ' ');
str = unescape(str);
return str;
}

E é isso caro “amigo do e-mail”, conte-nos depois como foi a sua experiência iniciando com o uso do JSON e espero que este ajude todas as outras pessoas que forem iniciar com o mesmo.

Vale lembrar, eu só escrevi este texto por que o nosso amigo aparentemente precisava MUITO, pela iniciação no novo trabalho e claro o seu problema com certeza bate com o de muitas outras pessoas, principalmente, com o objetivo deste blog que é em primeiro lugar, reunir soluções de desenvolvimento em um único lugar.

Nota: Apartir do PHP 5.2 o JSON já se encontra nativo na linguagem através dos métodos json_encode(); e json_decode();

Espero ter contribuído!
[]’s

MooTools 1.2 Image Protector: dwProtector

0 comments

Posted on 26th October 2009 by Igor Escobar in JavaScript | MooTools | Utilidades

, , ,

Hoje venho apresentar para vocês uma biblioteca que achei bastante interessante, escrita para o Framework javascript MooTools, chamada Image Protector, é uma grande novidade e talvez um grande marco para os designers que se descabelam para poder proteger suas imagens.

Esta biblioteca foi criada justamente para os designers ou artistas, que odeiam ver seus trabalhos copiados e ripados em segundos após dias, semanas, anos de trabalho dedicado, e o pior, as vezes até roubo de autoria.

O MooTools 1.2 Image Protector previne:

  • right-click “Save Image As”.
  • Arrastar qualquer imagem para o desktop.
  • right-click “Save Background As”.
  • right-click “View Background Image”

Segue abaixo tudo o que você precisa:

MooTools 1.2 Image Protector JavaScript Class

//protector class
var dwProtector = new Class({

	//implements
	Implements: [Options],

	//options
	options: {
		image: 'blank.gif',
		elements: $$('img'),
		zIndex: 10
	},

	//initialization
	initialize: function(options) {
		//set options
		this.setOptions(options);

		//make it happen
		this.protect();
	},

	//a method that does whatever you want
	protect: function() {
		//for each image that needs be protected...
		this.options.elements.each(function(el) {
			//get the element's position, width, and height
			var size = el.getCoordinates();
			//create the protector
			var p = new Element('img', {
				src: this.options.image,
				width: size.width,
				height: size.height,
				styles: {
					'z-index': this.options.zIndex,
					'left': size.left + 'px',
					'top': size.top + 'px',
					'position': 'absolute'
				}
			}).inject($(document.body),'top');
		},this);

	}
});

Exemplo de uso

window.addEvent('domready', function() {
	var protector = new dwProtector({
		image: '/blank.gif',
		elements: $$('.protect')
	});
});

Caso você queira testar o MooTools 1.2 Image Protector, basta acessar.

[]’s
Igor.

JavaScript não obstrutivo com JQuery

0 comments

Posted on 26th October 2009 by Igor Escobar in JavaScript | jQuery

,

Apenas compartilhando com vocês um slide feito por Simon Willison no dia 6 de maio.

Unobtrusive JavaScript with jQuery

Aumente as chances do seu projeto/site dar certo

0 comments

Posted on 26th October 2009 by Igor Escobar in Blogosfera | Geral | Internet | JavaScript | Otimização | SEO | Semântica

,

O trabalho de concepção e amadurecimento de uma idéia é uma tarefa complicada. Todos os dias converso com profissionais do ramo de Internet e falamos sobre muitas idéias. Todas envolvem dinheiro, seja de forma direta ou indireta.

O que é muito comum ser dito nesses grupos é sobre como ganhar dinheiro através de programas de afiliados como Google AdSense, Hotwords, Text Link Adst, UOL Links Patrocinados etc.

Hoje eu não vou falar sobre como otimizar seus ganhos nestes programas, pois acredito que na própria internet, possuem muitos e muitos artigos falando sobre isso, não vale a pena ficar “duplicando” o que é dito por ai tão incansavelmente.

Cuidado com o dinheiro

Quando vamos elaborar uma idéia é muito comum pensarmos em dinheiro, é comum, e algo muito maligno para o futuro e sobrevivência do seu projeto. Devemos pensar, claro, porém, pensar só nisso, vai acabar te cegando para outros pontos importantes que vão além do que só encher o bolso de dinheiro.

Deixe o fator “ganhar dinheiro” para último plano, amadureça a sua idéia todos os dias, anote tudo, não deixe nada escapar, e em último plano, pense em como trazer um retorno para você utilizando tudo o que você planejou de forma sadia, ou seja, de forma que o seu sistema, o seu planejamento, irá te sustentar a longo prazo, sustentabilidade.

Dando forma a idéia

Devo ressaltar, que não é meu objetivo ensina-lo como “documentar” a sua idéia, meu objetivo é te ajudar COMO você deve pensar para que o seu projeto dê certo ou ao menos aumente as chances dele dar certo.

Certifique-se de que você, com sua experiência, consiga garantir longevidade ao seu projeto, o sucesso de um projeto, esta diretamente ligado a sua continuidade e não apenas o seu começo, ser hype esta completamente fora de questão. Não adianta começar algo e não saber como dar continuidade ao que começou.

Não seja hype, seja original.

Ser hype tem seus próis e contras, quem acompanha a blogosfera já viu o que tem de blogs por ai que vivem de hypes para poder ganhar dinheiro a curto prazo. Para quem não sabe o que é hype, vou te dar um exemplo:  Cicarelli, já sabe até do que eu estou falando né? Agora tente imaginar a quantidade de dinheiro que os blogueiros e sites que vivem de hypes ganharam com este acontecimento? Postando os videos, fotos e fakes em seus sites? Então, isso é uma hype, porém, o objetivo é manter uma renda, tirarmos da abstração uma idéia e torna-la sustentável.

A volta é o mais importante.

Esta talvez seja a parte mais importante no processo de amadurecimento de uma idéia, é muito comum, ver uma pessoa entusiasmada falando de um projeto, que você sabe que é legal, porém,  o idealizador do projeto simplesmente se céga e só consegue pensar em como o projeto vai ser legal por que tem isso e aquilo e zilhões de coisas, coisas que na prática não fazem diferença.

Se concentrar no que é obvio não é a saída, centre-se em criar funcionalidades ao seu projeto que atribuíram valor ao seu projeto, esta são as melhores características de um projeto de sucesso, o mais importante não é atrair visitas, o mais importante é criar recursos e funcionalidades que farão com que o usuário volte. Esta é a grande sacada, visitas é consequência, a volta do visitante garante a sua sustentabilidade e o sucesso perpétuo (até que alguém lance algo que o substitua) do seu projeto.

Acredito que se a sua linha de raciocínio caminhar por este lado, isso só irá aumentar MUITO as chances do seu projeto dar certo. Espero ter contribuído com seu projeto, e quem sabe, sua vida, sua profissão.

[]’s
Igor.