quarta-feira, 28 de novembro de 2012

Uso do setTimeout em javascript - II

Já vimos o uso de um setTimeout em páginas HTML, com um só temporizador, com os conceitos associados. Agora vamos ver a sincronização de dois temporizadores.

Veja a listagem a seguir:


<html>
<head>
<style>
P.pg1 {position:absolute; left: 0; top: 100; border: solid 1 red; background-color: salmon; padding: 6px; width: 100px;}
P.pg2 {position:absolute; left: 900; top: 600; border: solid 1 red; background-color: yellow; padding: 6px; width: 100px;}
</style>
<script type="text/javascript" src="jquery-1.6.4.js"></script>
<script type="text/javascript">
var tempo1 = 100;
var tempo2 = 600;
var th1, th2;
function movePg1(){
tempo1--;
if( tempo1 > 0 ){
$("#p01").css('top',tempo1);
th1 = setTimeout("movePg1()",300);
}
}
function movePg2(){
tempo2--;
if( tempo2 > 0 ){
$("#p02").css('top',tempo2);
th2 = setTimeout("movePg2()",300);
}
}
$(document).ready(function(){
th1 = setTimeout("movePg1()",300);
th2 = setTimeout("movePg2()",300);
});
</script>
</head>
<body>
<p id="p01" class="pg1">Eu parágrafo 1.</p>
<p id="p02" class="pg2">Eu parágrafo 2.</p>
</body>
</html>

É muito importante ter UMA FUNÇÃO PARA CADA TIMEOUT, para não estourar a pilha de armazenamento de retornos. Já fizemos tentativas para fazer um gerenciador único de timeouts, e a pilha estourou.

Os settimeouts são tratados em separado para cada objeto.

O efeito produzido é o seguinte:


Cada DIV segue seu controlador de timeout independente do outro.


segunda-feira, 26 de novembro de 2012

Uso do setTimeout em javascript - I

Comandos de sincronização de tempo são difíceis de se compreender. E com os péssimos exemplos da Internet, a coisa piora. Ninguém explica direito como devem ser usados. Em jQuery o método animate facilita muito as coisas. Escrevemos este post para quem quer ENTENDER REALMENTE o que vem a ser o timeout.

O melhor termo em português para "Timeout" é "O TEMPO ESTOUROU".

Veja o código a seguir:


<html>
<head>
<style>
P.pg1 {
position:absolute;
left: 0; top: 100;
border: solid 1 red;
background-color: salmon;
padding: 6px; 
width: 100px;
}
</style>
<script type="text/javascript" src="jquery-1.6.4.js"></script>
<script type="text/javascript">
var tempo = 100;
function movePg(){
tempo--;
if( tempo > 0 ){
$("#p01").css('top',tempo);
setTimeout("movePg()",300);
}
}
$(document).ready(function(){
setTimeout("movePg()",300);
});
</script>
</head>
<body>
<p id="p01" class="pg1">Eu sou um parágrafo.</p>
</body>
</html>

Repare que A CADA CHAMADA DA FUNÇÃO QUE TRATA O TIMEOUT, é preciso REPETIR A CHAMADA à função. Ou seja, a cada ocorrência de TIMEOUT, a função é chamada UMA SÓ VEZ, por isto é preciso CHAMÁ-LA NOVAMENTE.

Em outras palavras: setTimeout NÃO ESTABELECE UM LOOP de chamada.

Os exemplos e explicações que temos achado na Internet não deixam isto claro.

Este exemplo faz o seguinte:


A cada chamada da função movePg, provocada pela instrução setTimeout, o estilo "top" é alterado.




sexta-feira, 23 de novembro de 2012

jQuery animate - III - Animação em Paralelo



Lembre-se de:

  • Copiar uma biblioteca jquery para o diretório deste HTML;
  • Colocar o nome correto da biblioteca jquery no HTML.


<html>
<head>
<style>
P.pg1 {position:absolute; left: 0; top: 0; border: solid 1 gold; background-color: yellow; padding: 6px; width: 100px;}
P.pg2 {position:absolute; left: 900; top: 600; border: solid 1 red; background-color: salmon; padding: 6px; width: 100px;}
</style>
<script type="text/javascript" src="jquery-1.6.4.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#p01").animate( { left:500, top: 200 },5000);
$("#p02").animate( { left:500, top: 200 },5000);
});
</script>
</head>
<body>
<p id="p01" class="pg1">Eu sou um parágrafo.</p>
                <p id="p02" class="pg2">Eu sou dois parágrafo.</p>
</body>
</html>

jQuery animate - II - Posição Inicial


Lembre-se de:

  • Copiar uma biblioteca jquery para o diretório deste HTML;
  • Colocar o nome correto da biblioteca jquery no HTML.


Neste exemplo, o parágrafo esta inicialmente em uma posição determinada da tela, e não no último lugar disponível para ele, de acordo com as tags já colocadas.

<html>
<head>
<style>
P.pg1 {position:absolute; left: 900; top: 600; border: solid 1 red; background-color: salmon; padding: 6px; width: 100px;}
</style>
<script type="text/javascript" src="jquery-1.6.4.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#p01").animate( { left:500, top: 200 },5000);
});
</script>
</head>
<body>
<p id="p01" class="pg1">Eu sou um parágrafo.</p>
</body>
</html>

jQuery Animate - I

Lembre-se de:


  • Copiar uma biblioteca jquery para o diretório deste HTML;
  • Colocar o nome correto da biblioteca jquery no HTML.



<html>
<head>
<style>
P.pg1 {position:absolute; border: solid 1 red; background-color: salmon; padding: 6px; width: 100px;}
</style>
<script type="text/javascript" src="jquery-1.6.4.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#p01").animate( { left:500, top: 200 },5000);
});
</script>
</head>
<body>
<p id="p01" class="pg1">Eu sou um parágrafo.</p>
</body>
</html>

terça-feira, 20 de novembro de 2012

Redes de computadores - IP estático e IP dinâmico

Endereço IP

Endereço IP é o endereço para recebimento e entrega de "pacotes" no mundo da Internet.

Endereço IP estático

O endereço IP estático é um endereço fixo que se coloca principalmente em servidores, como os de DNS (que possuem a tabela de nomes e IPOs), SMTP (envio de email), POP3 (recebimento de emails), Gateways (Servidores ponte de redes) e em clientes internos de uma rede (prefixados 10.x.x.x), para maior controle de acesso.

Endereço IP dinâmico

O endereço IP dinâmico é fornecido no início de uma sessão de uso de um cliente, por um servidor DHCP. Ele é mais cômodo, e vem dominando sobre o estático, pois a ênfase em segurança de redes internas já se provou ser mais um atraso na produtividade do que algo útil em uma auditoria. Os interesses do público interno em redes sociais desviaram sua atenção de intenções hackers, e os processos trabalhistas colocam o excesso de segurança em xeque, pois é muito difícil escapar das acusações dos usuários de policiamento e invasão de privacidade por parte dos seus superiores.

Os Roteadores possuem a capacidade de fornecer endereços IP dinâmicos, tornando possível a construção de redes internas sem a necessidade do plantão de um analista de suporte, profissional caro e melindroso. Com o advento das redes WiFi, ninguém quer se preocupar em entender lógicas complicadas de endereçamento.


quinta-feira, 15 de novembro de 2012

Navegador Google Chrome trava ou não funciona

A Google está exagerando em seus plugins, extensões e "robots" de rastreamento.

O Navegador Google Chrome está com tantos serviços e complementos, que tá ficando chato de lidar. E os softwares fizeram convênios e parcerias com Babylon, Sweetim e Funmoods, e estas drogas estão entrando e avacalhando o Chrome.

Quando sua paciência estiver no limite, e o Chrome travar, faça o seguinte:

Desinstale o Chrome. Na página que pede os motivos de você ter feito isto, proteste;
Abra o Windows explorer no seguinte local:

C:\Users\seu nome de usuário\AppData\Local\Google\Chrome

Este diretório guarda todos os plugions e extensões do chrome. Apague tudo.

Daí, se você acha que o Chrome merece outra chance, entre no endereço www.google.com/chrome e reinstale o browser.


quarta-feira, 14 de novembro de 2012

O teimoso menu de contexto do Firefox (Context Menu)

O Firefox já foi um browser muito bom, obediente aos padrões e códigos do senso comum.

Mas as últimas versões estão teimosas. Códigos javascript que valem para vários browsers não estão funcionando nele.

Um dos exemplos se refere ao menu de contexto (obtido através do clique de botão direito de mouse).

Um dos recursos (que funciona nos outros mas não no Firefox) é:

<body id="bmain" name="bmain" oncontextmenu="return false;">

Então você varre a Internet em busca de uma salvação, e encontra, em jQuery:


$(document.body).bind('contextmenu', function(e) {
  e.preventDefault();
  // prevents native menu from being shown
  // the option "Disable or replace context menus" probably make firefox ignore this
});

Vergonha, também não funciona no Firefox. O que fazer ?

A extensão Menu Editor for Firefox

Pesquise Menu Editor nos Complementos para Firefox. Você vai achar:



Após instalar o complemento, acesse a página de complementos pelo menu de ferramentas:


Pressione o botão opções para "regular" o complemento:


Desmarque a opção visível. 

É lamentável que seja necessário desabilitar todo o menu, ao invés do Firefox obedecer ao comando de javascript. Esperamos que a Mozilla mude isto.