SlideShare uma empresa Scribd logo
1 de 55
DBIx::Skinny

     Ryo Miyake - nekoya -
         (id:studio-m)
,. -‐'''''""¨
                                (.     _,,,... -        |
                              |i i|      }! }} / |
                               |l {      j} /,, //                        10   LT
                                 i|:! _         u {:}//
                               | u' } , _,!V, |
                           ´f _{ {, '                ,          55
                      /'         | | {´,) `/ |< i
               ,
                  | _
                          ) iL         u' | |
                                   ! ⊇ ' :} V:::::              5    LT
            /               7'T'' u' __ /:::::::/
                 /'´r -—          ‐   ´ '"´ :::: -
          / //          ¨´ /'            ::::: ´
    '/         :::::` - ___ ::::: /                         }
_      /:::::::::::::::::::::::::: ` -{:::...
•               nekoya

• id:studio-m
• http://twitter.com/nekoya
• http://wassr.jp/user/nekoya
•
DBIx::SKinny
    by nekokak
SQL




DBIx::Skinny::Manual::JA::Intro
• CPAN
• github
• http://github.com/nekokak/p5-dbix-skinny
DBI          ORM


•    SQL

•          Row
• MyApp::DB, MyApp::DB::Schema
•       Row                 DBIx::Skinny::Row

• MyApp::DB::Row::{Table}
rule                      inflate/deflate
inflate/deflate


install_inflate_rule '^.+_at$' => callback {
   inflate {
       my $value = shift;
       return $value;
   };
   deflate {
       my $value = shift;
       return $value;
   };
};
rule                      inflate/deflate
my $timezone = DateTime::TimeZone->new(name => 'Asia/Tokyo');
install_inflate_rule '^.+_at$' => callback {
   inflate {
       my $value = shift;
       my $dt = DateTime::Format::Strptime->new(
          pattern => '%Y-%m-%d %H:%M:%S',
          time_zone => $timezone,
       )->parse_datetime($value);
       return DateTime->from_object( object => $dt );
   };
   deflate {
       my $value = shift;
       return DateTime::Format::MySQL->format_datetime($value);
   };
};
trigger

trigger
trigger
install_table 'user' => schema {
   pk 'id';
   columns qw/id name mail created_at updated_at/;
   trigger pre_insert => sub {
       my ( $class, $args ) = @_;
       $args->{created_at} ||= DateTime->now;
   };
   trigger pre_update => sub {
       my ( $class, $args ) = @_;
       $args->{updated_at} ||= DateTime->now;
   };
};
• inflate/deflate
• trigger
    trigger

    created_at    pre_insert
common_trigger (ry
trigger
trigger                common_trigger

install_common_trigger pre_insert => sub {
   my ($self, $args) = @_;
   $args->{created_at} ||= DateTime->now;
};


•                          trigger
trigger

install_common_trigger pre_insert => sub {
   my ($self, $args, $table) = @_;
   my $columns = $self->schema->schema_info
->{$table}->{columns};
   $args->{created_at} ||= DateTime->now
       if grep {/^created_at$/} @$columns;
};

               trigger
nekokak        YAPC

• http://nekokak.org/presen/yapcasia2009-dbix-
  skinny/


github

• http://github.com/nekokak/p5-dbix-skinny/blob/
  master/lib/DBIx/Skinny/Manual/JA/
DBIx::Skinny::Schema::Loader
MyApp::DB::Schema      install_table



• pk columns DB
• http://github.com/nekoya/p5-dbix-skinny-schema-
  loader
: load_schema

package Your::DB::Schema;
use base qw/DBIx::Skinny::Schema::Loader/;

__PACKAGE__->load_schema;
: load_schema
package Your::DB::Schema;
use base qw/DBIx::Skinny::Schema::Loader/;

install_table books => schema {
   trigger pre_insert => sub {
       my ($class, $args) = @_;
       $args->{ name } = 'HOGE';
   }
};
__PACKAGE__->load_schema;

1;
: make_schema_at
publish_schema.pl
   use DBIx::Skinny::Schema::Loader
         qw/make_schema_at/;


   print make_schema_at(
        'Your::DB::Schema',                # Schema class
        { },                               # options
        [ 'dbi:SQLite:test.db', '', '' ]   # connect info
   );
: make_schema_at

$ perl publish_schema.pl > Your/DB/Schema.pm

• DBIC
• Skinny   Schema 1

•
make_schema_at

my $tmpl = << '...';
# custom template
install_utf8_columns qw/jpname title content/;
install_common_trigger pre_insert => sub {
   my ($self, $args) = @_;
   $args->{created_at} ||= DateTime->now;
};
...
make_schema_at

print make_schema_at(
     'Mock::DB::Schema',
     {
         before_template => $before,
     },
     [ 'dbi:SQLite:test.db', '', '' ]
);

 • after_template
table_template

 • install_table
 • TT         table, pk, columns

install_table [% table %] => schema {
     pk '[% pk %]';
     columns qw/[% columns %]/;
};
DBIx::Skinny::
InflateColumn::DateTime
DBIx::Skinny::InflateColumn::DateTime

• _at, _on            DateTime           inflate/deflate

• created_xx, updated_xx
    inspired
    DBIx::Class::InflateColumn::DateTime::Auto
    (hidek++)
    http://blog.hide-k.net/archives/2006/08/
    dbixclassauto_i.phpdbixclassauto_i.php
DBIx::Skinny::InflateColumn::DateTime

• MySQL
• timestamp            now()



• insert      select

• Perl
•                                 …
DBIx::Skinny::InflateColumn::DateTime
package Your::DB::Schema;
use DBIx::Skinny::Schema;
use DBIx::Skinny::InflateColumn::DateTime;

install_table table1 => {
   pk 'id';
   columns qw/id name created_at updated_at/;
};

install_table table2 => {
   pk 'id';
   columns qw/id name booked_on created_on updated_on/;
};
Ark::Plugin::Authentication::
    Store::DBIx::Skinny
Ark by typester

• Catalyst
• http://typester.stfuawsc.com/slides/yapsasia2009-
  ark/
•        Ark

• Ark + Skinny
package MyApp;
use Ark;
use MyApp::Models;

use_model 'MyApp::Models';

use_plugins qw{
  Session
  Session::State::Cookie
  Session::Store::Memory

     Authentication
     Authentication::Credential::Password
     Authentication::Store::DBIx::Skinny
};
config 'Plugin::Authentication::Store::DBIx::Skinny' => {
   model     => 'db',
   table    => 'members',
   user_field => 'name',
};




•                      DBIC

•
DBIx::Skinny::AR
DBIx::Skinny::AR

• Any::Moose
• ActiveRecord
• http://github.com/nekoya/p5-dbix-skinny-ar
DBIx::Skinny::AR


• Model
•                     DB
DBIx::Skinny::AR
DBIC

• Row          use base 'DBIx::Class'

• Model   DB

• DBIC
• pixis                      …
DBIx::Skinny::AR



  DBIx::Skinny (ry
DBIx::Skinny::AR
package MyApp::DB;
use DBIx::Skinny;

package MyApp::DB::Schema;
use DBIx::Skinny::Schema;

install_table books => schema {
   pk 'id';
   columns qw/id author_id title/
};
• MyApp::DB::Schema          MyApp/DB.pm
• MyApp::DB
   use DBIx::Skinny setup => {
      dsn => 'dbi:SQLite:test.db',
      username => '',
      password => '',
   };


   MyApp::DB->connect($conf->{ database });
DBIx::Skinny::AR
package MyApp::AR;
use Any::Moose;
extends 'DBIx::Skinny::AR';

__PACKAGE__->setup('MyApp::DB');

1;
package Mock::Book;
use Any::Moose;
extends 'Mock::AR';

use Carp;

has 'id' => (
   is => 'rw',
   isa => 'Undef | Int',
);

has 'author_id' => (
   is => 'rw',
   isa => 'Undef | Int',
);
has 'title' => (
   is     => 'rw',
   isa => 'Str',
   traits => [qw/Unique/],
);

__PACKAGE__->belongs_to('author');

1;
find
my $book = MyApp::Book->find(1);

my $book = MyApp::Book->find({ title => ‘hoge’ });

my $books = MyApp::Book->find_all;

my $latests = MyApp::Book->find_all(
   { author_id => $author_id },
   { order_by => { id => 'desc' } }
);
Relationships
• belongs_to
• has_one
• has_many
• many_to_many
Relationships
• $book->author
•
   has 'author' => (
      is    => 'ro',
      isa => 'MyApp::Author',
      clearer => 'clear_author',
      lazy => 1,
      default => sub { … }
   );
Relationships
DB

 • $book->author->clear_author
 • $book->author->reload
Trait::Unique
has 'title' => (
   is     => 'rw',
   isa => 'Str',
   traits => [qw/Unique/],
);


 •
 •
 •          SQL
• perldoc DBIx::Skinny

•
• SQLite

•
IRC

#dbix-skinny at perl.org ( irc.perl.org )

#perl-casual at Freenode ( irc.freenode.net )
Skinny   Skinny




              [eof]

Mais conteúdo relacionado

Mais procurados

Leveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHPLeveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHPJeremy Kendall
 
Php 102: Out with the Bad, In with the Good
Php 102: Out with the Bad, In with the GoodPhp 102: Out with the Bad, In with the Good
Php 102: Out with the Bad, In with the GoodJeremy Kendall
 
Leveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHPLeveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHPJeremy Kendall
 
Inside Bokete: Web Application with Mojolicious and others
Inside Bokete:  Web Application with Mojolicious and othersInside Bokete:  Web Application with Mojolicious and others
Inside Bokete: Web Application with Mojolicious and othersYusuke Wada
 
Word Play in the Digital Age: Building Text Bots with Tracery
Word Play in the Digital Age: Building Text Bots with TraceryWord Play in the Digital Age: Building Text Bots with Tracery
Word Play in the Digital Age: Building Text Bots with TracerySarah Sexton
 
Getting Started with Microsoft Bot Framework
Getting Started with Microsoft Bot FrameworkGetting Started with Microsoft Bot Framework
Getting Started with Microsoft Bot FrameworkSarah Sexton
 
Perl web frameworks
Perl web frameworksPerl web frameworks
Perl web frameworksdiego_k
 
Web Apps in Perl - HTTP 101
Web Apps in Perl - HTTP 101Web Apps in Perl - HTTP 101
Web Apps in Perl - HTTP 101hendrikvb
 
Let's write secure drupal code! - Drupal Camp Pannonia 2019
Let's write secure drupal code! - Drupal Camp Pannonia 2019Let's write secure drupal code! - Drupal Camp Pannonia 2019
Let's write secure drupal code! - Drupal Camp Pannonia 2019Balázs Tatár
 
PHP and Rich Internet Applications
PHP and Rich Internet ApplicationsPHP and Rich Internet Applications
PHP and Rich Internet Applicationselliando dias
 
Undercover Pods / WP Functions
Undercover Pods / WP FunctionsUndercover Pods / WP Functions
Undercover Pods / WP Functionspodsframework
 
コードの動的生成のお話
コードの動的生成のお話コードの動的生成のお話
コードの動的生成のお話鉄次 尾形
 
Let's write secure Drupal code! DUG Belgium - 08/08/2019
Let's write secure Drupal code! DUG Belgium - 08/08/2019Let's write secure Drupal code! DUG Belgium - 08/08/2019
Let's write secure Drupal code! DUG Belgium - 08/08/2019Balázs Tatár
 
Building Modern and Secure PHP Applications – Codementor Office Hours with Be...
Building Modern and Secure PHP Applications – Codementor Office Hours with Be...Building Modern and Secure PHP Applications – Codementor Office Hours with Be...
Building Modern and Secure PHP Applications – Codementor Office Hours with Be...Arc & Codementor
 

Mais procurados (20)

Leveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHPLeveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHP
 
Php 102: Out with the Bad, In with the Good
Php 102: Out with the Bad, In with the GoodPhp 102: Out with the Bad, In with the Good
Php 102: Out with the Bad, In with the Good
 
Leveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHPLeveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHP
 
Redis
RedisRedis
Redis
 
Inside Bokete: Web Application with Mojolicious and others
Inside Bokete:  Web Application with Mojolicious and othersInside Bokete:  Web Application with Mojolicious and others
Inside Bokete: Web Application with Mojolicious and others
 
Developing apps using Perl
Developing apps using PerlDeveloping apps using Perl
Developing apps using Perl
 
Word Play in the Digital Age: Building Text Bots with Tracery
Word Play in the Digital Age: Building Text Bots with TraceryWord Play in the Digital Age: Building Text Bots with Tracery
Word Play in the Digital Age: Building Text Bots with Tracery
 
Getting Started with Microsoft Bot Framework
Getting Started with Microsoft Bot FrameworkGetting Started with Microsoft Bot Framework
Getting Started with Microsoft Bot Framework
 
Mojo as a_client
Mojo as a_clientMojo as a_client
Mojo as a_client
 
Perl web frameworks
Perl web frameworksPerl web frameworks
Perl web frameworks
 
Cpsh sh
Cpsh shCpsh sh
Cpsh sh
 
Web Apps in Perl - HTTP 101
Web Apps in Perl - HTTP 101Web Apps in Perl - HTTP 101
Web Apps in Perl - HTTP 101
 
Let's write secure drupal code! - Drupal Camp Pannonia 2019
Let's write secure drupal code! - Drupal Camp Pannonia 2019Let's write secure drupal code! - Drupal Camp Pannonia 2019
Let's write secure drupal code! - Drupal Camp Pannonia 2019
 
PHP and Rich Internet Applications
PHP and Rich Internet ApplicationsPHP and Rich Internet Applications
PHP and Rich Internet Applications
 
Undercover Pods / WP Functions
Undercover Pods / WP FunctionsUndercover Pods / WP Functions
Undercover Pods / WP Functions
 
コードの動的生成のお話
コードの動的生成のお話コードの動的生成のお話
コードの動的生成のお話
 
Substitution Cipher
Substitution CipherSubstitution Cipher
Substitution Cipher
 
JSON and the APInauts
JSON and the APInautsJSON and the APInauts
JSON and the APInauts
 
Let's write secure Drupal code! DUG Belgium - 08/08/2019
Let's write secure Drupal code! DUG Belgium - 08/08/2019Let's write secure Drupal code! DUG Belgium - 08/08/2019
Let's write secure Drupal code! DUG Belgium - 08/08/2019
 
Building Modern and Secure PHP Applications – Codementor Office Hours with Be...
Building Modern and Secure PHP Applications – Codementor Office Hours with Be...Building Modern and Secure PHP Applications – Codementor Office Hours with Be...
Building Modern and Secure PHP Applications – Codementor Office Hours with Be...
 

Destaque

アラートメールの運用
アラートメールの運用アラートメールの運用
アラートメールの運用Ryo Miyake
 
俺とプログラマーズカフェ
俺とプログラマーズカフェ俺とプログラマーズカフェ
俺とプログラマーズカフェRyo Miyake
 
なぜパスワードを使い回すとシステム部が切れるのか
なぜパスワードを使い回すとシステム部が切れるのかなぜパスワードを使い回すとシステム部が切れるのか
なぜパスワードを使い回すとシステム部が切れるのか歩 奥山
 
オブジェクト指向プログラミング再入門
オブジェクト指向プログラミング再入門オブジェクト指向プログラミング再入門
オブジェクト指向プログラミング再入門Ryo Miyake
 
インターネット広告とPerl、ここ数年の歩み
インターネット広告とPerl、ここ数年の歩みインターネット広告とPerl、ここ数年の歩み
インターネット広告とPerl、ここ数年の歩みRyo Miyake
 

Destaque (8)

アラートメールの運用
アラートメールの運用アラートメールの運用
アラートメールの運用
 
俺とプログラマーズカフェ
俺とプログラマーズカフェ俺とプログラマーズカフェ
俺とプログラマーズカフェ
 
About test
About testAbout test
About test
 
SmartCSS
SmartCSSSmartCSS
SmartCSS
 
Python setup
Python setupPython setup
Python setup
 
なぜパスワードを使い回すとシステム部が切れるのか
なぜパスワードを使い回すとシステム部が切れるのかなぜパスワードを使い回すとシステム部が切れるのか
なぜパスワードを使い回すとシステム部が切れるのか
 
オブジェクト指向プログラミング再入門
オブジェクト指向プログラミング再入門オブジェクト指向プログラミング再入門
オブジェクト指向プログラミング再入門
 
インターネット広告とPerl、ここ数年の歩み
インターネット広告とPerl、ここ数年の歩みインターネット広告とPerl、ここ数年の歩み
インターネット広告とPerl、ここ数年の歩み
 

Semelhante a DBIx::Skinnyと仲間たち

Mojo – Simple REST Server
Mojo – Simple REST ServerMojo – Simple REST Server
Mojo – Simple REST Serverhendrikvb
 
テストデータどうしてますか?
テストデータどうしてますか?テストデータどうしてますか?
テストデータどうしてますか?Yuki Shibazaki
 
Refresh Austin - Intro to Dexy
Refresh Austin - Intro to DexyRefresh Austin - Intro to Dexy
Refresh Austin - Intro to Dexyananelson
 
Curscatalyst
CurscatalystCurscatalyst
CurscatalystKar Juan
 
Creating Reusable Puppet Profiles
Creating Reusable Puppet ProfilesCreating Reusable Puppet Profiles
Creating Reusable Puppet ProfilesBram Vogelaar
 
Rails 3: Dashing to the Finish
Rails 3: Dashing to the FinishRails 3: Dashing to the Finish
Rails 3: Dashing to the FinishYehuda Katz
 
[WLDN] Supercharging word press development in 2018
[WLDN] Supercharging word press development in 2018[WLDN] Supercharging word press development in 2018
[WLDN] Supercharging word press development in 2018Adam Tomat
 
Introduction To Moco
Introduction To MocoIntroduction To Moco
Introduction To MocoNaoya Ito
 
Doctrine For Beginners
Doctrine For BeginnersDoctrine For Beginners
Doctrine For BeginnersJonathan Wage
 
Lecture 03 - JQuery.pdf
Lecture 03 - JQuery.pdfLecture 03 - JQuery.pdf
Lecture 03 - JQuery.pdfLê Thưởng
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overviewYehuda Katz
 
Becoming a better WordPress Developer
Becoming a better WordPress DeveloperBecoming a better WordPress Developer
Becoming a better WordPress DeveloperJoey Kudish
 
Bioinformatics p5-bioperl v2013-wim_vancriekinge
Bioinformatics p5-bioperl v2013-wim_vancriekingeBioinformatics p5-bioperl v2013-wim_vancriekinge
Bioinformatics p5-bioperl v2013-wim_vancriekingeProf. Wim Van Criekinge
 
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet Campmodern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet CampPuppet
 
Workshop quality assurance for php projects - ZendCon 2013
Workshop quality assurance for php projects - ZendCon 2013Workshop quality assurance for php projects - ZendCon 2013
Workshop quality assurance for php projects - ZendCon 2013Michelangelo van Dam
 

Semelhante a DBIx::Skinnyと仲間たち (20)

Mojo – Simple REST Server
Mojo – Simple REST ServerMojo – Simple REST Server
Mojo – Simple REST Server
 
About Data::ObjectDriver
About Data::ObjectDriverAbout Data::ObjectDriver
About Data::ObjectDriver
 
Blog Hacks 2011
Blog Hacks 2011Blog Hacks 2011
Blog Hacks 2011
 
テストデータどうしてますか?
テストデータどうしてますか?テストデータどうしてますか?
テストデータどうしてますか?
 
Refresh Austin - Intro to Dexy
Refresh Austin - Intro to DexyRefresh Austin - Intro to Dexy
Refresh Austin - Intro to Dexy
 
Curscatalyst
CurscatalystCurscatalyst
Curscatalyst
 
Creating Reusable Puppet Profiles
Creating Reusable Puppet ProfilesCreating Reusable Puppet Profiles
Creating Reusable Puppet Profiles
 
Rails 3: Dashing to the Finish
Rails 3: Dashing to the FinishRails 3: Dashing to the Finish
Rails 3: Dashing to the Finish
 
[WLDN] Supercharging word press development in 2018
[WLDN] Supercharging word press development in 2018[WLDN] Supercharging word press development in 2018
[WLDN] Supercharging word press development in 2018
 
Perl object ?
Perl object ?Perl object ?
Perl object ?
 
Introduction To Moco
Introduction To MocoIntroduction To Moco
Introduction To Moco
 
Doctrine For Beginners
Doctrine For BeginnersDoctrine For Beginners
Doctrine For Beginners
 
Lecture 03 - JQuery.pdf
Lecture 03 - JQuery.pdfLecture 03 - JQuery.pdf
Lecture 03 - JQuery.pdf
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overview
 
Bioinformatica p6-bioperl
Bioinformatica p6-bioperlBioinformatica p6-bioperl
Bioinformatica p6-bioperl
 
Becoming a better WordPress Developer
Becoming a better WordPress DeveloperBecoming a better WordPress Developer
Becoming a better WordPress Developer
 
Bioinformatics p5-bioperl v2013-wim_vancriekinge
Bioinformatics p5-bioperl v2013-wim_vancriekingeBioinformatics p5-bioperl v2013-wim_vancriekinge
Bioinformatics p5-bioperl v2013-wim_vancriekinge
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet Campmodern module development - Ken Barber 2012 Edinburgh Puppet Camp
modern module development - Ken Barber 2012 Edinburgh Puppet Camp
 
Workshop quality assurance for php projects - ZendCon 2013
Workshop quality assurance for php projects - ZendCon 2013Workshop quality assurance for php projects - ZendCon 2013
Workshop quality assurance for php projects - ZendCon 2013
 

Último

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGSujit Pal
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 

Último (20)

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Google AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAGGoogle AI Hackathon: LLM based Evaluator for RAG
Google AI Hackathon: LLM based Evaluator for RAG
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 

DBIx::Skinnyと仲間たち