=meta link_base /~richardc/talks/siesta # 100 while writing, 1 when released =meta consider_old 100 =head1 Mariachi, the not really Siesta bit =head2 Start =over L =item =back =head2 It's like =over =item pipermail =item L =item L =back =head2 Apart from =over =item it's in perl (no, mhonarc doesn't count - the guts are funky) =item it does Template Toolkit =item it's name is Jose (or lists have to come in threes) =back =head2 It's a Siesta project =over =item It too has a stack of dependencies my $build = Siesta::Build->new( module_name => "Mariachi", dynamic_config => 1, license => 'perl', script_files => [ 'mariachi' ], requires => { 'AppConfig' => '1.55', 'Email::Folder' => '0.5', 'Module::Build' => '0.18', 'Mail::Thread' => '2.2', 'Mail::Thread::Chronological' => '1.22', 'Email::Thread' => 0, 'Template' => 0, 'Template::Plugin::Page' => 0, 'Date::Parse' => 0, 'Class::Accessor' => 0, 'Email::Find' => 0, 'Memoize' => 0, 'URI::Find::Schemeless::Stricter' => 0, 'Test::More' => 0, 'Storable' => 0, 'Time::HiRes' => 0, 'File::Find::Rule' => 0, 'File::Path' => 0, 'File::Copy' => 0, 'File::Basename' => 0, }, sign => 1, create_makefile_pl => 'passthrough', ); =item L is still your friend =back =head2 Usage =over =item % cpanp --prereqs i Mariachi time passes =item % time mariachi -i threadtest -o london.pm --name london.pm reticulating splines 0.000 elapsed 0.000 total load 37 0.434 elapsed 0.434 total dropped 0 duplicate messages dedupe 0.007 elapsed 0.441 total thread 0.042 elapsed 0.483 total sanity 0.010 elapsed 0.493 total order 0.010 elapsed 0.503 total sanity 0.008 elapsed 0.511 total copy files 0.110 elapsed 0.621 total tt init 0.078 elapsed 0.699 total lurker output 0.998 elapsed 1.697 total strand 0.009 elapsed 1.705 total splicing threads in 1 places deep threads split up 0.010 elapsed 1.716 total sanity 0.008 elapsed 1.724 total order 0.011 elapsed 1.734 total regular thread indexes 0.270 elapsed 2.004 total date indexes 0.263 elapsed 2.267 total messages 1.928 elapsed 4.195 total =item You'll have a london.pm folder, not unlike L =back =head2 the steps =over =item load Pulls all the messages from the source folder. Email::Folder buys us some flexibility here - we didn't have to do any special handling for mboxes as opposed to maildirs. =item dedupe Drop things with duplicate message-ids. This is because some mboxes are dirty (and Mail::Thread will choke else) =item thread Call out to Mail::Thread, which implements jwz's message threading algorithm. =item sanity Check every message that we had after discarding is reachable via the thread tree. We do that a few times just to be sure. =item order Sort the threads datewise =item lurker output Traditional Lurker a a--+ |- b | b--+ | |- c e | | | `- d c | `- e d Date order: a b e c d =item strand Wander the tree setting up the prev and next relations of the messages. =item deep threads split up Folds over-deep thread cascades a * `-b |-a `-c | `-b `-d | `-c `-e `-d `-e If we declare point C to be too deep we transform the tree. =item generate Output generation. =back =head2 TODO =over =item Speedups. In adding features we've been consistently getting slower. =item comparative benchmarks =item Write some documentation on how to install with your existing mailman system =back =head1 Footer Mariachi, the not really Siesta bit. E 2003, Richard Clamp