quinta-feira, abril 10, 2008

Javascript: método apply()

O método apply() pode resolver o "problema do this", descrito aqui. As vezes o this refere-se ao objeto Window e não ao objeto que está instanciado. O código abaixo mostra este problema: o metodoA() informa o this corretamente, mas o metodoB() não (é um método privado, mas isso não seria motivo para esse comportamento).


Como solução, no metodoA(), realize a troca na linha 9 para:
_metodoB.apply(this);
Com isso, o método B será chamado "como se fosse chamado" pelo objeto informado no apply(), no caso o this "verdadeiro".

UPDATE1: se precisar atribuir o método em eventos onclick, por exemplo, siga o modelo abaixo:
objeto.onclick = a (this, "meumetodo");
function a (objeto, metodo) {return function () {objeto[metodo].apply(objeto)}}
UPDATE2: ATENCAO - se você passar um parâmetro para o método, o apply pára de funcionar!!!

É isso,
Tooper

obs: caso queira copiar o código, ele segue abaixo.


m = new Classe;
m.metodoA();

function Classe () {

this.metodoA = function () {
alert((this.location) ? "Window" : "Instancia");
_metodoB;
}

function _metodoB () {
alert((this.location) ? "Window" : "Instancia");
}

}

Simulando Ajax em browsers sem Ajax

É possível implementar Ajax sem utilizar Microsoft.XMLHTTP, Msxml2.XMLHTTP ou XMLHttpRequest (o título deste artigo é apenas para polemizar). Se você tiver que implementar sites que funcionem em IEs antigos (5.55 em windows antigos), esse artigo pode lhe interessar. Uma possível solução é:

  1. Criar um iframe dinamicamente
  2. Criar um form dentro deste iframe
  3. Preencher um campo deste form com os dados a serem enviados
  4. Dar submit no form
  5. Fazer um "loop" com setTimeout para verificar quando os dados voltaram do servidor.
Segue abaixo alguns exemplos de como fazer isso.

Criar iframe dinamicamente:
document.body.innerHTML += '<iframe name="meuframe"> </iframe>;

ou (solução menos bugada)

var f = document.createElement("iframe");
f.setAttribute("name", "meuframe");
document.body.appendChild(f);
Deixar o iframe invisível:
// Aplique o seguinte estilo no iframe
visiblility:hidden; // com display:none não funfa no FF
width:0px; height:0px; // para ele não ocupar espaço
border:0px; // se ficar com a borda, o FF exibe um bloquinho cinza
Criar form no iframe e preencher campo:
var html = '';
html += '<form name="meuform" method="post" action="minhaurl" >';
html += '
<textarea name="dados">' +mensagem + '</textarea >';
html += '</form>';
// NÃO use document.body.innerHTML, pois o FF não conseguirá dar submit()!
frames['meuframe'].document.write(html);

Dar submit no form:
frames['meuframe'].document.forms[0].submit();
Loop que aguarda retorno dos dados:
function etapa4 () {
// se ainda houver um form é o pq os dados ainda não chegaram
if (frames['meuframe'].document.forms.length == 1) {
window.setTimeout("etapa4()", 100);
return;
} else {
var r =
frames['meuframe'].document.body.innerHTML;
eval("meucallback(" + r + ");");
}
}

Esta solução verifica a cada 1/10 de segundo se os dados voltaram do servidor. Assim que os dados voltarem, a função meucallback() é chamada, sendo passado como parâmetro o resultado.

Obs importante:
É preciso dar um intervalo de tempo entre as etapas para que o navegador "perceba" os novos objetos. Para isso, acrescente no final de cada função (cada etapa deve estar em uma função diferente) um temporizador:
// ex de código a ser colocado no final da etapa2
window.setTimeout("chama_etapa_3()", 10);


Solução Testada em:
  • Windows XP (SP2)
  • FF: Firefox 2.0.0.7
  • IE: Internet Explorer 7 e Internet Explorer 5.55
Deixe um comentário!
:)

sábado, março 08, 2008

Segredos do Excel




Estava eu, numa bela sexta-feira ensolarada criando uma planilha nova no Excel. Pensei num nome bem bonito e "PAN!": aquele nome não poderia ser utilizado!!!

Teste aí: planilhas com o nome "Histórico" ou "histórico" não podem ser utilizadas no Excel em português. Motivo: é um nome reservado para uma planilha interna utilizada para registrar as alterações realizadas nas outras planilhas....

Poderiam tê-la chamada de "historico_nunca_ninguem_chuta_esse_nome_xpto_papai"

Mas eu tive azar (sorte?) e acertei....

Hehe, o legal é que o help da Microsoft merece um troféu joinha...quando dão a solução para este problema, eles dizem:
Se esse problema ocorrer, use outro nome. Não use o nome do histórico.
Hahã!

A propósito: não dá pra criar pastas com os nomes "LPT1", "COM2" (ou similares) no windows até hoje...tbm são nomes reservados....

Produtos Microsoft não são feitos para serem obras de arte, são feitos para vender...e como vendem!

sábado, janeiro 26, 2008

Diagramas UML no linux

Cansou de usar o dia para criar diagramas no linux? Tente o umbrello:
$ sudo apt-get install umbrello
obs: se vc tem um arquivo .XMI e não sabe como abrí-lo, tente esse programa.

UPDATE: ok, acabei de usar o umbrello....não gostei...tem mais bug ainda que o dia!

segunda-feira, janeiro 21, 2008

Como criar uma conta no MSN usando linux

Jogo rápido: para criar um MSN você não precisa do Windows Live Messenger instalado. É só ir na URL http://get.live.com/getlive/overview e se cadastrar. Pronto! Dá pra criar numa boa, sem aquele vírus chamado Windows por perto...

E para usar você tem várias opções como o Kopete e o Gaim.

Fim!

terça-feira, janeiro 15, 2008

Configurando modem SpeedStream

HowTo de como configurar um modem SpeedStream no braço, para usar o speedy da Telefônica SEM provedor maldito...

1)
Por segurança, dê reset para voltar os valores de fábrica (aperte o pininho atrás do modem, usando um lápis).

2) Ganhe um IP local do modem, via DHCP.
$ sudo dhclient
(no caso do linux)
3) Acesse o modem através da URL http://192.168.254.254. Se não funcionar, descubra qual o IP do modem, lendo o IP fornecido pelo dhclient. Deve aparecer algo como:
DHCPACK from 192.168.254.254
4) Vá em Configuração -> Interface WAN (clique na conexão 2684 e altere o tipo para PPPoE)

5) Coloque os logins que a Telefônica está dando para quem não quer mais pagar provedor. Só não sei quanto tempo isso vai durar...
Login: internet@speedy.com.br
Senha: internet
(deixe tudo no default...ligue apenas "o conectar automaticamente")
6) Reinicie o modem

Se você for em Início verá a conexão com o status de "não habilitado"...não esquente a cabeça....aguarde até aparecer o botão de conectar, que deve levar uns 2 minutos.

Pronto!

Obs: imprima isso né? Como vai ler se não tem Internet?

Obs2: se lhe foi útil, deixe um comentário!! Não precisa autenticar...

Obs3: o DNS da Telefônica é 200.204.0.10, caso não venha de fábrica no modem.

segunda-feira, janeiro 14, 2008

Rádio Pandora Global

Jogo rápido: faz aproximadamente 1 ano que a fantástica rádio online pandora saiu do ar para quem não acessa dos EUA. Pois bem, agora existe o globalpandora.com. Acabei de testar e funfou perfeitamente (inclusive o login).

Boa notícia!

Fonte: meu amigo Baila.

UPDATE: hoje a rádio pandora parou de funcionar, com a seguinte mensagem: "the box is currently under maintenance"

UPDATE2 (26/01): ok, ok.....o site parou de vez né? Eu também não sei como resolver...se souber algum jeito de ouvir o pandora me avise....a alegria durou pouco....

UPDATE3: Use o Jango. Não é um pandoooora, mas quebra o galho.