Firmas aleatorias (era Re: Programar en Linux)

Alvaro Herrera alvherre en alvh.no-ip.org
Lun Oct 23 13:40:36 CLST 2006


Rodrigo Fuentealba escribió:

> >--
> >Alvaro Herrera       Valdivia, Chile   ICBM: S 39º 49' 18.1", W 73º 13' 
> >56.4"
> >"You knock on that door or the sun will be shining on places inside you
> >that the sun doesn't usually shine" (en Death: "The High Cost of Living")
> >
> 
> OT: ¿cómo haces para poner un fortune/frase distinta en tu mail?

Con este programa, que escribi hace varios an~os, y un par de archivos
de datos.  Por ej. el "headers" es asi:

1	Alvaro Herrera       Valdivia, Chile   ICBM: S 39º 49' 18.1", W 73º 13' 56.4"
2	Alvaro Herrera                           Developer, http://www.PostgreSQL.org
3	Alvaro Herrera                  http://www.amazon.com/gp/registry/5ZYLFMCVHXC
4	Alvaro Herrera                        http://www.advogato.org/person/alvherre
5	Alvaro Herrera                                http://www.PlanetPostgreSQL.org
6	Alvaro Herrera                 http://www.amazon.com/gp/registry/CTMLCN8V17R4
7	Alvaro Herrera                 http://www.amazon.com/gp/registry/DXLWNGRJD34J


y el archivo "sigs" es asi:

51	"Use it up, wear it out, make it do, or do without"
52	Hi! I'm a .signature virus!
52	cp me into your .signature file to help me spread!
53	"La gente vulgar solo piensa en pasar el tiempo;
53	el que tiene talento, en aprovecharlo"
54	"Puedes vivir solo una vez, pero si lo haces bien, una vez es suficiente"

Los numeros deben ser correlativos, sin agujeros en la numeracion, y
deben ir seguidos de un tab.  El programa permite escoger distintos
"sigs" y "headers" dependiendo del "rol" que escoges.  Es bien low-tech
:-)  Una vez quise hacer un reemplazo en C pero al final me dio lata :-)

Cuando quiero agregar una nueva frase (cosa que pasa de vez en cuando)
uso este otro programa:

#!/usr/bin/perl -w
$HOME = $ENV{"HOME"};

$SIGS = "$HOME/FIRMAS/sigs";

$index = 0;
$index = `tail -1 $SIGS 2>/dev/null | awk '{ print \$1}' ` + 1;

print STDERR "Agregando signature numero $index\n";

while (<STDIN>)
  { push @A, $_;  }
open(SIG, ">> $SIGS");
foreach (@A)
  { print SIG "$index\t$_";  }
close(SIG);


Este creo que lo escribio Aldrin Martoq, no me acuerdo.

-- 
Alvaro Herrera                 http://www.amazon.com/gp/registry/DXLWNGRJD34J
"El número de instalaciones de UNIX se ha elevado a 10,
y se espera que este número aumente" (UPM, 1972)
------------ próxima parte ------------
#!/usr/bin/perl -w

$HOME = $ENV{HOME};

$role = $ARGV[0] if defined $ARGV[0];

if (!defined $role || $role eq 'default') {
	$SIGFILE = "$HOME/FIRMAS/sigs";
	$HEADERS = "$HOME/FIRMAS/headers";
} elsif ($role eq 'cmd') {
	$HEADERS = "$HOME/FIRMAS/cmd-headers";
} else {
	die "Unrecognized role";
}

print "\n\n-- \n";

print leeAleatoria("$HEADERS") if defined $HEADERS;
print leeAleatoria("$SIGFILE") if defined $SIGFILE;

exit;

sub leeAleatoria {
	my $file = shift;
	my $index;
	my $rnd;
	my $str = "";

	$index = `tail -1 $file 2>/dev/null| awk '{print \$1}'` + 0;
	$rnd = int($index * rand) + 1;
	open(A, "grep '^$rnd	' $file |");
	while (my $line = <A>) {
		if ($line =~ /^(\d+)\t(.*)$/) {
			$str .= $2."\n"; 
		}
	}
	return $str;
}


Más información sobre la lista de distribución Linux