Plackdo         orhow to play with perl6     Nobuo Danjou , @lopnor
Self Introduction• Nobuo Danjou• living in Komaba, Tokyo• Freerance programmer• http://soffritto.org/, @lopnor• This is my...
What’s Plackdo?• rough port of Plack to rakudo / perl 6
What’s Rakudo?• a perl 6 implementation• http://rakudo.org/• http://github.com/rakudo
What’s Plack?• «PSGI is an interface between Perl  web applications and web servers,  and Plack is a Perl module and  tool...
What’s PSGI?my $app = sub {   my $env = shift;   return [      200,      [ ‘Content-Type’ => ‘text/plain’ ],      [ ‘Hello...
Web on perl 6• some implementations• november (wiki on perl6)• web (plack like interface and template  engines)• .... and ...
Why Plack to Perl 6?• to learn perl 6• you can be the EARLY ADAPTER NOW!• you need some playground• making web application...
Why this talk?• YAPC::Asia every year• perl 6 talks every year• but did nothing every year!• rakudo star released!• you ca...
plackdo history• start thinking about it in Sep  2010(YAPC::Asia)• started implementation in Nov 2010  (Siberian Railway)•...
how it workssub (%env) {    return [       200,       [ ‘Content-Type’ => ‘text/plain’ ],       [ %env.perl ],    ]; };
PSGIsub {    my $env = shift;    return [       200,       [ ‘Content-Type’ => ‘text/plain’ ],       [ ‘Hello World’ ],   ...
P6SGIsub (%env) {    return [       200,       [ ‘Content-Type’ => ‘text/plain’ ],       [ %env.perl ],    ]; };
how it works$ PERL6LIB=blib/lib plackdup
how it works     demo               show codes here
sockets• using parrot sockets• rakudo/t/spec/S32-io/IO-Socket-INET.pl • not tested now (it fails)
echo server#!/usr/bin/env perl6use v6;# constantssub PF_INET {2}sub SOCK_STREAM {1}sub TCP {6}sub MAIN ($port = 5000, :$ho...
IO::Socket::INETmethod bind($host, $port) {  $!PIO.bind($!PIO.sockaddr($host, $port));  return self;}
Plackdo::Socketmethod bind(Str $host, Int $port) {  my $sockaddr = self.sockaddr($host, $port);  my $status = 0;    try { ...
Plackdo::Socketmethod sockaddr(Str $host, Int $port) {  Q:PIR {     .local pmc self, pio, host, port, sockaddr     self = ...
http server• adding http specific codes onto echo server• basically copied from HTTP::Server::PSGI                         ...
parsing requests• Plackdo::HTTP::Message• based on HTTP::Message on perl 5• using grammar on perl 6   show codes here
Middlewares• copied from Plack::Middleware• AccessLog• Static• Conditional                     show codes here
testing• Plackdo::Test • forking server inside • mocking http response without forking
forking• no forking in rakudo core currently• use zavolaj• multi-platform problem        show codes here
distributing• ufo• neutro• http://modules.perl6.org/
making blog• input• storing entries• html• rss
using databases• MiniDBI, MiniDBD::mysql• libmysqlclient via zavolaj, nci
using libraries• zavolaj• nci (Native Call Interface) on parrot
html building• XML::Writer• building RSS in same way
XML::Writermy $html = html => [   head => [      title => [‘my first html’],   ],   body => [‘hello world’],];XML::Writer.s...
rakudo things• rakudo* was released every month (2010)• next rakudo* will be released in April• you can get rakudo (not st...
parrot things• parrot development is very active• interfaces change so often
to adjust to changes• implement core of your apps by your hand• give feedbacks to developer community
pir• parrot intermediate representation• pir is fast!
pirmy $res = Q:PIR {   ....};
my todo• error handling• Session management• better mysql client (MiniDBD::mysql)• Text::Markdown
conclusion• if you want to reinvent wheels,  consider do it with rakudo• it will help you understand more deeply  your firs...
that’s all• Thank you!• PLEASE COME TO JAPAN after the  nuclear problem ended (in HAPPY END)!
Upcoming SlideShare
Loading in …5
×

plackdo, plack-like web interface on perl6

1,603 views

Published on

  • Be the first to comment

plackdo, plack-like web interface on perl6

  1. 1. Plackdo orhow to play with perl6 Nobuo Danjou , @lopnor
  2. 2. Self Introduction• Nobuo Danjou• living in Komaba, Tokyo• Freerance programmer• http://soffritto.org/, @lopnor• This is my Second Time in Taipei!
  3. 3. What’s Plackdo?• rough port of Plack to rakudo / perl 6
  4. 4. What’s Rakudo?• a perl 6 implementation• http://rakudo.org/• http://github.com/rakudo
  5. 5. What’s Plack?• «PSGI is an interface between Perl web applications and web servers, and Plack is a Perl module and toolkit that contains PSGI middleware, helpers and adapters to web servers.» http://plackperl.org/
  6. 6. What’s PSGI?my $app = sub { my $env = shift; return [ 200, [ ‘Content-Type’ => ‘text/plain’ ], [ ‘Hello World’ ], ];};
  7. 7. Web on perl 6• some implementations• november (wiki on perl6)• web (plack like interface and template engines)• .... and others
  8. 8. Why Plack to Perl 6?• to learn perl 6• you can be the EARLY ADAPTER NOW!• you need some playground• making web application is good playground
  9. 9. Why this talk?• YAPC::Asia every year• perl 6 talks every year• but did nothing every year!• rakudo star released!• you can easily start now!
  10. 10. plackdo history• start thinking about it in Sep 2010(YAPC::Asia)• started implementation in Nov 2010 (Siberian Railway)• ported my blog to plackdo in Jan 2011
  11. 11. how it workssub (%env) { return [ 200, [ ‘Content-Type’ => ‘text/plain’ ], [ %env.perl ], ]; };
  12. 12. PSGIsub { my $env = shift; return [ 200, [ ‘Content-Type’ => ‘text/plain’ ], [ ‘Hello World’ ], ]; };
  13. 13. P6SGIsub (%env) { return [ 200, [ ‘Content-Type’ => ‘text/plain’ ], [ %env.perl ], ]; };
  14. 14. how it works$ PERL6LIB=blib/lib plackdup
  15. 15. how it works demo show codes here
  16. 16. sockets• using parrot sockets• rakudo/t/spec/S32-io/IO-Socket-INET.pl • not tested now (it fails)
  17. 17. echo server#!/usr/bin/env perl6use v6;# constantssub PF_INET {2}sub SOCK_STREAM {1}sub TCP {6}sub MAIN ($port = 5000, :$host = 0.0.0.0) { my $server = IO::Socket::INET.socket( PF_INET, SOCK_STREAM,TCP ); $server.bind($host, $port); $server.listen; while my $conn = $server.accept { while my $str = $conn.recv { $conn.send($str); } $conn.close; } $server.close;}# vim: ft=perl6 :
  18. 18. IO::Socket::INETmethod bind($host, $port) { $!PIO.bind($!PIO.sockaddr($host, $port)); return self;}
  19. 19. Plackdo::Socketmethod bind(Str $host, Int $port) { my $sockaddr = self.sockaddr($host, $port); my $status = 0; try { $!PIO.bind(pir::descalarref__PP($sockaddr)); CATCH { default { $status = 1; } } } return $status;}
  20. 20. Plackdo::Socketmethod sockaddr(Str $host, Int $port) { Q:PIR { .local pmc self, pio, host, port, sockaddr self = find_lex self pio = getattribute self, $!PIO host = find_lex $host port = find_lex $port sockaddr = pio.sockaddr(host, port) %r = sockaddr };}
  21. 21. http server• adding http specific codes onto echo server• basically copied from HTTP::Server::PSGI show codes here
  22. 22. parsing requests• Plackdo::HTTP::Message• based on HTTP::Message on perl 5• using grammar on perl 6 show codes here
  23. 23. Middlewares• copied from Plack::Middleware• AccessLog• Static• Conditional show codes here
  24. 24. testing• Plackdo::Test • forking server inside • mocking http response without forking
  25. 25. forking• no forking in rakudo core currently• use zavolaj• multi-platform problem show codes here
  26. 26. distributing• ufo• neutro• http://modules.perl6.org/
  27. 27. making blog• input• storing entries• html• rss
  28. 28. using databases• MiniDBI, MiniDBD::mysql• libmysqlclient via zavolaj, nci
  29. 29. using libraries• zavolaj• nci (Native Call Interface) on parrot
  30. 30. html building• XML::Writer• building RSS in same way
  31. 31. XML::Writermy $html = html => [ head => [ title => [‘my first html’], ], body => [‘hello world’],];XML::Writer.serialize($html);
  32. 32. rakudo things• rakudo* was released every month (2010)• next rakudo* will be released in April• you can get rakudo (not star) from github
  33. 33. parrot things• parrot development is very active• interfaces change so often
  34. 34. to adjust to changes• implement core of your apps by your hand• give feedbacks to developer community
  35. 35. pir• parrot intermediate representation• pir is fast!
  36. 36. pirmy $res = Q:PIR { ....};
  37. 37. my todo• error handling• Session management• better mysql client (MiniDBD::mysql)• Text::Markdown
  38. 38. conclusion• if you want to reinvent wheels, consider do it with rakudo• it will help you understand more deeply your first language.
  39. 39. that’s all• Thank you!• PLEASE COME TO JAPAN after the nuclear problem ended (in HAPPY END)!

×