SlideShare ist ein Scribd-Unternehmen logo
1 von 105
modern Catalyst
    Hideo Kimura
about me
about me
• hide-k
about me
• hide-k
 • hideki
about me
• hide-k
 • hideki
 • hide
about me
• hide-k
 • hideki
 • hide
• DeNA
about me
• hide-k
 • hideki
 • hide
• DeNA
 • MobaSif
Catalyst
Agenda
Agenda
• How to extend modern Catalyst on your
  applications
Agenda
• How to extend modern Catalyst on your
  applications
• Not Catalyst introducing
Agenda
• How to extend modern Catalyst on your
  applications
• Not Catalyst introducing
• Not plugin recomendation
Agenda
• How to extend modern Catalyst on your
  applications
• Not Catalyst introducing
• Not plugin recomendation
• Not tips
Agenda
• How to extend modern Catalyst on your
  applications
• Not Catalyst introducing
• Not plugin recomendation
• Not tips
• No
Catalyst 5.8
Catalyst 5.8
• 13 Oct 2008
Catalyst 5.8
• 13 Oct 2008
• Deprecation
Catalyst 5.8
• 13 Oct 2008
• Deprecation
• Catamoose
Deprecation
Deprecation
•   ::[M V C]:: style
Deprecation
•   ::[M V C]:: style

•   NEXT
Deprecation
•   ::[M V C]:: style

•   NEXT

    •   use MRO::Compat
Deprecation
•   ::[M V C]:: style

•   NEXT

    •   use MRO::Compat

•   __PACKAGE__->mk_accessors()
Deprecation
•   ::[M V C]:: style

•   NEXT

    •   use MRO::Compat

•   __PACKAGE__->mk_accessors()

    •   use Moose attribute ‘has’
Deprecation
•   ::[M V C]:: style

•   NEXT

    •   use MRO::Compat

•   __PACKAGE__->mk_accessors()

    •   use Moose attribute ‘has’

•   and more...
Moose
Moose
• A postmodern object system for Perl5
Moose
• A postmodern object system for Perl5
• Meta Object Protocol sugar syntax
Moose
• A postmodern object system for Perl5
• Meta Object Protocol sugar syntax
 • attributes
Moose
• A postmodern object system for Perl5
• Meta Object Protocol sugar syntax
 • attributes
 • method modifiers
Moose
• A postmodern object system for Perl5
• Meta Object Protocol sugar syntax
 • attributes
 • method modifiers
 • roles
Application
package MyApp;

use strict;
use warnings;

use parent qw/Catalyst/;
use Catalyst qw/
                 -Debug
                 ConfigLoader
                 Static::Simple/;

__PACKAGE__->config( name => 'MyApp' );
__PACKAGE__->setup();

1;
Moose-ified Applicatoion
package MyApp;

use Moose;

extends 'Catalyst';

__PACKAGE__->config(name => 'MyApp');
__PACKAGE__->setup(
    qw/
        -Debug
        ConfigLoader
        Static::Simple/
);

1;
Extend Application
Extend Application
• Plugin?
Extend Application
• Plugin?
 • Application namespace
Extend Application
• Plugin?
 • Application namespace
• Helper Method
Extend Application
• Plugin?
 • Application namespace
• Helper Method
• Role
Extend Application
• Plugin?
 • Application namespace
• Helper Method
• Role
• base Controller
Extend Applicatoion
package MyApp;
...

after finalize => sub {
    my $c = shift;
    $c->log->(‘finalize’);
};

sub foo {
    my $c = shift;
    $c->log->debug(‘foo’);
}

1;
Extend Applicatoion
package MyApp::Role::Foo;

use Moose::Role;

after finalize => sub {
    my $c = shift;
    $c->log->(‘finalize’);
};

sub foo {
    my $c = shift;
    $c->log->debug(‘foo’);
}

1;
Extend Applicatoion
package MyApp;

...

__PACKAGE__->setup(
    qw/
        -Debug
        ConfigLoader
        Static::Simple
        +MyApp::Role::Foo/
);

1;
Controller
package MyApp::Contorller::Foo;

use strict;
use warnings;

use parent ‘Catalyst::Controller’;

sub foo : Path('foo') {
    my ($self, $c) = @_;

     $c->res->body('foo');
}

1;
Moose-ified Controller
package MyApp::Contorller::Foo;

use Moose;

BEGIN {extends ‘Catalyst::Controller};

sub foo : Path('foo') {
    my ($self, $c) = @_;

     $c->res->body('foo');
}

1;
Extend Controller
Extend Controller

• Moose::Role
Extend Controller

• Moose::Role
 • MooseX::MethodAttributes
Extend Controller

• Moose::Role
 • MooseX::MethodAttributes
• ActionClass
Extend Controller

• Moose::Role
 • MooseX::MethodAttributes
• ActionClass
• ActionRole
Extend Controller
package MyApp::Role;

use Moose::Role -traits => 'MethodAttributes';

sub foo : Path('foo') {
    my ($self, $c) = @_;

     $c->log->debug('foo');
}

1;
Extend Controller
package MyApp::Controller::Foo;

use Moose;
BEGIN {extends ‘Catalyst::Controller’}

with MyApp::Role;

1;
ActionClass
package MyApp::Action::Foo;

use Moose;

extends 'Catalyst::Action';

after execute => sub {
    my ($self, $controller, $c) = @_;

     $c->log->debug(‘foo’);
};

1;
ActionClass
...

sub foo : Path('foo')
ActionClass('+MyApp::Action::Foo') {
    my ($self, $c) = @_;

      $c->res->body('foo');
}

...
ActionClass
...

sub _parse_Foo_attr {
  return ActionClass => ‘MyApp::Action::Foo’;
}

sub foo : Path('foo') Foo {

...
ActionClass
ActionClass
• Pros
ActionClass
• Pros
 • Reusable
Action Class
Action Class
sub foobar : Path(‘foobar’)
                  ActionClass(‘Foo’)
                  ActionClass(‘Bar’) {
Action Class
• Cons
   sub foobar : Path(‘foobar’)
                     ActionClass(‘Foo’)
                     ActionClass(‘Bar’) {
Action Class
• Cons
   sub foobar : Path(‘foobar’)
                     ActionClass(‘Foo’)
                     ActionClass(‘Bar’) {
Action Class
• Cons
   sub foobar : Path(‘foobar’)
                     ActionClass(‘Foo’)
                     ActionClass(‘Bar’) {
Action Class
• Cons
     sub foobar : Path(‘foobar’)
                       ActionClass(‘Foo’)
                       ActionClass(‘Bar’) {


 •     NG
Action Class
• Cons
   sub foobar : Path(‘foobar’)
                     ActionClass(‘Foo’)
                     ActionClass(‘Bar’) {


 • NG
 • Sucks
ActionRole
ActionRole
• Catalyst::Controller::ActionRole
ActionRole
• Catalyst::Controller::ActionRole
 • Moose::Role as Action
ActionRole
package MyApp::ActionRole::Foo;

use Moose::Role;

after execute => sub {
    my ($self, $controller, $c) = @_;

     $c->log->debug(‘foo’);
};

1;
ActionRole
package MyApp::Contorller::Foo;

use Moose;

BEGIN {extends ‘Catalyst::Controller::ActionRole’};

sub foo : Path('foo') Does('Foo') {
    my ($self, $c) = @_;

      $c->res->body('foo');
}
...
ActionRole
ActionRole

sub foobar : Path(‘foobar’)
                  Does(‘Foo’)
                  Does(‘Bar’) {
ActionRole
• Pros
  sub foobar : Path(‘foobar’)
                    Does(‘Foo’)
                    Does(‘Bar’) {
ActionRole
• Pros
  sub foobar : Path(‘foobar’)
                    Does(‘Foo’)
                    Does(‘Bar’) {
ActionRole
• Pros
  sub foobar : Path(‘foobar’)
                    Does(‘Foo’)
                    Does(‘Bar’) {
ActionRole
• Pros
  sub foobar : Path(‘foobar’)
                    Does(‘Foo’)
                    Does(‘Bar’) {



 •       OK
Dispatcher
• Path
• Local
• Global
• Regex
• LocalRegex
Dispatcher
• begin :Private
• end :Private
• auto :Private
Dispatcher
Dispatcher
• default :Private
Dispatcher
• default :Private
 • default :Path
Dispatcher
• default :Private
 • default :Path
 • catchall :Path
Dispatcher
• default :Private
 • default :Path
 • catchall :Path
• index :Private
Dispatcher
• default :Private
 • default :Path
 • catchall :Path
• index :Private
 • index :Path :Args(0)
Dispatcher
• default :Private
 • default :Path
 • catchall :Path
• index :Private
 • index :Path :Args(0)
 • home :Path :Args(0)
Dispatcher
Dispatcher
• Chained
Dispatcher
• Chained
 • dispatch chains of actions
Dispatcher
package MyApp::Controller::Foo;

use Moose;

BEGIN {extends 'Catalyst::Controller'}

sub root :Chained('/') PathPart('foo') CaptureArgs
{}

sub bar :Chained('root') PathPart Args(0) {
#/foo/bar
}

sub baz :Chained('root') PathPart Args(1) {
#/foo/baz/*
}

1;
Dispatcher
• $c->forward
• $c->detach
• $c->go
• $c->visit
Model
Model
• Thin Contoroller, Smart Model
Model
• Thin Contoroller, Smart Model
• Do not depend on Catalyst
Model
• Thin Contoroller, Smart Model
• Do not depend on Catalyst
• Model::Adaptor
Model::Adaptor
package MyApp::Model::Foo;

use Moose;

extends 'Catalyst::Model::Adaptor';

__PACKAGE__->config(
    class       => 'MyApp::Foo'
);

1;
Test
• Catalyst::Test
• Test::WWW::Mechanize::Catalyst
Catalyst::Test
use strict;
use warnings;

use Test::More;
use HTTP::Request::Common;

BEGIN { use_ok 'Catalyst::Test', 'MyApp' }

my $req = GET('/');
my $res = request($req); #$res = get(‘/’)
ok($res->is_success, 'index return ok');
is($res->content_type, 'text/html', 'content type
is HTML');
like($res->content, qr/Home/, 'contains Home');

done_testing();
Catalyst::Test
...

my ($res, $c) = ctx_request('/');

ok($res->is_success, 'index return ok');
is($c->stash->{foo}, 'foo', 'statsh foo is foo');

...
Test::WWW::Mechanize::Catalyst
use Test::WWW::Mechanize::Catalyst;
my $mech =
    Test::WWW::Mecanize::Catalyst->new(
        catalyst_app => ‘MyApp’
    );
$mech->get(‘/’);
$mech->content_contains(‘Home’, ‘contains Home’);
$mech->submit_form(
    form_number => 1,
    fields       => {
                      foo => ‘foo’,
                      bar => ‘bar’
                    }
);
$mech->content_contains(‘Foo’, ‘contains Foo’);
...
Resources
•   Catalyst::Delta

•   Catalyst::Upgrading

•   Catalyst::Manual::ExtendingCatalyst

•   Catalyst::Manual::CatalystAndMoose

•   Catalyst::Manual::Cookbook

•          Perl

    •   http://gihyo.jp/dev/serial/01/modern-perl

•   The Definitive Guide to Catalyst
One more thing...
PSGI
PSGI
PSGI
• Perl Server Gateway Interface
 • just specification, not implementation
 • start developing at 2009/09/04
 • talk in this morning
   • miyaga-san, tokuhirom-san
Catalyst::Engine::PSGI
                                   MyApp



               Catalyst::Engine::PSGI      Catalyst::Engine::*



::Impl::Coro        ::Impl::Mojo
Thank you

Weitere ähnliche Inhalte

Was ist angesagt?

Thor - RSLA - 13oct2009
Thor - RSLA - 13oct2009Thor - RSLA - 13oct2009
Thor - RSLA - 13oct2009Plataformatec
 
JRuby, Ruby, Rails and You on the Cloud
JRuby, Ruby, Rails and You on the CloudJRuby, Ruby, Rails and You on the Cloud
JRuby, Ruby, Rails and You on the CloudHiro Asari
 
はじめてのanything-c-source-*
はじめてのanything-c-source-*はじめてのanything-c-source-*
はじめてのanything-c-source-*Kenichirou Oyama
 
My Opera meets Varnish, Dec 2009
My Opera meets Varnish, Dec 2009My Opera meets Varnish, Dec 2009
My Opera meets Varnish, Dec 2009Cosimo Streppone
 
Perlmania_Study - CPAN
Perlmania_Study - CPANPerlmania_Study - CPAN
Perlmania_Study - CPANJeen Lee
 
Unlock The Mystery Of PHPUnit (Wave PHP 2018)
Unlock The Mystery Of PHPUnit (Wave PHP 2018)Unlock The Mystery Of PHPUnit (Wave PHP 2018)
Unlock The Mystery Of PHPUnit (Wave PHP 2018)ENDelt260
 
How Danga::Socket handles asynchronous processing and how to write asynchrono...
How Danga::Socket handles asynchronous processing and how to write asynchrono...How Danga::Socket handles asynchronous processing and how to write asynchrono...
How Danga::Socket handles asynchronous processing and how to write asynchrono...Gosuke Miyashita
 
10 Catalyst Tips
10 Catalyst Tips10 Catalyst Tips
10 Catalyst TipsJay Shirley
 
Building Better Applications with Data::Manager
Building Better Applications with Data::ManagerBuilding Better Applications with Data::Manager
Building Better Applications with Data::ManagerJay Shirley
 
Deploying Next Gen Systems with Zero Downtime
Deploying Next Gen Systems with Zero DowntimeDeploying Next Gen Systems with Zero Downtime
Deploying Next Gen Systems with Zero DowntimeTwilio Inc
 
Innovation and Security in Ruby on Rails
Innovation and Security in Ruby on RailsInnovation and Security in Ruby on Rails
Innovation and Security in Ruby on Railstielefeld
 
Railsconf2011 deployment tips_for_slideshare
Railsconf2011 deployment tips_for_slideshareRailsconf2011 deployment tips_for_slideshare
Railsconf2011 deployment tips_for_slidesharetomcopeland
 
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南Shengyou Fan
 
Intro to pl/PHP Oscon2007
Intro to pl/PHP Oscon2007Intro to pl/PHP Oscon2007
Intro to pl/PHP Oscon2007Robert Treat
 
Composer, putting dependencies on the score
Composer, putting dependencies on the scoreComposer, putting dependencies on the score
Composer, putting dependencies on the scoreRafael Dohms
 
Composer: putting dependencies on the score
Composer: putting dependencies on the scoreComposer: putting dependencies on the score
Composer: putting dependencies on the scoreRafael Dohms
 
Zen: Building Maintainable Catalyst Applications
Zen: Building Maintainable Catalyst ApplicationsZen: Building Maintainable Catalyst Applications
Zen: Building Maintainable Catalyst ApplicationsJay Shirley
 
Get Soaked - An In Depth Look At PHP Streams
Get Soaked - An In Depth Look At PHP StreamsGet Soaked - An In Depth Look At PHP Streams
Get Soaked - An In Depth Look At PHP StreamsDavey Shafik
 

Was ist angesagt? (20)

Thor - RSLA - 13oct2009
Thor - RSLA - 13oct2009Thor - RSLA - 13oct2009
Thor - RSLA - 13oct2009
 
JRuby, Ruby, Rails and You on the Cloud
JRuby, Ruby, Rails and You on the CloudJRuby, Ruby, Rails and You on the Cloud
JRuby, Ruby, Rails and You on the Cloud
 
はじめてのanything-c-source-*
はじめてのanything-c-source-*はじめてのanything-c-source-*
はじめてのanything-c-source-*
 
My Opera meets Varnish, Dec 2009
My Opera meets Varnish, Dec 2009My Opera meets Varnish, Dec 2009
My Opera meets Varnish, Dec 2009
 
Perlmania_Study - CPAN
Perlmania_Study - CPANPerlmania_Study - CPAN
Perlmania_Study - CPAN
 
Unlock The Mystery Of PHPUnit (Wave PHP 2018)
Unlock The Mystery Of PHPUnit (Wave PHP 2018)Unlock The Mystery Of PHPUnit (Wave PHP 2018)
Unlock The Mystery Of PHPUnit (Wave PHP 2018)
 
How Danga::Socket handles asynchronous processing and how to write asynchrono...
How Danga::Socket handles asynchronous processing and how to write asynchrono...How Danga::Socket handles asynchronous processing and how to write asynchrono...
How Danga::Socket handles asynchronous processing and how to write asynchrono...
 
10 Catalyst Tips
10 Catalyst Tips10 Catalyst Tips
10 Catalyst Tips
 
Os Treat
Os TreatOs Treat
Os Treat
 
Building Better Applications with Data::Manager
Building Better Applications with Data::ManagerBuilding Better Applications with Data::Manager
Building Better Applications with Data::Manager
 
Deploying Next Gen Systems with Zero Downtime
Deploying Next Gen Systems with Zero DowntimeDeploying Next Gen Systems with Zero Downtime
Deploying Next Gen Systems with Zero Downtime
 
Innovation and Security in Ruby on Rails
Innovation and Security in Ruby on RailsInnovation and Security in Ruby on Rails
Innovation and Security in Ruby on Rails
 
Railsconf2011 deployment tips_for_slideshare
Railsconf2011 deployment tips_for_slideshareRailsconf2011 deployment tips_for_slideshare
Railsconf2011 deployment tips_for_slideshare
 
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
 
Pi
PiPi
Pi
 
Intro to pl/PHP Oscon2007
Intro to pl/PHP Oscon2007Intro to pl/PHP Oscon2007
Intro to pl/PHP Oscon2007
 
Composer, putting dependencies on the score
Composer, putting dependencies on the scoreComposer, putting dependencies on the score
Composer, putting dependencies on the score
 
Composer: putting dependencies on the score
Composer: putting dependencies on the scoreComposer: putting dependencies on the score
Composer: putting dependencies on the score
 
Zen: Building Maintainable Catalyst Applications
Zen: Building Maintainable Catalyst ApplicationsZen: Building Maintainable Catalyst Applications
Zen: Building Maintainable Catalyst Applications
 
Get Soaked - An In Depth Look At PHP Streams
Get Soaked - An In Depth Look At PHP StreamsGet Soaked - An In Depth Look At PHP Streams
Get Soaked - An In Depth Look At PHP Streams
 

Andere mochten auch

FCC Catalyst Design: Morphology, Physiology, Reaction Chemistry and Manufactu...
FCC Catalyst Design: Morphology, Physiology, Reaction Chemistry and Manufactu...FCC Catalyst Design: Morphology, Physiology, Reaction Chemistry and Manufactu...
FCC Catalyst Design: Morphology, Physiology, Reaction Chemistry and Manufactu...Gerard B. Hawkins
 
Steam reforming - The Basics of Reforming
Steam reforming  - The Basics of ReformingSteam reforming  - The Basics of Reforming
Steam reforming - The Basics of ReformingGerard B. Hawkins
 
Methanol Synthesis Loop Troubleshooting
Methanol Synthesis Loop TroubleshootingMethanol Synthesis Loop Troubleshooting
Methanol Synthesis Loop TroubleshootingGerard B. Hawkins
 
Theory and Practice of Steam Reforming
Theory and Practice of Steam ReformingTheory and Practice of Steam Reforming
Theory and Practice of Steam ReformingGerard B. Hawkins
 
5 Reasons the Practice of Evidence-Based Medicine Is a Hot Topic
5 Reasons the Practice of Evidence-Based Medicine Is a Hot Topic5 Reasons the Practice of Evidence-Based Medicine Is a Hot Topic
5 Reasons the Practice of Evidence-Based Medicine Is a Hot TopicHealth Catalyst
 
Future Proofing Your Network with the New Cisco Catalyst 3850 10G Aggregation...
Future Proofing Your Network with the New Cisco Catalyst 3850 10G Aggregation...Future Proofing Your Network with the New Cisco Catalyst 3850 10G Aggregation...
Future Proofing Your Network with the New Cisco Catalyst 3850 10G Aggregation...Cisco Enterprise Networks
 
Principles of Pre-reforming Technology
Principles of Pre-reforming TechnologyPrinciples of Pre-reforming Technology
Principles of Pre-reforming TechnologyGerard B. Hawkins
 
Steam Reforming - Common Problems
Steam Reforming - Common ProblemsSteam Reforming - Common Problems
Steam Reforming - Common ProblemsGerard B. Hawkins
 
6 Essential Data Analyst Skills for Your Healthcare Organization
6 Essential Data Analyst Skills for Your Healthcare Organization6 Essential Data Analyst Skills for Your Healthcare Organization
6 Essential Data Analyst Skills for Your Healthcare OrganizationHealth Catalyst
 
Rising Healthcare Costs: Why We Have to Change
Rising Healthcare Costs: Why We Have to ChangeRising Healthcare Costs: Why We Have to Change
Rising Healthcare Costs: Why We Have to ChangeHealth Catalyst
 
Why Process Measures Are Often More Important Than Outcome Measures in Health...
Why Process Measures Are Often More Important Than Outcome Measures in Health...Why Process Measures Are Often More Important Than Outcome Measures in Health...
Why Process Measures Are Often More Important Than Outcome Measures in Health...Health Catalyst
 
(LTS) Low Temperature Shift Catalyst - Comprehensive Overview
(LTS) Low Temperature Shift Catalyst - Comprehensive Overview(LTS) Low Temperature Shift Catalyst - Comprehensive Overview
(LTS) Low Temperature Shift Catalyst - Comprehensive OverviewGerard B. Hawkins
 
Steam Reforming - A Comprehensive Review
Steam Reforming - A Comprehensive ReviewSteam Reforming - A Comprehensive Review
Steam Reforming - A Comprehensive ReviewGerard B. Hawkins
 
Executez votre idee - transformez le futur
Executez votre idee - transformez le futurExecutez votre idee - transformez le futur
Executez votre idee - transformez le futurDavender Gupta
 
Loi C-28 : Consentements-Tactiques
Loi C-28 : Consentements-TactiquesLoi C-28 : Consentements-Tactiques
Loi C-28 : Consentements-TactiquesAQT-presentations
 
romain camenen methodologie
romain camenen methodologieromain camenen methodologie
romain camenen methodologieRomain Camenen
 
Les principes d'un positionnement personnel réussi
Les principes d'un positionnement personnel réussiLes principes d'un positionnement personnel réussi
Les principes d'un positionnement personnel réussiDavender Gupta
 
LES FEMMES ET LA GOUVERNANCE D'ENTREPRISE
LES FEMMES ET LA GOUVERNANCE D'ENTREPRISELES FEMMES ET LA GOUVERNANCE D'ENTREPRISE
LES FEMMES ET LA GOUVERNANCE D'ENTREPRISEStudyWork
 

Andere mochten auch (20)

FCC Catalyst Design: Morphology, Physiology, Reaction Chemistry and Manufactu...
FCC Catalyst Design: Morphology, Physiology, Reaction Chemistry and Manufactu...FCC Catalyst Design: Morphology, Physiology, Reaction Chemistry and Manufactu...
FCC Catalyst Design: Morphology, Physiology, Reaction Chemistry and Manufactu...
 
Steam reforming - The Basics of Reforming
Steam reforming  - The Basics of ReformingSteam reforming  - The Basics of Reforming
Steam reforming - The Basics of Reforming
 
Methanol Synthesis Loop Troubleshooting
Methanol Synthesis Loop TroubleshootingMethanol Synthesis Loop Troubleshooting
Methanol Synthesis Loop Troubleshooting
 
Theory and Practice of Steam Reforming
Theory and Practice of Steam ReformingTheory and Practice of Steam Reforming
Theory and Practice of Steam Reforming
 
5 Reasons the Practice of Evidence-Based Medicine Is a Hot Topic
5 Reasons the Practice of Evidence-Based Medicine Is a Hot Topic5 Reasons the Practice of Evidence-Based Medicine Is a Hot Topic
5 Reasons the Practice of Evidence-Based Medicine Is a Hot Topic
 
Future Proofing Your Network with the New Cisco Catalyst 3850 10G Aggregation...
Future Proofing Your Network with the New Cisco Catalyst 3850 10G Aggregation...Future Proofing Your Network with the New Cisco Catalyst 3850 10G Aggregation...
Future Proofing Your Network with the New Cisco Catalyst 3850 10G Aggregation...
 
Principles of Pre-reforming Technology
Principles of Pre-reforming TechnologyPrinciples of Pre-reforming Technology
Principles of Pre-reforming Technology
 
Steam Reforming - Common Problems
Steam Reforming - Common ProblemsSteam Reforming - Common Problems
Steam Reforming - Common Problems
 
Catalysis and Catalytic reactors RE10
Catalysis and Catalytic reactors RE10Catalysis and Catalytic reactors RE10
Catalysis and Catalytic reactors RE10
 
6 Essential Data Analyst Skills for Your Healthcare Organization
6 Essential Data Analyst Skills for Your Healthcare Organization6 Essential Data Analyst Skills for Your Healthcare Organization
6 Essential Data Analyst Skills for Your Healthcare Organization
 
Rising Healthcare Costs: Why We Have to Change
Rising Healthcare Costs: Why We Have to ChangeRising Healthcare Costs: Why We Have to Change
Rising Healthcare Costs: Why We Have to Change
 
Why Process Measures Are Often More Important Than Outcome Measures in Health...
Why Process Measures Are Often More Important Than Outcome Measures in Health...Why Process Measures Are Often More Important Than Outcome Measures in Health...
Why Process Measures Are Often More Important Than Outcome Measures in Health...
 
Designer As Catalyst
Designer As CatalystDesigner As Catalyst
Designer As Catalyst
 
(LTS) Low Temperature Shift Catalyst - Comprehensive Overview
(LTS) Low Temperature Shift Catalyst - Comprehensive Overview(LTS) Low Temperature Shift Catalyst - Comprehensive Overview
(LTS) Low Temperature Shift Catalyst - Comprehensive Overview
 
Steam Reforming - A Comprehensive Review
Steam Reforming - A Comprehensive ReviewSteam Reforming - A Comprehensive Review
Steam Reforming - A Comprehensive Review
 
Executez votre idee - transformez le futur
Executez votre idee - transformez le futurExecutez votre idee - transformez le futur
Executez votre idee - transformez le futur
 
Loi C-28 : Consentements-Tactiques
Loi C-28 : Consentements-TactiquesLoi C-28 : Consentements-Tactiques
Loi C-28 : Consentements-Tactiques
 
romain camenen methodologie
romain camenen methodologieromain camenen methodologie
romain camenen methodologie
 
Les principes d'un positionnement personnel réussi
Les principes d'un positionnement personnel réussiLes principes d'un positionnement personnel réussi
Les principes d'un positionnement personnel réussi
 
LES FEMMES ET LA GOUVERNANCE D'ENTREPRISE
LES FEMMES ET LA GOUVERNANCE D'ENTREPRISELES FEMMES ET LA GOUVERNANCE D'ENTREPRISE
LES FEMMES ET LA GOUVERNANCE D'ENTREPRISE
 

Ähnlich wie Modern Catalyst

Curscatalyst
CurscatalystCurscatalyst
CurscatalystKar Juan
 
Merb Slices
Merb SlicesMerb Slices
Merb Sliceshassox
 
Symfony 2.0
Symfony 2.0Symfony 2.0
Symfony 2.0GrUSP
 
What's up with Prototype and script.aculo.us?
What's up with Prototype and script.aculo.us?What's up with Prototype and script.aculo.us?
What's up with Prototype and script.aculo.us?Christophe Porteneuve
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.catPablo Godel
 
How to develop modern web application framework
How to develop modern web application frameworkHow to develop modern web application framework
How to develop modern web application frameworktechmemo
 
Exploiting the newer perl to improve your plugins
Exploiting the newer perl to improve your pluginsExploiting the newer perl to improve your plugins
Exploiting the newer perl to improve your pluginsMarian Marinov
 
Monitoring web application behaviour with cucumber-nagios
Monitoring web application behaviour with cucumber-nagiosMonitoring web application behaviour with cucumber-nagios
Monitoring web application behaviour with cucumber-nagiosLindsay Holmwood
 
Writing Modular Command-line Apps with App::Cmd
Writing Modular Command-line Apps with App::CmdWriting Modular Command-line Apps with App::Cmd
Writing Modular Command-line Apps with App::CmdRicardo Signes
 
Modern Getopt for Command Line Processing in Perl
Modern Getopt for Command Line Processing in PerlModern Getopt for Command Line Processing in Perl
Modern Getopt for Command Line Processing in PerlNova Patch
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐいHisateru Tanaka
 
Socket applications
Socket applicationsSocket applications
Socket applicationsJoão Moura
 
Symfony 2 (PHP Quebec 2009)
Symfony 2 (PHP Quebec 2009)Symfony 2 (PHP Quebec 2009)
Symfony 2 (PHP Quebec 2009)Fabien Potencier
 

Ähnlich wie Modern Catalyst (20)

Curscatalyst
CurscatalystCurscatalyst
Curscatalyst
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
Vim Hacks
Vim HacksVim Hacks
Vim Hacks
 
Vim Hacks
Vim HacksVim Hacks
Vim Hacks
 
Merb Slices
Merb SlicesMerb Slices
Merb Slices
 
Symfony 2.0
Symfony 2.0Symfony 2.0
Symfony 2.0
 
What's up with Prototype and script.aculo.us?
What's up with Prototype and script.aculo.us?What's up with Prototype and script.aculo.us?
What's up with Prototype and script.aculo.us?
 
Symfony 2 (PHP day 2009)
Symfony 2 (PHP day 2009)Symfony 2 (PHP day 2009)
Symfony 2 (PHP day 2009)
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
 
How to develop modern web application framework
How to develop modern web application frameworkHow to develop modern web application framework
How to develop modern web application framework
 
Sinatra for REST services
Sinatra for REST servicesSinatra for REST services
Sinatra for REST services
 
Rack Middleware
Rack MiddlewareRack Middleware
Rack Middleware
 
Exploiting the newer perl to improve your plugins
Exploiting the newer perl to improve your pluginsExploiting the newer perl to improve your plugins
Exploiting the newer perl to improve your plugins
 
Monitoring web application behaviour with cucumber-nagios
Monitoring web application behaviour with cucumber-nagiosMonitoring web application behaviour with cucumber-nagios
Monitoring web application behaviour with cucumber-nagios
 
Writing Modular Command-line Apps with App::Cmd
Writing Modular Command-line Apps with App::CmdWriting Modular Command-line Apps with App::Cmd
Writing Modular Command-line Apps with App::Cmd
 
Git::Hooks
Git::HooksGit::Hooks
Git::Hooks
 
Modern Getopt for Command Line Processing in Perl
Modern Getopt for Command Line Processing in PerlModern Getopt for Command Line Processing in Perl
Modern Getopt for Command Line Processing in Perl
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい
 
Socket applications
Socket applicationsSocket applications
Socket applications
 
Symfony 2 (PHP Quebec 2009)
Symfony 2 (PHP Quebec 2009)Symfony 2 (PHP Quebec 2009)
Symfony 2 (PHP Quebec 2009)
 

Mehr von Hideo Kimura

エンジニアリング組織の設計と実践〜merpayの事例から学ぶ、組織とアーキテクトの関係性〜
エンジニアリング組織の設計と実践〜merpayの事例から学ぶ、組織とアーキテクトの関係性〜エンジニアリング組織の設計と実践〜merpayの事例から学ぶ、組織とアーキテクトの関係性〜
エンジニアリング組織の設計と実践〜merpayの事例から学ぶ、組織とアーキテクトの関係性〜Hideo Kimura
 
Webエンジニアが学ぶ自動運転を支える技術
Webエンジニアが学ぶ自動運転を支える技術Webエンジニアが学ぶ自動運転を支える技術
Webエンジニアが学ぶ自動運転を支える技術Hideo Kimura
 
Perl で作るメディアストリーミングサーバー
Perl で作るメディアストリーミングサーバーPerl で作るメディアストリーミングサーバー
Perl で作るメディアストリーミングサーバーHideo Kimura
 
Inside Of Mbga Open Platform
Inside Of Mbga Open PlatformInside Of Mbga Open Platform
Inside Of Mbga Open PlatformHideo Kimura
 
Benchmarks of Perl Web Application Frameworks
Benchmarks of Perl Web Application FrameworksBenchmarks of Perl Web Application Frameworks
Benchmarks of Perl Web Application FrameworksHideo Kimura
 
CGI::Application::Dispatch
CGI::Application::DispatchCGI::Application::Dispatch
CGI::Application::DispatchHideo Kimura
 
Mastering CGI::Application
Mastering CGI::ApplicationMastering CGI::Application
Mastering CGI::ApplicationHideo Kimura
 
Play With Theschwartz
Play With TheschwartzPlay With Theschwartz
Play With TheschwartzHideo Kimura
 
Catalyst::Model::Adaptor
Catalyst::Model::AdaptorCatalyst::Model::Adaptor
Catalyst::Model::AdaptorHideo Kimura
 

Mehr von Hideo Kimura (9)

エンジニアリング組織の設計と実践〜merpayの事例から学ぶ、組織とアーキテクトの関係性〜
エンジニアリング組織の設計と実践〜merpayの事例から学ぶ、組織とアーキテクトの関係性〜エンジニアリング組織の設計と実践〜merpayの事例から学ぶ、組織とアーキテクトの関係性〜
エンジニアリング組織の設計と実践〜merpayの事例から学ぶ、組織とアーキテクトの関係性〜
 
Webエンジニアが学ぶ自動運転を支える技術
Webエンジニアが学ぶ自動運転を支える技術Webエンジニアが学ぶ自動運転を支える技術
Webエンジニアが学ぶ自動運転を支える技術
 
Perl で作るメディアストリーミングサーバー
Perl で作るメディアストリーミングサーバーPerl で作るメディアストリーミングサーバー
Perl で作るメディアストリーミングサーバー
 
Inside Of Mbga Open Platform
Inside Of Mbga Open PlatformInside Of Mbga Open Platform
Inside Of Mbga Open Platform
 
Benchmarks of Perl Web Application Frameworks
Benchmarks of Perl Web Application FrameworksBenchmarks of Perl Web Application Frameworks
Benchmarks of Perl Web Application Frameworks
 
CGI::Application::Dispatch
CGI::Application::DispatchCGI::Application::Dispatch
CGI::Application::Dispatch
 
Mastering CGI::Application
Mastering CGI::ApplicationMastering CGI::Application
Mastering CGI::Application
 
Play With Theschwartz
Play With TheschwartzPlay With Theschwartz
Play With Theschwartz
 
Catalyst::Model::Adaptor
Catalyst::Model::AdaptorCatalyst::Model::Adaptor
Catalyst::Model::Adaptor
 

Modern Catalyst