0
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,112

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,112
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
11
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Transcript of "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)!
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×