<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Excelent. <div class=""><br class=""></div><div class="">You are very welcome.</div><div class=""><br class=""><div class="">
--<br class="">Clive Eisen<br class="">GPG: 75056DD0<br class=""><br class=""><br class=""><br class=""><br class=""><br class="">

</div>
<br class=""><div><blockquote type="cite" class=""><div class="">On 13 Oct 2017, at 19:38, Alfonso Pinto <<a href="mailto:alfonso.pinto@gmail.com" class="">alfonso.pinto@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Hi Clive,<div class=""><br class=""></div><div class="">Your "my variable" should be equals to my "has _client".</div><div class="">Anyway, I found the issue. I was using Plack::Handler::Starman to start the app:</div><div class=""><br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">my $server = new Plack::Handler::Starman(listen => ['0.0.0.0:5000'], proctitle => 0);</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">$server->run(MyWeb::API->to_app);</blockquote></blockquote><div class="">Doing it that way makes starman to preloads the app in the master process and does copy on write to the workers. That makes it use the same context for all the workers.</div><div class=""><br class=""></div><div class="">What I did is to use the same mechanism as when you run dancer2 gen -a MyWeb::App:</div><div class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">use MyWeb::App;<br class="">MyWeb::App->to_app;</blockquote></div><div class=""> </div><div class="">Then I can run it from cli using the starman command. This way it doesn't preload the app unless --preload-app option is used.</div><div class="">And now it's working.</div><div class=""><br class=""></div><div class="">Thank you very much for your time.</div><div class=""><br class=""></div><div class="">Regards,</div><div class="">Alfonso</div></div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Fri, Oct 13, 2017 at 8:11 PM, Clive Eisen <span dir="ltr" class=""><<a href="mailto:clive@hildebrand.co.uk" target="_blank" class="">clive@hildebrand.co.uk</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto" class="">Do it the way I did it with a my variable outside to hold your handler. Then you will get one per child (well i do anyway)<br class=""><br class=""><div id="m_2075210416171661916AppleMailSignature" class="">--<div class="">Clive</div></div><div class=""><div class="h5"><div class=""><br class="">On 13 Oct 2017, at 19:07, Alfonso Pinto <<a href="mailto:alfonso.pinto@gmail.com" target="_blank" class="">alfonso.pinto@gmail.com</a>> wrote:<br class=""><br class=""></div><blockquote type="cite" class=""><div class=""><div dir="ltr" class="">Hi Clive,<div class=""><br class=""></div><div class="">Thanks for the answer. I found 2 things:</div><div class="">- <span style="font-size:12.8px" class=""> </span><span style="font-size:12.8px" class="">$client->set_identity = $plugin->config->{identity} . "-$$"; should be </span><span style="font-size:12.8px" class=""> </span><span style="font-size:12.8px" class="">$client->set_identity($<wbr class="">plugin->config->{identity} . "-$$");</span></div><div class=""><span style="font-size:12.8px" class="">- Using builders for the properties doesn't work, I've to use BUILD as you suggested.</span></div><div class=""><span style="font-size:12.8px" class=""><br class=""></span></div><div class=""><span style="font-size:12.8px" class="">Now I've this:</span></div><div class=""><span style="font-size:12.8px" class=""><br class=""></span></div><div class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class="">package Dancer2::Plugin::ZMQ;</span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class=""><br class=""></span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class="">use Dancer2::Plugin;</span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class=""><br class=""></span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class="">our $version = '0.01';</span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class=""><br class=""></span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class="">use ZMQ::FFI;</span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class="">use ZMQ::FFI::Constants qw(ZMQ_REQ);</span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class=""><br class=""></span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class="">has _context => (is => 'rw');</span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class="">has _client => (is => 'rw', plugin_keyword => 'zmq');</span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class=""><br class=""></span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class="">sub BUILD {</span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class="">    my $plugin = shift;</span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class="">    my $args = shift;</span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class=""><br class=""></span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class="">    $plugin->_context(ZMQ::FFI-><wbr class="">new());</span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class="">    $plugin->_client($plugin->_<wbr class="">context->socket(ZMQ_REQ));</span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class="">    $plugin->_client->set_<wbr class="">identity($plugin->config->{<wbr class="">identity} . "-$$");</span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class="">    $plugin->_client->connect($<wbr class="">plugin->config->{host});</span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class="">}</span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class=""><br class=""></span></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px" class="">1;</span></blockquote></div><div class=""><span style="font-size:12.8px" class=""><br class=""></span></div><div class=""><div style="font-size:12.8px" class=""><br class=""></div></div><div style="font-size:12.8px" class="">This works if you run the dancer app as a standalone process. If I run it with Starman that initialises several workers, it doesn't work as it tries to share the same instance between all the workers (you can't share ZMQ context between processes/threads).</div><div style="font-size:12.8px" class="">Is there any way to create one instance per process?</div><div class=""><br class=""></div><div class="">Regards,</div><div class="">Alfonso.</div></div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Fri, Oct 13, 2017 at 4:32 PM, Clive Eisen <span dir="ltr" class=""><<a href="mailto:clive@hildebrand.co.uk" target="_blank" class="">clive@hildebrand.co.uk</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word" class="">I do a very similar thing for a custom redis plugin I wrote<div class=""><br class=""></div><div class="">You have to declare the object outside the BUILD and set it inside</div><div class=""><br class=""></div><div class="">eg</div><div class="">package Dredis;</div><div class=""><div style="margin:0px;line-height:normal;background-color:rgb(255,255,255)" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">use Redis::Fast;</span></div></div><div style="margin:0px;line-height:normal;background-color:rgb(255,255,255)" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">use Dancer2::Plugin;</span></div><div style="margin:0px;font-size:10px;line-height:normal;font-family:Monaco;background-color:rgb(255,255,255)" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><br class=""></span></div><div class=""><div style="margin:0px;line-height:normal;background-color:rgb(255,255,255)" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">my $redii;</span></div><div style="margin:0px;line-height:normal;background-color:rgb(255,255,255);min-height:14px" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""></span><br class=""></div><div style="margin:0px;line-height:normal;background-color:rgb(255,255,255)" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">sub BUILD {</span></div><div style="margin:0px;line-height:normal;background-color:rgb(255,255,255)" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">        my ($plugin) = @_;</span></div><div class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><span class="m_2075210416171661916m_5511639465378122148Apple-tab-span" style="white-space:pre-wrap">    </span><snip lots of setup stuff></span></div><div class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><div style="margin:0px;line-height:normal;background-color:rgb(255,255,255)" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><span class="m_2075210416171661916m_5511639465378122148Apple-tab-span" style="white-space:pre-wrap">      </span>$redii->{$r}{$i} = Redis::Fast->new( %opts );</span></div><div style="margin:0px;line-height:normal;background-color:rgb(255,255,255)" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">}</span></div><div style="margin:0px;line-height:normal;background-color:rgb(255,255,255)" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><br class=""></span></div><div style="margin:0px;line-height:normal;background-color:rgb(255,255,255)" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">Then use $redi-> in the get/set methods</span></div><div style="margin:0px;line-height:normal;background-color:rgb(255,255,255)" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">eg</span></div><div style="margin:0px;line-height:normal;background-color:rgb(255,255,255)" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><div style="margin:0px;line-height:normal" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><font face="Monaco" style="font-size:10px" class="">s</font>ub dredis {</span></div><div style="margin:0px;line-height:normal" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">        my( $called, $plugin, $method, @args ) = @_;</span></div><div style="margin:0px;line-height:normal" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">        </span></div><div style="margin:0px;line-height:normal" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">        return $redii->{$called}->$method(@ar<wbr class="">gs);</span></div><div style="margin:0px;line-height:normal" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">}</span></div><div style="margin:0px;line-height:normal" class=""><span style="font-variant-ligatures:no-common-ligatures" class="">1;</span></div><div style="margin:0px;line-height:normal" class=""><span style="font-variant-ligatures:no-common-ligatures" class=""><br class=""></span></div></span></div></span></div><div class=""><div class="">
--<br class="">Clive Eisen<br class="">GPG: 75056DD0<br class=""><br class=""><br class=""><br class=""><br class=""><br class="">

</div>
<br class=""><div class=""><blockquote type="cite" class=""><div class=""><div class="m_2075210416171661916h5"><div class="">On 13 Oct 2017, at 14:29, Alfonso Pinto <<a href="mailto:alfonso.pinto@gmail.com" target="_blank" class="">alfonso.pinto@gmail.com</a>> wrote:</div><br class="m_2075210416171661916m_5511639465378122148Apple-interchange-newline"></div></div><div class=""><div class=""><div class="m_2075210416171661916h5"><div dir="ltr" class="">Dear all,<div class=""><br class=""></div><div class="">I'm trying to write a Dancer2::Plugin to maintain ZMQ socket and send some information to a backend when a request is received.</div><div class=""><br class=""></div><div class="">This is the plugin :</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><p class="m_2075210416171661916m_5511639465378122148gmail-p1">package Dancer2::Plugin::ZMQ;</p><p class="m_2075210416171661916m_5511639465378122148gmail-p1"><br class=""></p><p class="m_2075210416171661916m_5511639465378122148gmail-p1">use Dancer2::Plugin;</p><p class="m_2075210416171661916m_5511639465378122148gmail-p1"><br class=""></p><p class="m_2075210416171661916m_5511639465378122148gmail-p1">use ZMQ::FFI;</p><p class="m_2075210416171661916m_5511639465378122148gmail-p1">use ZMQ::FFI::Constants qw(ZMQ_REQ);</p><p class="m_2075210416171661916m_5511639465378122148gmail-p1"><br class=""></p><p class="m_2075210416171661916m_5511639465378122148gmail-p1">has host => (is => 'ro');</p><p class="m_2075210416171661916m_5511639465378122148gmail-p1">has identity => (is => 'ro');</p><p class="m_2075210416171661916m_5511639465378122148gmail-p1"><br class=""></p><p class="m_2075210416171661916m_5511639465378122148gmail-p1">has _context => (is => 'ro', lazy_build => 1);</p><p class="m_2075210416171661916m_5511639465378122148gmail-p1">sub _build_context {</p><p class="m_2075210416171661916m_5511639465378122148gmail-p1">    my $plugin = shift;</p><p class="m_2075210416171661916m_5511639465378122148gmail-p1">    return ZMQ::FFI->new();</p><p class="m_2075210416171661916m_5511639465378122148gmail-p1">}</p><p class="m_2075210416171661916m_5511639465378122148gmail-p1"><br class=""></p><p class="m_2075210416171661916m_5511639465378122148gmail-p1">has client => (is => 'ro', lazy_build => 1, plugin_keyword => 'zmq');</p><p class="m_2075210416171661916m_5511639465378122148gmail-p1">sub _build_client {</p><p class="m_2075210416171661916m_5511639465378122148gmail-p1">    my $plugin = shift;</p><p class="m_2075210416171661916m_5511639465378122148gmail-p1"><br class=""></p><p class="m_2075210416171661916m_5511639465378122148gmail-p1">    my $client = $plugin->_context->socket(ZMQ_<wbr class="">REQ);</p><p class="m_2075210416171661916m_5511639465378122148gmail-p1">    $client->set_identity = $plugin->config->{identity} . "-$$";</p><p class="m_2075210416171661916m_5511639465378122148gmail-p1">    $client->connect($plugin->conf<wbr class="">ig->{host});</p><p class="m_2075210416171661916m_5511639465378122148gmail-p1">    return $client;</p><p class="m_2075210416171661916m_5511639465378122148gmail-p1">}</p><p class="m_2075210416171661916m_5511639465378122148gmail-p1"><br class=""></p><p class="m_2075210416171661916m_5511639465378122148gmail-p1">1;</p></blockquote><div class=""> </div><div class=""> This is my config.yml:</div><div class=""><br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">plugins:<br class="">    ZMQ:<br class="">        identity: "api-gw"<br class="">        host: "<a class="">tcp://proxy:6660</a>"</blockquote><div class=""><br class=""></div><div class=""><br class=""></div><div class="">And this is how I use it in one route:</div><div class=""><br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">post '/' => sub {</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">    my $message = body_parameters->get('message'<wbr class="">);</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">    zmq->send(message =>$message);</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">    my $reply = zmq->recv();</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">    return {"reply" => $reply};</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">};</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> </blockquote><div class=""><br class=""></div><div class="">The issue is that I get this error:</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Router exception: Can't call method "send" on an undefined </blockquote><div class=""> <br class=""></div><div class="">I don't understand why it's not keeping the client instantiated. What is wrong withmy approach? What I don't want is to create a socket for each request received.</div><div class=""><br class=""></div><div class="">And before someone asks, the backend is working and replying. A simple script like this one works in my setup:</div><div class=""><br class=""></div><div class=""><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">use v5.10;<br class="">use ZMQ::FFI qw(ZMQ_REQ);<br class=""></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">my $endpoint = "<a class="">tcp://proxy:6660</a>";<br class="">my $ctx      = ZMQ::FFI->new();<br class=""></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">my $s1 = $ctx->socket(ZMQ_REQ);<br class="">$s1->connect($endpoint);<br class=""></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">$s1->send('ohhai');<br class="">print $s1->recv();</blockquote><div class=""><br class=""></div><div class="">Thanks in advance.</div><div class="">Regards,</div><div class="">Alfonso </div></div></div></div></div>
______________________________<wbr class="">_________________<br class="">dancer-users mailing list<br class=""><a href="mailto:dancer-users@dancer.pm" target="_blank" class="">dancer-users@dancer.pm</a><br class=""><a href="http://lists.preshweb.co.uk/mailman/listinfo/dancer-users" target="_blank" class="">http://lists.preshweb.co.uk/ma<wbr class="">ilman/listinfo/dancer-users</a><br class=""></div></blockquote></div><br class=""></div></div></div><br class="">______________________________<wbr class="">_________________<br class="">
dancer-users mailing list<br class="">
<a href="mailto:dancer-users@dancer.pm" target="_blank" class="">dancer-users@dancer.pm</a><br class="">
<a href="http://lists.preshweb.co.uk/mailman/listinfo/dancer-users" rel="noreferrer" target="_blank" class="">http://lists.preshweb.co.uk/ma<wbr class="">ilman/listinfo/dancer-users</a><br class="">
<br class=""></blockquote></div><br class=""></div>
</div></blockquote><blockquote type="cite" class=""><div class=""><span class="">______________________________<wbr class="">_________________</span><br class=""><span class="">dancer-users mailing list</span><br class=""><span class=""><a href="mailto:dancer-users@dancer.pm" target="_blank" class="">dancer-users@dancer.pm</a></span><br class=""><span class=""><a href="http://lists.preshweb.co.uk/mailman/listinfo/dancer-users" target="_blank" class="">http://lists.preshweb.co.uk/<wbr class="">mailman/listinfo/dancer-users</a></span><br class=""></div></blockquote></div></div></div><br class="">______________________________<wbr class="">_________________<br class="">
dancer-users mailing list<br class="">
<a href="mailto:dancer-users@dancer.pm" class="">dancer-users@dancer.pm</a><br class="">
<a href="http://lists.preshweb.co.uk/mailman/listinfo/dancer-users" rel="noreferrer" target="_blank" class="">http://lists.preshweb.co.uk/<wbr class="">mailman/listinfo/dancer-users</a><br class="">
<br class=""></blockquote></div><br class=""></div>
_______________________________________________<br class="">dancer-users mailing list<br class=""><a href="mailto:dancer-users@dancer.pm" class="">dancer-users@dancer.pm</a><br class="">http://lists.preshweb.co.uk/mailman/listinfo/dancer-users<br class=""></div></blockquote></div><br class=""></div></body></html>