Your SlideShare is downloading. ×
0
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Matt's PSGI Archive
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Matt's PSGI Archive

27,261

Published on

A talk I gave at YAPC in Kiev

A talk I gave at YAPC in Kiev

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
27,261
On Slideshare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Matt's PSGI Archive
  • 2. I blame Leo Lapworth
  • 3. London.pm Tech Meet
  • 4. 14th August
  • 5. Talking about PSGI
  • 6. Leo Mentioned Matt Wright
  • 7. I Tweeted
  • 8. Some history
  • 9. 1995
  • 10. Matt's Script Archive
  • 11. Most popular Perl web site on the web
  • 12. Most well- known Perl code on the internet
  • 13. FormMail
  • 14. Most widely installed Perl program on the internet
  • 15. Most popular spamming tool on the internet
  • 16. Terrible example of Perl programming
  • 17. Popular != Good
  • 18. People “learn” Perl from copying Matt's code
  • 19. People learn “Perl” from copying Matt's code
  • 20. 2001
  • 21. Not Matt's Scripts
  • 22. New versions of Matt's scripts
  • 23. Fewer Bugs
  • 24. Fewer Security Holes
  • 25. Higher quality code
  • 26. Coding constraints
  • 27. Targeting cheap hosting plans
  • 28. 1. No CPAN Modules
  • 29. 2. Perl 5.004_04
  • 30. (First version to include CGI.pm)
  • 31. Interesting challenge
  • 32. “Interesting” challenge
  • 33. Results not completely satisfactory
  • 34. No Template Toolkit
  • 35. No Email::*
  • 36. Not best practice
  • 37. (Even for 2001)
  • 38. 2012
  • 39. NMS looks embarrassing
  • 40. Perl web programming has changed a lot
  • 41. People still find Matt's code
  • 42. People still “learn” “Perl” from Matt's code
  • 43. Some people are directed to nms project
  • 44. Not best practice
  • 45. Mojolicious blog posts
  • 46. Matt targeted cheap hosting plans
  • 47. nms targeted cheap hosting plans
  • 48. Cheap hosting plans are not CPAN friendly
  • 49. Unintended consequences
  • 50. nms discourages CPAN use
  • 51. Dilemma
  • 52. Best Practice vs Easy to install
  • 53. Cheap hosting plans still exist
  • 54. But do their users still use Perl/CGI?
  • 55. PHP
  • 56. nms still exists
  • 57. So I started thinking...
  • 58. Why not...
  • 59. ...rewrite Matt's scripts again?
  • 60. Using Modern Perl Best Practices
  • 61. CPAN
  • 62. PSGI
  • 63. Dancer Catalyst Mojolicious Web::Simple
  • 64. Template Email::* DBIx::Class
  • 65. Don't expect many users
  • 66. Simple examples
  • 67. Solutions to common problems
  • 68. Entry-level web programming in Perl
  • 69. Some of this stuff is ridiculously easy
  • 70. text_clock
  • 71. rand_text
  • 72. About five lines of code
  • 73. Others were overcomplicated by Matt's implementation
  • 74. guestbook wwwboard
  • 75. Both far easier if you use a database
  • 76. 2013
  • 77. “Let's remove CGI.pm from Perl core”
  • 78. nms stops working on cheap hosting
  • 79. Matt's scripts carry on working just fine
  • 80. (Which is a little bit annoying)
  • 81. When will those cheap hosting plans upgrade to Perl 5.20?
  • 82. Probably in about 15 years
  • 83. Plenty of time to get people used to PSGI
  • 84. Simple examples look like a good idea
  • 85. Progress report
  • 86. Github
  • 87. github.com/davorg/matts-psgi-archive
  • 88. Four (simple) programs written
  • 89. countdown rand_image rand_text text_clock
  • 90. Others to follow soon
  • 91. (Probably by Christmas)
  • 92. Show us some code
  • 93. Remember I said it was really easy
  • 94. rand_text
  • 95. my $random_file = 'random.txt'; my $delimiter = "%%n"; get '/' => sub { open my $file, '<', get_file($random_file) or error $!; my @phrases; { local $/ = $delimiter; chomp(@phrases = <$file>); } my $phrase = @phrases[rand @phrases]; return $phrase; }; dance;
  • 96. rand_image
  • 97. my $img_dir = 'public/img'; get '/' => sub { opendir my $dir, $img_dir or die $!; my @imgs = grep { -f "$img_dir/$_" } readdir $dir; my $img = @imgs[rand @imgs]; return redirect "/img/$img"; }; get '/img/:img' => sub { return send_file 'img/' . params->{img}; }; dance;
  • 98. text_clock
  • 99. use Time::Piece; get '/' => sub { return date(); }; sub date { if (! $Display_Format) { $Display_Format = build_format(); } return localtime->strftime($Display_Format); }
  • 100. sub build_format { my @date_fmt; push @date_fmt, '%A' if $Display_Week_Day; push @date_fmt, '%B' if $Display_Month; push @date_fmt, '%d' if $Display_Month_Day; push @date_fmt, '%Y' if $Display_Year; push @date_fmt, '%H:%M:%S' if $Display_Time; push @date_fmt, '%Z' if $Display_Time_Zone; return join ' ', @date_fmt; }
  • 101. github.com/davorg/matts-psgi-archive
  • 102. Feel free to submit code
  • 103. Full replacements are good
  • 104. Patches to existing programs are good
  • 105. Documentation is good
  • 106. Any help is good
  • 107. github.com/davorg/matts-psgi-archive
  • 108. Dave Cross dave@perlhacks.com @davorg

×