package Gaga::Monktitle; # Generate fake Monktitles for Anonymous Monk based on stringified IP. # It's a litte bit like the 'Unitarian Jihad Name' scheme, but a little more perlish/monkish. use strict; use warnings; use Digest::MD5; my @names = qw(Agnostic Argument Automat Bureaucrati Caput Collect Crassi Coherent Curiosi Disjunct Divergent Grossi Holographic Humani Ignati Incognit Infinit Inspect Locut Lorenti Mari Mercantil Noni Nostalgic Obfuscat Prim Rabulos Robotic Robust Secund Spagat Spinati Spongiform Terti Tinit ); my @attr = qw(admiarable amiable bitter calm courtueous desiarable distinct endless enlightened explicite harsh hostile impatient inappropriate interrupted lazy loving mild meticulous mindless nonverbal persuasive prolongued quiet reasoned silent snotty strange sweet tired unpredictable warm ); my @trait = qw(Borg Bureaucracy Compassion Debate Debugging Discussion Enlightenment Forgiveness Fund_Raising Hubris Humanitarianism Impatience Inquisition Kindness Lazyness Love Mercy Manipulation Mind_Control Mindfulness Moderation Obfuscation Patience Perlism Quality_Assurance Reason Reflection Revision_Control Torture ); sub get_monktitle_from_ip { my $ip = shift; my $md5 = Digest::MD5->new; $md5->add("TODO: a secret initial vector - has to be changed for production!"); $md5->add($ip); my @dec = map { hex } unpack("(H2)*", $md5->digest()); foreach my $i (1..3) { # condense digest (xor) $dec[$_] ^= $dec[4*$i+$_] for (0..3); } $dec[$_] *= 59 for (0..3); # spread a little bit my $sibling = $dec[15] & 1 ? 'Brother' : 'Sister'; my $name = $names[ $dec[0] % @names ] . ($dec[15] & 1 ? 'us' : 'a'); my $attr = $attr [ $dec[1] % @attr ]; my $trait = $trait[ $dec[2] % @trait ]; my $alias = "$sibling $name of $attr $trait"; $alias =~ s/_/ /g; return $alias; } sub run { die "Need at least one IP-address as argument!" unless @ARGV; (print get_monktitle_from_ip( $_ ), "\n") for @ARGV; } run() unless caller(); 1; __DATA__ Samples (aligned for better readability): Sister Nonia of admiarable Revision Control Brother Secundus of snotty Torture Brother Nonius of enlightened Moderation Brother Nostalgicus of silent Quality Assurance Brother Humanius of meticulous Debate Sister Ignatia of quiet Discussion Brother Spagatus of hostile Kindness Brother Nonius of bitter Perlism Brother Rabulosus of prolongued Obfuscation Sister Divergenta of lazy Hubris Brother Ignatius of interrupted Love Brother Spagatus of courtueous Bureaucracy Brother Crassius of unpredictable Revision Control Sister Bureaucratia of prolongued Forgiveness Sister Holographica of nonverbal Torture Sister Prima of sweet Quality Assurance Sister Bureaucratia of snotty Impatience Brother Tertius of hostile Enlightenment Sister Bureaucratia of warm Manipulation Brother Automatus of quiet Perlism Sister Lorentia of distinct Hubris Brother Inspectus of unpredictable Borg Sister Agnostica of strange Forgiveness Brother Mercantilus of nonverbal Mind Control Sister Disjuncta of bitter Mind Control Sister Lorentia of courtueous Reflection Brother Tinitus of loving Humanitarianism ...