perl

xLance em Perl

xLance original

Já que o programa continua o mesmo em funcionalidades, segue aqui uma cópia do manual antigo:


X-Lancelot é um simulador de lances de dados, gerador de nomes e sorteador de algumas coisas.

Ele atualmente: gera nomes, simula qualquer lance de dados (qualquer número de dados, de qualquer tamanho) e é capaz de sortear um dia da semana, dia do mês, mês do ano, naipe de baralho ou carta.

O algoritmo para gerar nomes é uma modificação do Alnome, em Borland Delphi para MicroSoft Windows, do mesmo autor. Ele permite que se determine um número (fator "tamanho", mas não muito controlável). Os nomes gerados por este algoritmo, se for utilizado um "tamanho" grande, tendem a se tornar "grandes" (óbvio, não?) e também difíceis de se pronunciar. Pelo menos, exceto por algum bug (o W costuma fazer isso raras vezes), ele gera nomes ao menos "pronunciáveis".

Um arquivo .xlance na raíz do seu diretório $HOME será criado. Nele você poderá habilitar algumas coisas e configurar seu X-Lancelot, de um modo geral. A seguir será detalhado como personalizar o software, o que pode ser colocado dentro deste arquivo.

TITULO=Nome que apareerá na barra de título do programa
      FRASE=Mensagem que aparece entre os dois botões grandes
      ESTILO=VERBOSO
      DADO=2D25
      DADO=DIADASEMANA

Primeiramente, todas as quatro variáveis são opcionais e, se você já rodou o programa uma vez e não mexeu no arquivo, há de encontrá-lo vazio. Em TITULO e FRASE, qualquer valor pode ser colocado. Já se você quiser usar ESTILO, o sistema entenderá se é VERBOSO (ou TAGARELA) ou não. DADO é o único que permitirá que você coloque mais de um (todos os outros também permitem isso, na verdade, mas tratam apenas a última das atribuições). DADO representa um botão/dado e você pode substituir até todos os 12 que aparecem no canto direito da janela. Quanto aos valores, eles podem ser:

DadoO que é?
GERANOMEGera um nome de "tamanho" mais ou menos aleatório.
GERANOME-xGera um nome de "tamanho" x. Exemplo de uso: DADO=GERANOME-3.
NAIPESorteia um Naipe. Retorna um de: copas, ouros, paus e espadas.
CARTARetorna A, 2..10, J, Q ou K.
DIADASEMANARetorna um dia da semana entre domingo e sábado.
MESDOANORetorna um dos doze meses, sorteado.
DIADOMESEquivalente a um 1D31. Sorteia um número do intervalo [1..31]

Por ser em Gtk2Perl, o xlance precisa tanto do interpretador Perl como da interface Gtk2Perl para funcionar corretamente.

Redutor 0.7.2

Tela do Redutor

Este script eu criei há alguns anos para facilitar o uso de fotos tiradas com câmeras digitais em relatórios sem comprometer demais o espaço em disco no servidor no local onde eu trabalhava. Chamava-se Blu Redutor e agora relanço-o como Cyaneus Redutor.

O Redutor começou como um shellscript em kdialog, acho, chamando o ImageMagick. Havia uma dificuldade para criar imagens não proporcionais, então reescreví-lo inteiramente em Perl+Gtk2, usando a Imlib2 para mexer nas imagens. Aproveitei para tentar fazer uma interface mais simples e intuitiva.

As principais diferenças para a versão 0.7 (última versão como Blu Redutor) estão no ícone e no fato de estar apenas em inglês. É, perdi o .po e vou ter que refazê-lo depois... Além do mais, falta ainda definir licença de distribuição e reconstruir o pacote debian... Ah, e quem souber como faço a barrinha de progresso funcionar, por favor me diz!

TerraChat 0.3

Terra Chat - Código

A nova versão do terrachat não tem nenhuma novidade em termos de funcionalidade. A única mudança é que agora estou utilizando o LWP::UserAgent para baixar a página ao invés de fazer chamada ao wget. Ou seja, se você conseguir instalar essa parafernália de módulos em outro Sistema Operacional, o terrachat agora tem ótimas chances de funcionar.

Ah, ele pode servir de base pra outros projetos similares também. De repente alguém aí quer um monitor de salas do chat do UOL ou um monitor de resultados das loterias, sei lá... :-P Não tem muitos comentários, mas o código é bem enxuto. E qualquer coisa, se quiserem mexer no código, podem colocar dúvidas por aqui.

Terra Chat Monitor

CPAN é mesmo uma maravilha... Quem programa em Perl é abençoado com uma ótima ferramenta de instalação de recursos para usar em seus programas... Sempre me admiro com o CPAN.

Antes de mais nada, este artigo é um tanto técnico. Para quem programa soluções simples para o dia-a-dia. Programa no sentido de criação de código-fonte mesmo.

O Problema

Comecei a frequentar sala do Chat do Terra. É legal, mas tem alguns problemas para quem acessa fazendo outras coisas.

  • Você não sabe quando alguém entrou no chat, se você estiver em outra janela;
  • Você não sabe quando alguém no chat falou com você.

Claro, isso não é um problema só do serviço de Chat do Terra, mas de todo webchat que eu conheço.

A Idéia

Resolvi o primeiro problema em algumas horas. O segundo é mais complicado...

A idéia é bem simples: sabe a bandeja? Também chamada de System Tray? Onde ficam o Gaim e outros programinhas quando abertos? Isso, a bandeja. Criar um programa que entre no Terra e veja quantas pessoas tem na sua sala favorita e então colocar na bandeja.

O projeto é o seguinte. No Chat do Terra tem uma página que lista as salas e diz quantas pessoas têm em cada sala naquele momento. Criamos um código que pegue essa página e extraia esse número dela.

Teoria

Vamos supor que você goste de Astronomia. O chat de Astronomia fica na sessão Diversos.

Se você vir o código deste arquivo, notará que há um Select de onde podemos pegar facilmente esta informação.

Assim, a estratégia é fazer download desse arquivo, filtrar especificamente este select e então atualizar o ícone na bandeja. Isso deve ocorrer a cada 25s, por exemplo.

Código

Para o código funcionar, você deve instalar o suporte a Gtk2::TrayIcon, Event e Glib::Event. Instalei isso tudo via CPAN, com o comando *cpan* para chamar o shell e comandos install para instalar isso efetivamente. Lembrando que usei Debian GNU/Linux, versão Sarge.

#!/usr/bin/perl
use Gtk2::TrayIcon;
use Glib::Event;
use Event;
# any order Gtk2->init;

Aqui você coloca a página onde está a sala de chat que te interessa.

my $terra_page = "diversos.htm";

Este código funciona só no Terra, mas para facilitar adaptações, uma variável com o endereço do servidor é um bom começo...

my $terra_server = "http://chat.terra.com.br:9781";

Aqui você coloca o nome exato da sala, com todos os espaços e maiúsculos que tem direito.

my $terra_room = "Arte";
my $icon= Gtk2::TrayIcon->new("test");
my $label= Gtk2::Label->new("#");
$icon->add($label);
$icon->show_all;

Este código é que faz o principal: pegar o arquivo e verificar quantas pessoas tem na sala de tempos em tempos. Aqui, a cada 25 segundos.

Event->timer (after => 1, interval => 25, cb => sub {

Se já houver arquivo, ele é apagado.

if ( -f $terra_page ) {
`rm $terra_page`;
}

Estou usando o wget para pegar o arquivo. Ele tem que estar instalado, portanto.

`wget $terra_server/$terra_page &> /dev/null`;
open(FILE, "< $terra_page");
$num = "#";

Esta é a sessão que pega mesmo o número de pessoas no arquivo. Parece complicado mas é bem simples. Nem usa tanta expressão regular quanto deveria... (daria pra fazer isso em bem menos linhas)

foreach $line() {
if ($line =~ /$terra_room /) {
@aux1 = split(/(/, $line);
@aux2 = split(/)/, $aux1[1]);
$num = int($aux2[0]);
}
}
close(FILE);

Aqui a gente atualiza o mostrador na bandeja.

$label->set_label($num);
});
Gtk2->main;

Pronto! E aqui está o resultado, no WindowMaker! Não é legal?!

Special: 
Subscribe to RSS - perl

Warning: PHP Startup: Unable to load dynamic library '/opt/php56/lib/php/extensions/no-debug-non-zts-20131226/pdo.so' - /opt/php56/lib/php/extensions/no-debug-non-zts-20131226/pdo.so: cannot open shared object file: No such file or directory in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/opt/php56/lib/php/extensions/no-debug-non-zts-20131226/pdo_mysql.so' - /opt/php56/lib/php/extensions/no-debug-non-zts-20131226/pdo_mysql.so: cannot open shared object file: No such file or directory in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/opt/php56/lib/php/extensions/no-debug-non-zts-20131226/php_pdo_odbc.dll' - /opt/php56/lib/php/extensions/no-debug-non-zts-20131226/php_pdo_odbc.dll: cannot open shared object file: No such file or directory in Unknown on line 0