SlideShare a Scribd company logo
Inside Bokete:
Web Application with
Mojolicious and others.
Yusuke Wada a.k.a yusukebe
From Yokohama, Japan
2013-06-05
YAPC::NA 2013
Introduction of myself
- Yusuke Wada a.k.a yusukebe
- From Japan, Yokohama.
- A Web Application Enginner.
- CEO of Wadit Inc and CTO of Omoroki Inc.
- I got the award of the YAPC::Asia 2012 popularity vote.
- My trip is supported by Japan Perl Association.
Development of “Bokete”
My work
I spend a time to developing web site named “Bokete”. “Bokete” is my work.
What’s Bokete?
Bokete is Japanese popular entertainment web service like a 9gag.com.
- Japanese entertainment web service by Omoroki Inc.
- It’s like a 9gag.com
Bokete has ...
- Web site for PC browser and smart phone browser
- iOS App and Android App
- 3 hundred million Page View per month overall
- Backend system is written by me
Web site for PC and Smartphone browser, mobile application of iOS / Android are available in
Bokete. We have 3 hundred million page views per month overall. Backend system is written by
me.
http://bokete.jp/
Screenshot of web site
Screenshot of mobile App
Users generate contents
Bokete services
User who has funny things.
Post
See
User who want to laugh.
Bokete have a many contents generated by users. User who has funny things post the “boke” to
Bokete sites. And other users who want to laugh see these contents.
Boke
= Photo + Short Text
What are contents of Bokete?
So, what are contents of the Bokete? The answer is “Boke”. Boke is constructed of a photo and a
short text. Let’s see bokes on Bokete.
Boke No.1
You know, get this calmly.
You are hitting your referee.
Boke No.2
Who forgot a uniform ?
Boke No.3
Hey! You didn’t say UNO!!
Boke No.4
They give up.
Boke No.5
This man is the murderer.
How about bokes?
How about the bokes on Bokete? We have books of Bokete, so please ask me later if you have
interests of bokes. Then I’ll introduce backend system of Bokete.
System of Bokete
About using Perl
Technical topics
Bokete is made by Perl! We love Perl.
Structure of servers
Web App
EC2 Instances
Elastic Load Blancing
RDS
MySQL Master
RDS
MySQL Read Replica
API App
EC2 Instances
Elastic Load Blancing
Memcached Memcached
Browsers Mobile Apps
Using Mojolicious!
- Mojolicious as a Web Application Framework
- But Mojolicious is very “thin” not like a Ruby on Rails
- So, we should use other CPAN modules
- Many modules written by Japanese author are used
We use Mojolicious to implementing Bokete. Mojolicious is good Web Application Framework. But,
Mojolicious is very “thin” and too simple that is not like a Ruby on Rails. So, inside Bokete,
we use other CPAN modules that are written by Japanese Author. I think these modules are not so
popular in overseas from Japan. One of this talk theme is introduce Japanese CPAN modules.
PSGI/Plack
Interface between app and server
Enable to use Plack Middlewares and Starman/Starlet
as high-perfomance app server
PSGI
Web App
Web Application
Framework
Web Server
supports PSGI
Web App
Web Application
Framework
Web App
Web Application
Framework
Web Server
supports PSGI
Web Server
supports PSGI
Plack
Middleware
“.psgi” example
use Mojo::Server::PSGI;
use Plack::Builder;
use Bokete::Web;
my $psgi = Mojo::Server::PSGI->new( app => Bokete::Web->new );
my $app = $psgi->to_psgi_app;
builder {
enable "Runtime";
enable "ServerStatus::Lite",
path => '/server-status',
allow => [ '0.0.0.0/1' ],
scoreboard => '/var/run/server';
$psgi->to_psgi_app;
};
Add X-Runtime Header
It’s like a Apache’s mod_status
Mouse
Fast class builder
package Point;
use Mouse;
has 'x' => (is => 'rw', isa => 'Int');
has 'y' => (is => 'rw', isa => 'Int');
sub clear {
my($self) = @_;
$self->x(0);
$self->y(0);
}
1;
Moose compatible, Fast because using XS
and No dependencies.
DBIx::Skinny or Teng
Minimal O/R mapper
Supporting transaction, raw SQL, inflate/deflate
lightweight, and fast
Prepare your database on SQLite or MySQL, others.
package MyDB;
use DBIx::Skinny;
1;
Make some modules for Database access.
*Teng is newer version of DBIx::Skinny
Using DBIx::Skinny
use MyDB;
my $db = MyDB->new({ connect_info => [ 'dbi:SQLite:' ] });
$db->insert('table', { col => 'value' }); # Insert
my $row = $db->single('table', { id => 1 }); # Select
say $row->col;
my $iter = $db->search('table'); # Iterator instance
while ($row = $iter->next) {
say $row->col;
}
package MyDB::Schema;
use DBIx::Skinny::Schema;
install_table ‘table’ => schema {
pk ‘id’;
columns qw/id col/;
};
1;
FormValidator::Lite
A form validator
FormValidator::Lite->load_constraints(qw/Japanese Email/);
my $validator = FormValidator::Lite->new($self->req);
my $res -> $validator->check(
name => [qw/NOT_NULL/],
mail => [qw/EMAIL/],
{ mails => [qw/mail mail_confirm/] } => ['DUPLICATION']
);
if($validator->has_error) {
$self->stash->{messages} = $validator->get_error_messages();
return $self->render;
}
...;
Fast, simple, customizing error messages
HTML::FillInForm::Lite
fill HTML forms with Perl data
$self->helper(
render_fill => sub {
my ( $self, $template_name ) = @_;
my $html = $self->render_partial($template_name)->to_string;
return $self->render_text(
HTML::FillInForm::Lite->fill( $html, $self->req->params ),
format => 'html'
);
}
);
2 times faster than HTML::FillInForm
# In controller
return $self->render_fill(‘/post’) if $error;
HTML form is filled with request parameters
Shortcut method for controller
- Check request parameters
- Show error messages
- Fill HTML form with request parameters
sub post {
my $self = shift;
if($self->form('Post')->has_error) {
return $self->render_fill('/post');
}
}
Devel::KYTProf
Profiler for I/O blocking time
use Devel::KYTProf;
Carton / v0.9.15
Manager of Perl modules
Like a ruby bundler, using cpanfile
Carton manages
dependency of modules.
CPAN
modules
in App
An environment No.1
CPAN
modules
in App
An environment No.2
Same version modules
Carton is now
experimetal !
API is likely to chage.
Using Carton.
# on cpanfile
requires ‘Mojolicious’, 4.07;
requires ‘Mouse’;
requires ‘Teng’, 0.18;
$ carton install
$ carton exec -Ilib -- plackup myapp.psgi
carton.lock file is generated
and module files is installed into “local” directory
Execute perl command with core libraries and local libraries
Server::Starter
Daemon for hot-deploying
# On daemontools run script
start_server --port 8001 -- plackup -s Starman bokete_web.psgi
Supporting Starman/Starlet and other HTTP servers
$ sudo svc -h /service/bokete_web
To gracefully restart the server program,
sending SIGHUP to this daemon.
Cinnamon
Simple deployment tool
use Cinnamon::DSL;
set repository => 'git@github.com:yusukebe/MyApp.git';
role 'web' => [qw/001.server.name 002.server.name/],
{ deploy_to => '/home/user/www/myapp', branch => 'master', damoentools_dir => '/service/myapp' };
task deploy => {
setup => sub {
my ($host, @args) = @_;
my $repository = get('repository');
my $deploy_to = get('deploy_to');
my $branch = 'origin/' . get('branch');
remote {
run "git clone $repository $deploy_to && cd $deploy_to && git checkout -q $branch";
} $host;
}
};
$ cinnamon web deploy:setup
And many other modules
- Data::Validator - Validator for Perl data
- CloudForecast - Web Application for server monitoring
- Data::Page::Navigation - Pager
- Test::mysqld
- Plack::Middleware::ReverseProxy
- Plack::Middleware::AxsLog
- Starman
Bokete is supported by many CPAN Modules
Mojolicious is good but minimal.
We combine CPAN modules which is choosed.
It’s like LEGO blocks !!
Wrap-up
- I’ve talk about...
- Bokete as a Japanese entertainment web site
- We are using a Mojolicious !!
- Other CPAN modules by Japanese authors
- There is more than one way to develop web applications !!
And ...
YAPC::Asia 2013 will be held !
- September 19 - 21 on Keio University near the Tokyo .
- Early Bird Tickets On Sale ! - 1,000 JPY discounted .
- Talk submissions are accepted now .
- Most biggest YAPC in the world (Maybe) .
Thank you !!

More Related Content

PDF
Developing apps using Perl
KEY
Mojo as a_client
PDF
RESTful web services
PDF
Perl web frameworks
ZIP
Web Apps in Perl - HTTP 101
KEY
Mojolicious - A new hope
PPTX
Webrtc mojo
PDF
Mojolicious
Developing apps using Perl
Mojo as a_client
RESTful web services
Perl web frameworks
Web Apps in Perl - HTTP 101
Mojolicious - A new hope
Webrtc mojo
Mojolicious

What's hot (20)

PDF
Mojolicious. Веб в коробке!
PDF
Keeping it small - Getting to know the Slim PHP micro framework
PDF
Mojolicious: what works and what doesn't
PDF
Asynchronous programming patterns in Perl
PPTX
Mojolicious - Perl Framework for the Real-Time Web (Lightning Talk)
ODP
Mojolicious on Steroids
PPT
Slim RedBeanPHP and Knockout
KEY
Keeping it small: Getting to know the Slim micro framework
KEY
Perl: Hate it for the Right Reasons
PDF
Mojolicious, real-time web framework
PDF
Keeping it Small: Getting to know the Slim Micro Framework
PDF
Building Modern and Secure PHP Applications – Codementor Office Hours with Be...
PDF
YAPC::Asia 2010 Twitter解析サービス
KEY
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
PDF
Blog Hacks 2011
PDF
AnyMQ, Hippie, and the real-time web
KEY
KEY
Plack - LPW 2009
PDF
A reviravolta do desenvolvimento web
PDF
Extending the WordPress REST API - Josh Pollock
Mojolicious. Веб в коробке!
Keeping it small - Getting to know the Slim PHP micro framework
Mojolicious: what works and what doesn't
Asynchronous programming patterns in Perl
Mojolicious - Perl Framework for the Real-Time Web (Lightning Talk)
Mojolicious on Steroids
Slim RedBeanPHP and Knockout
Keeping it small: Getting to know the Slim micro framework
Perl: Hate it for the Right Reasons
Mojolicious, real-time web framework
Keeping it Small: Getting to know the Slim Micro Framework
Building Modern and Secure PHP Applications – Codementor Office Hours with Be...
YAPC::Asia 2010 Twitter解析サービス
Remedie: Building a desktop app with HTTP::Engine, SQLite and jQuery
Blog Hacks 2011
AnyMQ, Hippie, and the real-time web
Plack - LPW 2009
A reviravolta do desenvolvimento web
Extending the WordPress REST API - Josh Pollock
Ad

Similar to Inside Bokete: Web Application with Mojolicious and others (20)

PDF
rails.html
PDF
rails.html
PDF
Habitat hack slides - Infracoders Meetup Graz
ZIP
Mojolicious
PPTX
Hack Rio/OS
KEY
node.js: Javascript's in your backend
PDF
RoR (Ruby on Rails)
PDF
Cocoapods and Most common used library in Swift
KEY
Work Queues
PDF
DATABASE AUTOMATION with Thousands of database, monitoring and backup
KEY
Ruby on Rails survival guide of an aged Java developer
KEY
Gearman and CodeIgniter
ODP
DiUS Computing Lca Rails Final
KEY
Rails Presentation (Anton Dmitriyev)
PDF
Using Ember to Make a Bazillion Dollars
PPT
CoffeeScript: A beginner's presentation for beginners copy
KEY
Sinatra for REST services
PDF
Deploying your rails application to a clean ubuntu 10
PDF
Intro to SpringBatch NoSQL 2021
KEY
Practical Use of MongoDB for Node.js
rails.html
rails.html
Habitat hack slides - Infracoders Meetup Graz
Mojolicious
Hack Rio/OS
node.js: Javascript's in your backend
RoR (Ruby on Rails)
Cocoapods and Most common used library in Swift
Work Queues
DATABASE AUTOMATION with Thousands of database, monitoring and backup
Ruby on Rails survival guide of an aged Java developer
Gearman and CodeIgniter
DiUS Computing Lca Rails Final
Rails Presentation (Anton Dmitriyev)
Using Ember to Make a Bazillion Dollars
CoffeeScript: A beginner's presentation for beginners copy
Sinatra for REST services
Deploying your rails application to a clean ubuntu 10
Intro to SpringBatch NoSQL 2021
Practical Use of MongoDB for Node.js
Ad

More from Yusuke Wada (20)

PDF
僕がつくった 70個のうちの48個のWebサービス達
PDF
スッとGoを取り入れる
PDF
東京脱出計画中
PDF
Extreme remote working
PDF
Podcastを支える技術、エンジニアのためのWebメディア、そしてCPAN
PDF
創造のプロセスを回せ!v0.01
PDF
It's not only about "REMOTE"
PDF
事故からはじまるスケールチャンス
PDF
Google BigQueryを使ってみた!
PDF
Webサービスのコンテンツパターン 或いはデータの活⽤
PDF
とある Perl Monger の働き方
PDF
5 minutes - YAPC::Asia Tokyo 2014
PDF
Podcastをカジュアルに 支える技術
PDF
The master plan of scaling a web application
PDF
そのWebサービスは本当に「あたりまえ」だったのか?
PDF
Mojoliciousでつくる! Webアプリ入門
PDF
10 things to learn from Bokete
PDF
僕らの履歴書
PDF
僕らがWebサービスをつくる5つの理由
PDF
僕らがつくるための 「5W」について
僕がつくった 70個のうちの48個のWebサービス達
スッとGoを取り入れる
東京脱出計画中
Extreme remote working
Podcastを支える技術、エンジニアのためのWebメディア、そしてCPAN
創造のプロセスを回せ!v0.01
It's not only about "REMOTE"
事故からはじまるスケールチャンス
Google BigQueryを使ってみた!
Webサービスのコンテンツパターン 或いはデータの活⽤
とある Perl Monger の働き方
5 minutes - YAPC::Asia Tokyo 2014
Podcastをカジュアルに 支える技術
The master plan of scaling a web application
そのWebサービスは本当に「あたりまえ」だったのか?
Mojoliciousでつくる! Webアプリ入門
10 things to learn from Bokete
僕らの履歴書
僕らがWebサービスをつくる5つの理由
僕らがつくるための 「5W」について

Recently uploaded (20)

PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Machine learning based COVID-19 study performance prediction
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Building Integrated photovoltaic BIPV_UPV.pdf
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Machine learning based COVID-19 study performance prediction
Advanced methodologies resolving dimensionality complications for autism neur...
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
The Rise and Fall of 3GPP – Time for a Sabbatical?
Reach Out and Touch Someone: Haptics and Empathic Computing
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Digital-Transformation-Roadmap-for-Companies.pptx
Spectral efficient network and resource selection model in 5G networks
MYSQL Presentation for SQL database connectivity
Chapter 3 Spatial Domain Image Processing.pdf
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Network Security Unit 5.pdf for BCA BBA.
NewMind AI Monthly Chronicles - July 2025
Mobile App Security Testing_ A Comprehensive Guide.pdf
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Per capita expenditure prediction using model stacking based on satellite ima...
“AI and Expert System Decision Support & Business Intelligence Systems”

Inside Bokete: Web Application with Mojolicious and others

  • 1. Inside Bokete: Web Application with Mojolicious and others. Yusuke Wada a.k.a yusukebe From Yokohama, Japan 2013-06-05 YAPC::NA 2013
  • 2. Introduction of myself - Yusuke Wada a.k.a yusukebe - From Japan, Yokohama. - A Web Application Enginner. - CEO of Wadit Inc and CTO of Omoroki Inc. - I got the award of the YAPC::Asia 2012 popularity vote. - My trip is supported by Japan Perl Association.
  • 3. Development of “Bokete” My work I spend a time to developing web site named “Bokete”. “Bokete” is my work.
  • 4. What’s Bokete? Bokete is Japanese popular entertainment web service like a 9gag.com. - Japanese entertainment web service by Omoroki Inc. - It’s like a 9gag.com
  • 5. Bokete has ... - Web site for PC browser and smart phone browser - iOS App and Android App - 3 hundred million Page View per month overall - Backend system is written by me Web site for PC and Smartphone browser, mobile application of iOS / Android are available in Bokete. We have 3 hundred million page views per month overall. Backend system is written by me. http://bokete.jp/
  • 8. Users generate contents Bokete services User who has funny things. Post See User who want to laugh. Bokete have a many contents generated by users. User who has funny things post the “boke” to Bokete sites. And other users who want to laugh see these contents.
  • 9. Boke = Photo + Short Text What are contents of Bokete? So, what are contents of the Bokete? The answer is “Boke”. Boke is constructed of a photo and a short text. Let’s see bokes on Bokete.
  • 10. Boke No.1 You know, get this calmly. You are hitting your referee.
  • 11. Boke No.2 Who forgot a uniform ?
  • 12. Boke No.3 Hey! You didn’t say UNO!!
  • 14. Boke No.5 This man is the murderer.
  • 15. How about bokes? How about the bokes on Bokete? We have books of Bokete, so please ask me later if you have interests of bokes. Then I’ll introduce backend system of Bokete.
  • 16. System of Bokete About using Perl Technical topics Bokete is made by Perl! We love Perl.
  • 17. Structure of servers Web App EC2 Instances Elastic Load Blancing RDS MySQL Master RDS MySQL Read Replica API App EC2 Instances Elastic Load Blancing Memcached Memcached Browsers Mobile Apps
  • 18. Using Mojolicious! - Mojolicious as a Web Application Framework - But Mojolicious is very “thin” not like a Ruby on Rails - So, we should use other CPAN modules - Many modules written by Japanese author are used We use Mojolicious to implementing Bokete. Mojolicious is good Web Application Framework. But, Mojolicious is very “thin” and too simple that is not like a Ruby on Rails. So, inside Bokete, we use other CPAN modules that are written by Japanese Author. I think these modules are not so popular in overseas from Japan. One of this talk theme is introduce Japanese CPAN modules.
  • 19. PSGI/Plack Interface between app and server Enable to use Plack Middlewares and Starman/Starlet as high-perfomance app server PSGI Web App Web Application Framework Web Server supports PSGI Web App Web Application Framework Web App Web Application Framework Web Server supports PSGI Web Server supports PSGI Plack Middleware
  • 20. “.psgi” example use Mojo::Server::PSGI; use Plack::Builder; use Bokete::Web; my $psgi = Mojo::Server::PSGI->new( app => Bokete::Web->new ); my $app = $psgi->to_psgi_app; builder { enable "Runtime"; enable "ServerStatus::Lite", path => '/server-status', allow => [ '0.0.0.0/1' ], scoreboard => '/var/run/server'; $psgi->to_psgi_app; }; Add X-Runtime Header It’s like a Apache’s mod_status
  • 21. Mouse Fast class builder package Point; use Mouse; has 'x' => (is => 'rw', isa => 'Int'); has 'y' => (is => 'rw', isa => 'Int'); sub clear { my($self) = @_; $self->x(0); $self->y(0); } 1; Moose compatible, Fast because using XS and No dependencies.
  • 22. DBIx::Skinny or Teng Minimal O/R mapper Supporting transaction, raw SQL, inflate/deflate lightweight, and fast Prepare your database on SQLite or MySQL, others. package MyDB; use DBIx::Skinny; 1; Make some modules for Database access. *Teng is newer version of DBIx::Skinny
  • 23. Using DBIx::Skinny use MyDB; my $db = MyDB->new({ connect_info => [ 'dbi:SQLite:' ] }); $db->insert('table', { col => 'value' }); # Insert my $row = $db->single('table', { id => 1 }); # Select say $row->col; my $iter = $db->search('table'); # Iterator instance while ($row = $iter->next) { say $row->col; } package MyDB::Schema; use DBIx::Skinny::Schema; install_table ‘table’ => schema { pk ‘id’; columns qw/id col/; }; 1;
  • 24. FormValidator::Lite A form validator FormValidator::Lite->load_constraints(qw/Japanese Email/); my $validator = FormValidator::Lite->new($self->req); my $res -> $validator->check( name => [qw/NOT_NULL/], mail => [qw/EMAIL/], { mails => [qw/mail mail_confirm/] } => ['DUPLICATION'] ); if($validator->has_error) { $self->stash->{messages} = $validator->get_error_messages(); return $self->render; } ...; Fast, simple, customizing error messages
  • 25. HTML::FillInForm::Lite fill HTML forms with Perl data $self->helper( render_fill => sub { my ( $self, $template_name ) = @_; my $html = $self->render_partial($template_name)->to_string; return $self->render_text( HTML::FillInForm::Lite->fill( $html, $self->req->params ), format => 'html' ); } ); 2 times faster than HTML::FillInForm # In controller return $self->render_fill(‘/post’) if $error;
  • 26. HTML form is filled with request parameters
  • 27. Shortcut method for controller - Check request parameters - Show error messages - Fill HTML form with request parameters sub post { my $self = shift; if($self->form('Post')->has_error) { return $self->render_fill('/post'); } }
  • 28. Devel::KYTProf Profiler for I/O blocking time use Devel::KYTProf;
  • 29. Carton / v0.9.15 Manager of Perl modules Like a ruby bundler, using cpanfile Carton manages dependency of modules. CPAN modules in App An environment No.1 CPAN modules in App An environment No.2 Same version modules Carton is now experimetal ! API is likely to chage.
  • 30. Using Carton. # on cpanfile requires ‘Mojolicious’, 4.07; requires ‘Mouse’; requires ‘Teng’, 0.18; $ carton install $ carton exec -Ilib -- plackup myapp.psgi carton.lock file is generated and module files is installed into “local” directory Execute perl command with core libraries and local libraries
  • 31. Server::Starter Daemon for hot-deploying # On daemontools run script start_server --port 8001 -- plackup -s Starman bokete_web.psgi Supporting Starman/Starlet and other HTTP servers $ sudo svc -h /service/bokete_web To gracefully restart the server program, sending SIGHUP to this daemon.
  • 32. Cinnamon Simple deployment tool use Cinnamon::DSL; set repository => 'git@github.com:yusukebe/MyApp.git'; role 'web' => [qw/001.server.name 002.server.name/], { deploy_to => '/home/user/www/myapp', branch => 'master', damoentools_dir => '/service/myapp' }; task deploy => { setup => sub { my ($host, @args) = @_; my $repository = get('repository'); my $deploy_to = get('deploy_to'); my $branch = 'origin/' . get('branch'); remote { run "git clone $repository $deploy_to && cd $deploy_to && git checkout -q $branch"; } $host; } }; $ cinnamon web deploy:setup
  • 33. And many other modules - Data::Validator - Validator for Perl data - CloudForecast - Web Application for server monitoring - Data::Page::Navigation - Pager - Test::mysqld - Plack::Middleware::ReverseProxy - Plack::Middleware::AxsLog - Starman
  • 34. Bokete is supported by many CPAN Modules Mojolicious is good but minimal. We combine CPAN modules which is choosed. It’s like LEGO blocks !!
  • 35. Wrap-up - I’ve talk about... - Bokete as a Japanese entertainment web site - We are using a Mojolicious !! - Other CPAN modules by Japanese authors - There is more than one way to develop web applications !! And ...
  • 36. YAPC::Asia 2013 will be held ! - September 19 - 21 on Keio University near the Tokyo . - Early Bird Tickets On Sale ! - 1,000 JPY discounted . - Talk submissions are accepted now . - Most biggest YAPC in the world (Maybe) .