On the Fly – O Que É?
On the fly é uma expressão em inglês que têm como significado os termos: dinâmicamente, às pressas, sempre mudando.
Em termos de programação, o On-the-fly significa algo criado, ou modificado dinâmicamente somente quando requisitamos.
Um exemplo de sistema on-the-fly é o validador de códigos em imagem.
Este tipo de validador, gera uma imagem diferente a cada atualização da página. É imprevisível quantas imagens um usuário poderá necessitar até que este entre com um código correto, por isso não faz sentido armazená-las, pois caso contrário, em um grande site, isto facilmente poderia causar uma sobrecarga.
Mas o On-the-fly resolve esta questão! Uma vez que a imagem fora criada, esta permanesse apenas no cache do usuário. Caso este venha a atualizar a página, uma nova imagem é gerada.
Veja funcionando:
[ Validador On-the-Fly ]
Veja o Código Completo:
(validador.cgi)
#!/usr/bin/perl
use CGI;
use CGI::Carp “fatalsToBrowser”;
use Image::Magick;
###########################################################$format = “jpeg”; # Formato de saída
$qs = $ENV{QUERY_STRING}; # Pegamos a querystring
## Lemos o buffer
read(STDIN, $buffer, $ENV{‘CONTENT_LENGTH’});
@conteudo2 = split(/&/, $ENV{QUERY_STRING});
foreach $par (@conteudo2) {
($campo, $valor) = split(/=/, $par);
$valor =~ tr/+/ /;
$valor =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack(“C”, hex($1))/eg;
$QUERY{$campo} = $valor;
}$cgi=new CGI( ); # Criamos uma instância em CGI
if (!$ENV{QUERY_STRING}){ # Se não há querystring
&addcookie; # Gera novo cookie
&form; # Mostra formulário
}elsif($QUERY{cod}){ # Se há querystring
if ($cgi->cookie(‘codigo’) eq $QUERY{cod}){
# Se o código digitado corresponde ao código no cookie
&addcookie; # Gera novo cookie
# Se corresponde, mostra correto
print “<font color=green><h3>Código correto!</h3></font>”;
&form; # Mostra formulário
}else{ # Senão
&addcookie; # Gera novo cookie
print “<font color=red><h3>Código errado!</h3></font>”; # Mostra errado
&form; # Mostra formulário
}}elsif($QUERY{gerar}){ # Se mandou gerar….
$rand=$cgi->cookie(‘codigo’); # Pega o numero que irá mostrar
$novo = Image::Magick-> new(size=>’100×65′);
# Cria imagem com as dimensões desejadas
$imagem = $novo-> Read(‘gradient:#CCCCCC-#EEEEEE’);
# Lê a imagem e coloca-a em uma variável com um fundo degradê
$imagem=$novo-> Raise(‘4×4’); # Adiciona um efeito de relevo
$imagem=$novo->MotionBlur(angle=>60,radius=>8,sigma=>3);
# Adiciona um efeito de borrar
$imagem=$novo-> Annotate( font => ‘/home/www/HATTEN.ttf’,# Caminho para fonte
fill => ‘black’, # Cor da fonte
pointsize => 20, # Tamanho da fonte
gravity => ‘Center’, # Alinhamento
text => $rand, # Escreve o número
);print “Content-type:image/$format\n\n”;
# Imprime o cabeçalho com o devido formato
binmode STDOUT;
# Converte a saída para binario$imagem=$novo->Write( “$format:-” );
# Mostra a imagem no formato escolhido}
sub form{
# Mostra na tela
print qq|<p>Digite o código:</p>
<img src=?gerar=num />
<form method=’get’>
<input type=text name=’cod’ size=8>
<input type=submit value=’ok’>
</form>
|;
}sub addcookie{
$codigo=int rand(100000); # Pega um número qualquer
$cookie=$cgi->cookie(-name=>’codigo’, # Novo cookie
-value=>$codigo,
-expires=>’+1m’, # Expira em 1 minuto
-path=>’/’,
);
print $cgi->header(-cookie=>$cookie); # Salvamos o cookie
}