2018 Dancer Advent Calendar
Hey Dancer Community! On behalf of the Dancer Core Team, I am trying to get a 2018 Dancer Advent Calendar organized, and we would like your help and input! How can you help? It's simple! Are there articles covering some specific area of Dancer or its ecosystem that you would like to know more about? Just reply and let us know what you would like to see. Do you want to write an article for the advent calendar? Tell us your Dancer success stories, all about a plugin you authored, how your migration from D1 to D2 went... the sky is the limit. If you have any ideas, please submit them soon to give authors a chance to work on content for the calendar. Thanks, and happy Dancing! Jason / CromeDome
Hi Jason, no idea if some parts are interesting for the community, I'm writing a voip provisioning Dancer2 Application for about a year now for my employer. Purpose: - Provision IP Phones with their configuration (Login, PWD, SIP Server, Phonebook, Key Extensions) - One Dancer2 Host that can handle many FreePBX VoIP Servers (one per customer-company), to deliver sip account create, change, delete and some more info to the FreePBX Some features: - Provisioning of Cisco and Snom phones based on their mac adresses - Dancer2 running on Twiggy - Dancer2 using memcached - Dancer2 delivering the user configuration interface for the phone settings (storing it in mysql, rendering it with template toolkit) - Dancer2 creating and delivering xml, pdf, html - Dancer2 parsing CSV uploads - nginx before twiggy running on multiple open ports as client-cert requiring ssl proxy for cisco, snom and regular webclients - FreePBX Servers have WebSocket clients connecting to the Dancer2 WebSocket server - Dancer2 WebSocket server is delivering changes to the FreePBX machines over WebSocket - Client on the FreePBX uses various approaches to deliver changes to the FreePBX/Asterisk (modified bulkimport via shell, direkt mysql access via DBIx, asteriskCLI for CallIdentification) - Client on the FreePBX is realized via AnyEvent::WebSocket::Client Difficult parts were: - persistently running AnyEvent::WebSocket::Client connected to Dancer2, as well as connection identifying on the Dancer2 side to find the currently connected clients... - getting twiggy to work with dancer and ssl If parts of it may be interesting, just drop a note and I'd be happy to help (previous Dancer Advent Calendar Articles were one the main sources of Dancer-Info/Tutorials for me), or go through some interesting parts of it via a TeamViewer session to see if its useful and not implemented completely weird ;) Happy Dancing & thanx for the great work of all of you Dancer-Folks! Johannes
Am 11.10.2018 um 15:47 schrieb Jason A. Crome <cromedome@gmail.com>:
Hey Dancer Community!
On behalf of the Dancer Core Team, I am trying to get a 2018 Dancer Advent Calendar organized, and we would like your help and input!
How can you help? It's simple! Are there articles covering some specific area of Dancer or its ecosystem that you would like to know more about? Just reply and let us know what you would like to see.
Do you want to write an article for the advent calendar? Tell us your Dancer success stories, all about a plugin you authored, how your migration from D1 to D2 went... the sky is the limit.
If you have any ideas, please submit them soon to give authors a chance to work on content for the calendar.
Thanks, and happy Dancing! Jason / CromeDome _______________________________________________ dancer-users mailing list dancer-users@dancer.pm http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
What I'd love to see if an example of CRUD with Authentication, in a skeleton format so I can steal it for my own needs. I'm too dumb/busy/lazy to make it all work myself. *grin*
Somehing like that? ------------------- cut here ------------------------- # ------------- # Main MyFancyApp.pm # ------------- use utf8; package MyFancyApp; use Dancer2; use Dancer2::Plugin::DBIC; use Dancer2::Plugin::Auth::Tiny; use Dancer2::Plugin::Deferred; use YAML; use Cache::Memcached; our $VERSION = '0.1'; prefix undef; # ------------- # Inside each controller that requires authentication # (may be better in a Dancer::Plugin::Auth::Tiny::MySpecialAuthExtension?) # ------------- Dancer2::Plugin::Auth::Tiny->extend( role => sub { my ($dsl, $Roles, $coderef) = @_; if ( ref $Roles eq '' ) { $Roles = [ $Roles ]; } return sub { my $SessionData = $dsl->app->session->read('User'); if ( grep { $SessionData->{'Roles'}->{$_} } @{$Roles} ) { goto $coderef; } else { $dsl->app->redirect('/auth/login'); } }; } ); # Paths start that way get '' => needs role => ['Root', 'Admin', ] => sub { } # --------------- # Authentication part # --------------- use utf8; package MyFancyApp::Auth::Login; use Dancer2 appname => 'MyFancyApp'; use Dancer2::Plugin::DBIC; use Dancer2::Plugin::Auth::Tiny; use Dancer2::Plugin::Deferred; use Dancer2::Plugin::Passphrase; prefix '/auth'; post '/login' => sub { my %Param = params; my $Login = $Param{login}; # If the login doesn't contain a dot and characters before and after # Login failed => display username unknown in class alert-warning and redirect to auto login again if ( $Login !~ /(.+)\.(.+)/ ) { deferred error => 'Username unknown.'; deferred class => 'alert-warning'; redirect '/auth/login'; }; my $Ident = $1; my $User = $2; my $Password = $Param{password}; my $PasswordHashed = passphrase( $Password )->generate; $RS = schema('default')->resultset('User')->search( { 'company.ident' => $Ident, 'login' => $User, 'password' => $PasswordHashed, }, { join => 'company', }, ); if ( ! $RS ) { deferred error => 'Username or password incorect.'; deferred class => 'alert-warning'; redirect '/auth/login'; } my $CompanyID = $RS->company->id; my $UserID = $RS->id; my %Roles; for my $Role ( $RS->user_roles->all ) { $Roles{$Role->role->name} = 1; } session->write( 'User' , { User => $Login, Ident => $Ident, Login => $User, Roles => \%Roles, CompanyID => $CompanyID, UserID => $UserID, }, ); my $SessionData = session->read('User'); return redirect params->{return_url} || '/'; }; post '/logout' => sub { my %Param = params; session->delete('User'); deferred error => 'Logout successful.'; deferred class => 'alert-success'; return redirect '/auth/login'; }; # --------------- # Config # --------------- # Inside config.yml session: Memcached engines: session: Memcached: memcached_servers: - 127.0.0.1:11211 - /var/sock/memcached plugins: Auth::Tiny: login_route: /auth/login ------------------- cut here -------------------------
Am 11.10.2018 um 22:31 schrieb John Stoffel <john@stoffel.org>:
What I'd love to see if an example of CRUD with Authentication, in a skeleton format so I can steal it for my own needs. I'm too dumb/busy/lazy to make it all work myself. *grin* _______________________________________________ dancer-users mailing list dancer-users@dancer.pm http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
Johannes, Thanks for posting this, now I hate to be a jerk, but some comments inside it would be helpful. You know Dancer much better than I do, and what's obvious to you, isn't to those of us who don't use it all the time. For example, the 'if (ref $Roles eq '') { ... }' could use some explanation in the code if possible. Johannes> Somehing like that? Johannes> ------------------- cut here ------------------------- Johannes> # ------------- Johannes> # Main MyFancyApp.pm Johannes> # ------------- Johannes> use utf8; Johannes> package MyFancyApp; Johannes> use Dancer2; Johannes> use Dancer2::Plugin::DBIC; Johannes> use Dancer2::Plugin::Auth::Tiny; Johannes> use Dancer2::Plugin::Deferred; Johannes> use YAML; Johannes> use Cache::Memcached; Johannes> our $VERSION = '0.1'; Johannes> prefix undef; Johannes> # ------------- Johannes> # Inside each controller that requires authentication Johannes> # (may be better in a Dancer::Plugin::Auth::Tiny::MySpecialAuthExtension?) Johannes> # ------------- Johannes> Dancer2::Plugin::Auth::Tiny->extend( Johannes> role => sub { Johannes> my ($dsl, $Roles, $coderef) = @_; Johannes> if ( ref $Roles eq '' ) { Johannes> $Roles = [ $Roles ]; Johannes> } Johannes> return sub { Johannes> my $SessionData = $dsl->app->session->read('User'); Johannes> if ( grep { $SessionData->{'Roles'}->{$_} } @{$Roles} ) { Johannes> goto $coderef; Johannes> } Johannes> else { Johannes> $dsl->app->redirect('/auth/login'); Johannes> } Johannes> }; Johannes> } Johannes> ); Johannes> # Paths start that way Johannes> get '' => needs role => ['Root', 'Admin', ] => sub { Johannes> } Johannes> # --------------- Johannes> # Authentication part Johannes> # --------------- Johannes> use utf8; Johannes> package MyFancyApp::Auth::Login; Johannes> use Dancer2 appname => 'MyFancyApp'; Johannes> use Dancer2::Plugin::DBIC; Johannes> use Dancer2::Plugin::Auth::Tiny; Johannes> use Dancer2::Plugin::Deferred; Johannes> use Dancer2::Plugin::Passphrase; Johannes> prefix '/auth'; Johannes> post '/login' => sub { Johannes> my %Param = params; Johannes> my $Login = $Param{login}; Johannes> # If the login doesn't contain a dot and characters before and after Johannes> # Login failed => display username unknown in class alert-warning and redirect to auto login again Johannes> if ( $Login !~ /(.+)\.(.+)/ ) { Johannes> deferred error => 'Username unknown.'; Johannes> deferred class => 'alert-warning'; Johannes> redirect '/auth/login'; Johannes> }; Johannes> my $Ident = $1; Johannes> my $User = $2; Johannes> my $Password = $Param{password}; Johannes> my $PasswordHashed = passphrase( Johannes> $Password Johannes> )->generate; Johannes> $RS = schema('default')->resultset('User')->search( Johannes> { Johannes> 'company.ident' => $Ident, Johannes> 'login' => $User, Johannes> 'password' => $PasswordHashed, Johannes> }, Johannes> { Johannes> join => 'company', Johannes> }, Johannes> ); Johannes> if ( ! $RS ) { Johannes> deferred error => 'Username or password incorect.'; Johannes> deferred class => 'alert-warning'; Johannes> redirect '/auth/login'; Johannes> } Johannes> my $CompanyID = $RS->company->id; Johannes> my $UserID = $RS->id; Johannes> my %Roles; Johannes> for my $Role ( $RS->user_roles->all ) { Johannes> $Roles{$Role->role->name} = 1; Johannes> } session-> write( Johannes> 'User' , { Johannes> User => $Login, Johannes> Ident => $Ident, Johannes> Login => $User, Johannes> Roles => \%Roles, Johannes> CompanyID => $CompanyID, Johannes> UserID => $UserID, Johannes> }, Johannes> ); Johannes> my $SessionData = session->read('User'); Johannes> return redirect params->{return_url} || '/'; Johannes> }; Johannes> post '/logout' => sub { Johannes> my %Param = params; session-> delete('User'); Johannes> deferred error => 'Logout successful.'; Johannes> deferred class => 'alert-success'; Johannes> return redirect '/auth/login'; Johannes> }; Johannes> # --------------- Johannes> # Config Johannes> # --------------- Johannes> # Inside config.yml Johannes> session: Memcached Johannes> engines: Johannes> session: Johannes> Memcached: Johannes> memcached_servers: Johannes> - 127.0.0.1:11211 Johannes> - /var/sock/memcached Johannes> plugins: Johannes> Auth::Tiny: Johannes> login_route: /auth/login Johannes> ------------------- cut here -------------------------
Am 11.10.2018 um 22:31 schrieb John Stoffel <john@stoffel.org>:
What I'd love to see if an example of CRUD with Authentication, in a skeleton format so I can steal it for my own needs. I'm too dumb/busy/lazy to make it all work myself. *grin* _______________________________________________ dancer-users mailing list dancer-users@dancer.pm http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
Johannes> _______________________________________________ Johannes> dancer-users mailing list Johannes> dancer-users@dancer.pm Johannes> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
I'll try, if you have some more questions, feel free to ask! ------------------- cut here ------------------------- # ------------- # Main MyFancyApp.pm # ------------- use utf8; package MyFancyApp; use Dancer2; use Dancer2::Plugin::DBIC; use Dancer2::Plugin::Auth::Tiny; use Dancer2::Plugin::Deferred; use YAML; use Cache::Memcached; our $VERSION = '0.1'; prefix undef; # ------------- # Inside each controller that requires authentication # (may be better in a Dancer::Plugin::Auth::Tiny::MySpecialAuthExtension?) # ------------- Dancer2::Plugin::Auth::Tiny->extend( role => sub { my ($dsl, $Roles, $coderef) = @_; # $Roles can be submitted like: # get '' => needs role => ['Root', 'Admin', ] => sub { # as well as # get '' => needs role => 'Root' => sub { # # so if just a scalar is submitted, # make $Roles an ARRAY ref and put the Scalar $Roles as first value in it if ( ref $Roles eq '' ) { $Roles = [ $Roles ]; } return sub { my $SessionData = $dsl->app->session->read('User'); # if one of the required roles is found in the users' roles, # access is granted if ( grep { $SessionData->{'Roles'}->{$_} } @{$Roles} ) { goto $coderef; } # else redirect to auth-login else { $dsl->app->redirect('/auth/login'); } }; } ); # Paths start that way get '' => needs role => ['Root', 'Admin', ] => sub { } # --------------- # Authentication part # --------------- use utf8; package MyFancyApp::Auth::Login; use Dancer2 appname => 'MyFancyApp'; use Dancer2::Plugin::DBIC; use Dancer2::Plugin::Auth::Tiny; use Dancer2::Plugin::Deferred; use Dancer2::Plugin::Passphrase; prefix '/auth'; post '/login' => sub { my %Param = params; my $Login = $Param{login}; # If the login doesn't contain a dot and characters before and after # Login failed => display username unknown in class alert-warning and redirect to auto login again # this isn't required for regular usernames, in our case it reduces SQL load if ( $Login !~ /(.+)\.(.+)/ ) { deferred error => 'Username unknown.'; deferred class => 'alert-warning'; redirect '/auth/login'; }; my $Ident = $1; my $User = $2; my $Password = $Param{password}; my $PasswordHashed = passphrase( $Password )->generate; # Database schema: # Table company has many # Table user has many # Table user_role belongs to # Table role # (User -> user_roles <- Roles as many to many relation) $RS = schema('default')->resultset('User')->search( { 'company.ident' => $Ident, 'login' => $User, 'password' => $PasswordHashed, }, { join => 'company', }, ); if ( ! $RS ) { deferred error => 'Username or password incorect.'; deferred class => 'alert-warning'; redirect '/auth/login'; } my $CompanyID = $RS->company->id; my $UserID = $RS->id; my %Roles; # put all users' roles into his session data for my $Role ( $RS->user_roles->all ) { $Roles{$Role->role->name} = 1; } # write the session data to memcached session->write( 'User' , { User => $Login, Ident => $Ident, Login => $User, Roles => \%Roles, CompanyID => $CompanyID, UserID => $UserID, }, ); # reread sessiondata (not required, but helps in testing if the values are set correctly) my $SessionData = session->read('User'); return redirect params->{return_url} || '/'; }; post '/logout' => sub { my %Param = params; session->delete('User'); deferred error => 'Logout successful.'; deferred class => 'alert-success'; return redirect '/auth/login'; }; # --------------- # Config # --------------- # Inside config.yml session: Memcached engines: session: Memcached: memcached_servers: - 127.0.0.1:11211 - /var/sock/memcached plugins: Auth::Tiny: login_route: /auth/login ------------------- cut here -------------------------
Am 15.10.2018 um 04:42 schrieb John Stoffel <john@stoffel.org>:
Johannes, Thanks for posting this, now I hate to be a jerk, but some comments inside it would be helpful. You know Dancer much better than I do, and what's obvious to you, isn't to those of us who don't use it all the time.
For example, the 'if (ref $Roles eq '') { ... }' could use some explanation in the code if possible.
Johannes> Somehing like that? Johannes> ------------------- cut here ------------------------- Johannes> # ------------- Johannes> # Main MyFancyApp.pm Johannes> # ------------- Johannes> use utf8; Johannes> package MyFancyApp; Johannes> use Dancer2; Johannes> use Dancer2::Plugin::DBIC; Johannes> use Dancer2::Plugin::Auth::Tiny; Johannes> use Dancer2::Plugin::Deferred; Johannes> use YAML; Johannes> use Cache::Memcached;
Johannes> our $VERSION = '0.1';
Johannes> prefix undef;
Johannes> # ------------- Johannes> # Inside each controller that requires authentication Johannes> # (may be better in a Dancer::Plugin::Auth::Tiny::MySpecialAuthExtension?) Johannes> # ------------- Johannes> Dancer2::Plugin::Auth::Tiny->extend( Johannes> role => sub { Johannes> my ($dsl, $Roles, $coderef) = @_; Johannes> if ( ref $Roles eq '' ) { Johannes> $Roles = [ $Roles ]; Johannes> } Johannes> return sub { Johannes> my $SessionData = $dsl->app->session->read('User'); Johannes> if ( grep { $SessionData->{'Roles'}->{$_} } @{$Roles} ) { Johannes> goto $coderef; Johannes> } Johannes> else { Johannes> $dsl->app->redirect('/auth/login'); Johannes> } Johannes> }; Johannes> } Johannes> );
Johannes> # Paths start that way Johannes> get '' => needs role => ['Root', 'Admin', ] => sub { Johannes> } Johannes> # --------------- Johannes> # Authentication part Johannes> # ---------------
Johannes> use utf8; Johannes> package MyFancyApp::Auth::Login; Johannes> use Dancer2 appname => 'MyFancyApp'; Johannes> use Dancer2::Plugin::DBIC; Johannes> use Dancer2::Plugin::Auth::Tiny; Johannes> use Dancer2::Plugin::Deferred; Johannes> use Dancer2::Plugin::Passphrase;
Johannes> prefix '/auth';
Johannes> post '/login' => sub {
Johannes> my %Param = params; Johannes> my $Login = $Param{login};
Johannes> # If the login doesn't contain a dot and characters before and after Johannes> # Login failed => display username unknown in class alert-warning and redirect to auto login again Johannes> if ( $Login !~ /(.+)\.(.+)/ ) { Johannes> deferred error => 'Username unknown.'; Johannes> deferred class => 'alert-warning'; Johannes> redirect '/auth/login'; Johannes> };
Johannes> my $Ident = $1; Johannes> my $User = $2;
Johannes> my $Password = $Param{password}; Johannes> my $PasswordHashed = passphrase( Johannes> $Password Johannes> )->generate;
Johannes> $RS = schema('default')->resultset('User')->search( Johannes> { Johannes> 'company.ident' => $Ident, Johannes> 'login' => $User, Johannes> 'password' => $PasswordHashed, Johannes> }, Johannes> { Johannes> join => 'company', Johannes> }, Johannes> );
Johannes> if ( ! $RS ) { Johannes> deferred error => 'Username or password incorect.'; Johannes> deferred class => 'alert-warning'; Johannes> redirect '/auth/login'; Johannes> }
Johannes> my $CompanyID = $RS->company->id; Johannes> my $UserID = $RS->id; Johannes> my %Roles; Johannes> for my $Role ( $RS->user_roles->all ) { Johannes> $Roles{$Role->role->name} = 1; Johannes> }
session-> write( Johannes> 'User' , { Johannes> User => $Login, Johannes> Ident => $Ident, Johannes> Login => $User, Johannes> Roles => \%Roles, Johannes> CompanyID => $CompanyID, Johannes> UserID => $UserID, Johannes> }, Johannes> );
Johannes> my $SessionData = session->read('User');
Johannes> return redirect params->{return_url} || '/'; Johannes> };
Johannes> post '/logout' => sub {
Johannes> my %Param = params; session-> delete('User');
Johannes> deferred error => 'Logout successful.'; Johannes> deferred class => 'alert-success';
Johannes> return redirect '/auth/login'; Johannes> }; Johannes> # --------------- Johannes> # Config Johannes> # --------------- Johannes> # Inside config.yml Johannes> session: Memcached Johannes> engines: Johannes> session: Johannes> Memcached: Johannes> memcached_servers: Johannes> - 127.0.0.1:11211 Johannes> - /var/sock/memcached Johannes> plugins: Johannes> Auth::Tiny: Johannes> login_route: /auth/login Johannes> ------------------- cut here -------------------------
Am 11.10.2018 um 22:31 schrieb John Stoffel <john@stoffel.org>:
What I'd love to see if an example of CRUD with Authentication, in a skeleton format so I can steal it for my own needs. I'm too dumb/busy/lazy to make it all work myself. *grin* _______________________________________________ dancer-users mailing list dancer-users@dancer.pm http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
Johannes> _______________________________________________ Johannes> dancer-users mailing list Johannes> dancer-users@dancer.pm Johannes> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users _______________________________________________ dancer-users mailing list dancer-users@dancer.pm http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
On Thu, 11 Oct 2018 16:31:59 -0400 "John Stoffel" <john@stoffel.org> wrote:
What I'd love to see if an example of CRUD with Authentication, in a skeleton format so I can steal it for my own needs.
Dancer::Plugin::SimpleCRUD paired with Dancer::Plugin::Auth::Extensible can do a scary amount of that for you conveniently. In fact, that could be an advent article I guess - "here's how easy it can be to throw together a basic CRUD web interface". Assuming, of course, that you mean CRUD with a web interface, and not as in a RESTful CRUD API.
"David" == David Precious <davidp@preshweb.co.uk> writes:
David> On Thu, 11 Oct 2018 16:31:59 -0400 David> "John Stoffel" <john@stoffel.org> wrote:
What I'd love to see if an example of CRUD with Authentication, in a skeleton format so I can steal it for my own needs.
David> Dancer::Plugin::SimpleCRUD paired with Dancer::Plugin::Auth::Extensible David> can do a scary amount of that for you conveniently. Right, this would be an awesome article, with examples! David> In fact, that could be an advent article I guess - "here's how David> easy it can be to throw together a basic CRUD web interface". "A basic secure CRUD interface with roles" would be what I want to see. Yes, it needs to be behind an SSL proxy for true security. David> Assuming, of course, that you mean CRUD with a web interface, and not David> as in a RESTful CRUD API. The second article shows how to extend it to include this? Hint hint hint... *grin*
How about a "top ten plugins to be familiar with" list? On Thu, Oct 11, 2018 at 9:48 AM Jason A. Crome <cromedome@gmail.com> wrote:
Hey Dancer Community!
On behalf of the Dancer Core Team, I am trying to get a 2018 Dancer Advent Calendar organized, and we would like your help and input!
How can you help? It's simple! Are there articles covering some specific area of Dancer or its ecosystem that you would like to know more about? Just reply and let us know what you would like to see.
Do you want to write an article for the advent calendar? Tell us your Dancer success stories, all about a plugin you authored, how your migration from D1 to D2 went... the sky is the limit.
If you have any ideas, please submit them soon to give authors a chance to work on content for the calendar.
Thanks, and happy Dancing! Jason / CromeDome _______________________________________________ dancer-users mailing list dancer-users@dancer.pm http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
-- Prometheus Labor Communications, Inc. http://prometheuslabor.com 413-572-1300 UnionConnect Phone App for Labor Unions http://unionconnect.com
On 10/28/18 2:25 PM, Steve Dondley wrote:
How about a "top ten plugins to be familiar with" list?
Yes, good idea! We lack a list of plugins which are really useful :-) Regards Racke
On Thu, Oct 11, 2018 at 9:48 AM Jason A. Crome <cromedome@gmail.com <mailto:cromedome@gmail.com>> wrote:
Hey Dancer Community!
On behalf of the Dancer Core Team, I am trying to get a 2018 Dancer Advent Calendar organized, and we would like your help and input!
How can you help? It's simple! Are there articles covering some specific area of Dancer or its ecosystem that you would like to know more about? Just reply and let us know what you would like to see.
Do you want to write an article for the advent calendar? Tell us your Dancer success stories, all about a plugin you authored, how your migration from D1 to D2 went... the sky is the limit.
If you have any ideas, please submit them soon to give authors a chance to work on content for the calendar.
Thanks, and happy Dancing! Jason / CromeDome _______________________________________________ dancer-users mailing list dancer-users@dancer.pm <mailto:dancer-users@dancer.pm> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
-- Prometheus Labor Communications, Inc. http://prometheuslabor.com 413-572-1300
UnionConnect Phone App for Labor Unions http://unionconnect.com
_______________________________________________ dancer-users mailing list dancer-users@dancer.pm http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
-- Ecommerce and Linux consulting + Perl and web application programming. Debian and Sympa administration. Provisioning with Ansible.
OK, I'll write it, but I need suggestions. If I come up with more than 10, I'll create an "honorable" mentions list. Here's a start based mostly on popularity on cpan. Dancer2::Plugin:: * DBIC * REST * Database * Auth::Tiny * Auth::Exensible * Session::Cookie * Log::Report What else? On Sun, Oct 28, 2018 at 9:55 AM Stefan Hornburg (Racke) <racke@linuxia.de> wrote:
On 10/28/18 2:25 PM, Steve Dondley wrote:
How about a "top ten plugins to be familiar with" list?
Yes, good idea! We lack a list of plugins which are really useful :-)
Regards Racke
On Thu, Oct 11, 2018 at 9:48 AM Jason A. Crome <cromedome@gmail.com
<mailto:cromedome@gmail.com>> wrote:
Hey Dancer Community!
On behalf of the Dancer Core Team, I am trying to get a 2018 Dancer Advent Calendar organized, and we would like your help and input!
How can you help? It's simple! Are there articles covering some specific area of Dancer or its ecosystem that you would like to know more about? Just reply and let us know what you would like to see.
Do you want to write an article for the advent calendar? Tell us your Dancer success stories, all about a plugin you authored, how your migration from D1 to D2 went... the sky is the limit.
If you have any ideas, please submit them soon to give authors a chance to work on content for the calendar.
Thanks, and happy Dancing! Jason / CromeDome _______________________________________________ dancer-users mailing list dancer-users@dancer.pm <mailto:dancer-users@dancer.pm> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
-- Prometheus Labor Communications, Inc. http://prometheuslabor.com 413-572-1300
UnionConnect Phone App for Labor Unions http://unionconnect.com
_______________________________________________ dancer-users mailing list dancer-users@dancer.pm http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
-- Ecommerce and Linux consulting + Perl and web application programming. Debian and Sympa administration. Provisioning with Ansible. _______________________________________________ dancer-users mailing list dancer-users@dancer.pm http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
-- Prometheus Labor Communications, Inc. http://prometheuslabor.com 413-572-1300 UnionConnect Phone App for Labor Unions http://unionconnect.com
Hi Steve, That's a wonderful idea! I think Dancer2::Plugin::Cache::CHI is useful for when Nginx can't decide whether the cache is stale. Another one (which is a maybe since I've not used it) Dancer2::Plugin::Chain which might be of interest to Catalystas :-) Andrew On Sun, Oct 28, 2018 at 2:12 PM Steve Dondley <sdondley@gmail.com> wrote:
OK, I'll write it, but I need suggestions. If I come up with more than 10, I'll create an "honorable" mentions list.
Here's a start based mostly on popularity on cpan.
Dancer2::Plugin::
* DBIC * REST * Database * Auth::Tiny * Auth::Exensible * Session::Cookie * Log::Report
What else?
On Sun, Oct 28, 2018 at 9:55 AM Stefan Hornburg (Racke) <racke@linuxia.de> wrote:
On 10/28/18 2:25 PM, Steve Dondley wrote:
How about a "top ten plugins to be familiar with" list?
Yes, good idea! We lack a list of plugins which are really useful :-)
Regards Racke
On Thu, Oct 11, 2018 at 9:48 AM Jason A. Crome <cromedome@gmail.com
<mailto:cromedome@gmail.com>> wrote:
Hey Dancer Community!
On behalf of the Dancer Core Team, I am trying to get a 2018 Dancer Advent Calendar organized, and we would like your help and input!
How can you help? It's simple! Are there articles covering some specific area of Dancer or its ecosystem that you would like to know more about? Just reply and let us know what you would like to see.
Do you want to write an article for the advent calendar? Tell us
your
Dancer success stories, all about a plugin you authored, how your migration from D1 to D2 went... the sky is the limit.
If you have any ideas, please submit them soon to give authors a chance to work on content for the calendar.
Thanks, and happy Dancing! Jason / CromeDome _______________________________________________ dancer-users mailing list dancer-users@dancer.pm <mailto:dancer-users@dancer.pm> http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
-- Prometheus Labor Communications, Inc. http://prometheuslabor.com 413-572-1300
UnionConnect Phone App for Labor Unions http://unionconnect.com
_______________________________________________ dancer-users mailing list dancer-users@dancer.pm http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
-- Ecommerce and Linux consulting + Perl and web application programming. Debian and Sympa administration. Provisioning with Ansible. _______________________________________________ dancer-users mailing list dancer-users@dancer.pm http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
-- Prometheus Labor Communications, Inc. http://prometheuslabor.com 413-572-1300
UnionConnect Phone App for Labor Unions http://unionconnect.com _______________________________________________ dancer-users mailing list dancer-users@dancer.pm http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
-- Andrew Solomon Perl Trainer, Geekuni http://geekuni.com/ andrew@geekuni.com // +44 7931 946 062
Steve> OK, I'll write it, but I need suggestions. If I come up with Steve> more than 10, I'll create an "honorable" mentions list. Steve> Here's a start based mostly on popularity on cpan. Steve> Dancer2::Plugin:: Steve> * DBIC Steve> * REST Steve> * Database Steve> * Auth::Tiny Steve> * Auth::Exensible Steve> * Session::Cookie Steve> * Log::Report Steve> What else? Is the CRUD one mentioned? Or anything with Forms and handling them?
Beyond simply thinking about Forms, how about some sort of in-depth tutorial for using Dancer2 with ReactJS? Tutorial, best practices, sample code... -----Original Message----- From: John Stoffel Sent: Sunday, October 28, 2018 12:19 PM To: Perl Dancer users mailing list Subject: Re: [dancer-users] 2018 Dancer Advent Calendar Steve> OK, I'll write it, but I need suggestions. If I come up with Steve> more than 10, I'll create an "honorable" mentions list. Steve> Here's a start based mostly on popularity on cpan. Steve> Dancer2::Plugin:: Steve> * DBIC Steve> * REST Steve> * Database Steve> * Auth::Tiny Steve> * Auth::Exensible Steve> * Session::Cookie Steve> * Log::Report Steve> What else? Is the CRUD one mentioned? Or anything with Forms and handling them? _______________________________________________ dancer-users mailing list dancer-users@dancer.pm http://lists.preshweb.co.uk/mailman/listinfo/dancer-users
Hi! Kontakt Jason A. Crome (<cromedome@gmail.com>) kirjutas kuupäeval N, 11. oktoober 2018 kell 16:48:
How can you help? It's simple! Are there articles covering some specific area of Dancer or its ecosystem that you would like to know more about? Just reply and let us know what you would like to see.
I'd like to read about implementing GraphQL with Dancer2, little bit beyond just simple queries (how about searches?). I see there is plugin available Dancer2::Plugin::GraphQL. -- Kõike hääd, Gunnar
participants (10)
-
Andrew Solomon -
David Precious -
Hermann Calabria -
Jason A. Crome -
Johannes Hoerburger -
Johannes Hoerburger -
John Stoffel -
Stefan Hornburg (Racke) -
Steve Dondley -
WK