SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
MAKING THE MOST OF 2.2
        MARK STORY
         @MARK_STORY
PACKING IN THE GOOD
2.0.0 was release October 18, 2011
Since then 2.1, 2.2, and 2.3 have been released or started.
Over 20 releases since 2.0.0.
Highest release velocity ever for CakePHP.
FOCUS ON PROBLEMS
We've tried to keep releases focused on solving real world problems
                    developers have everyday.
               Make upgrading as easy as possible.
VIEW BLOCKS
                            PROBLEM
Multiple similar views would often contain repeated structural
HTML.
Apps suffered from element-itis to keep HTML DRY.
Piles of elements make code hard to follow and understand.
Inspired by blocks in Jinja/Twig.
Allows you to create slots/blocks in layouts or parent templates.
Helps keep views/layouts more DRY by letting you create
extensible HTML content.
Replaces annoying magic variables like $ c i t _ o _ a o t
                                         srpsfrlyu
and $ o t n _ o _ a o t
      cnetfrlyu.
EXAMPLE
Parent wrapper view with a child view
PARENT VIEW
<1cas"otn-il"<=$hs>ec(tte) ?<h>
 h ls=cnettte>? ti-fth'il'; >/1
<i cas"otn"
 dv ls=cnet>
<=$hs>ec(cnet) ?
 ? ti-fth'otn'; >
<dv
 /i>
<i cas"iea"
 dv ls=sdbr>
<=$hs>ec(sdbr) ?
 ? ti-fth'iea'; >
<dv
 /i>
<ppi (ti-fth'aiain):?
 ?h f $hs>ec(pgnto') >
<i cas"aiain>
 dv ls=pgnto"
<=$hs>ec(pgnto';?
 ? ti-fth'aiain) >
<dv
 /i>
<ppedf ?
 ?h ni; >
CHILD VIEW
<pp$hs>xed'.cmo/iea.t';?
 ?h ti-etn(./omnsdbrcp) >
<pp$hs>sin'il' 'rdc ls';?
 ?h ti-asg(tte, Pout it) >
<pp$hs>tr(cnet) ?
 ?h ti-sat'otn'; >
<>hsi tecnet/>
 pTi s h otn<p
<pp$hs>n(;?
 ?h ti-ed) >

<pp$hs>tr(sdbr) ?
 ?h ti-sat'iea'; >
<>hsi asdbr/>
 pTi s  iea<p
<pp$hs>n(;?
 ?h ti-ed) >
JSON & XML VIEWS
                            PROBLEM
Previously creating JSON and XML views that just serialized data
was a pain.
Tons of repetitive views and layout files required.
Two view classes that allow you to easily serialize data for simple
uses.
Special _ e i l z view variable defines which view variables
         sraie
should be serialized.
You can also use normal view files if you need to massage data first.
Integrates well with existing features like exception handling and
RequestHandlerComponent.
EXAMPLE
<pp
 ?h
/ I acnrle.
 / n  otolr
fnto idx){
 ucin ne(
     $hs>e(tss,$hs>aiae);
      ti-st'ak' ti-pgnt()
     $hs>e(_eilz' ary'ak')
      ti-st'sraie, ra(tss);
}
HASH CLASS
                            PROBLEM
S t full of inconsistencies. Both in the API and path selector
 e is
syntax.
Set::extract() while powerful, is slow and insane inside.
xpath-ish syntax full of un-fixable bugs and not supported in most
methods.
Hash implements >90% of Set's API.
All methods have a consistent signature.
The same dot notation features are supported everywhere.
Up to 1.6x faster on extract().
Most methods are faster as well.
PERFORMANCE COMPARISONS
Do a similar operation 1000 times, on the same data.
Hs:etat$,'n.ril.d)
 ah:xrc(d {}Atcei'   0.215131998
St:xrc(/ril/d,$)
 e:etat'Atcei' d     0.23719382
1.1x improvement
H s : e t a t $ , ' n . o m n . n . d ) 0.173635005
 ah:xrc(d {}Cmet{}i'
St:xrc(/omn/d,$)
 e:etat'Cmeti' d                        0.201920986
1.1x improvement
Hs:mxiesos$)
 ah:aDmnin(d       0.075587987
St:onDm$,tu)
 e:cuti(d re       0.575523138
7.6x improvement
API CONSISTENCY
Every method takes an array of data as the first argument.
Second argument is always one or more paths.
A consistent API is easier to document, understand and remember.
CAKETIME & CAKENUMBER
                      PROBLEM
T m H l e , N m e H l e and T x H l e have some very
 ieepr ubrepr                         etepr
useful methods.
But they are all trapped in a helper.
Expose non HTML related features as a utility library.
Greatly improve timezone handling.
New features for testing & working with datetimes.
EXAMPLE
<pp
 ?h
Ap:ss'aeie,'tlt';
 p:ue(CkTm' Uiiy)
Ap:ss'aeubr,'tlt';
 p:ue(CkNme' Uiiy)

$t =CkTm:tSre(dttm,'mrc/oot';
 uc  aeie:oevr$aeie AeiaTrno)
$oa =CkTm:iTdy$ietm)
 tdy  aeie:soa(tmsap;

$eut=CkNme:tRaalSz(oeeaye;
 rsl  aeubr:oedbeie$nTrbt)
LOGGING++
                         PROBLEM
Granular logging based on application section was impossible.
Log messages were simply broadcast to every connected logger.
Borrowed idea of logging 'scopes' from python's l g i g
                                                   o g n module.
Log messages can be tagged with scopes.
Only loggers interested in those scopes will get scoped messages.
ATTACH A LOGGER WITH A SCOPE
<pp
 ?h
CkLg:ofg'amns,ary
 aeo:cni(pyet' ra(
    'nie = 'mi'
     egn' > Eal
    'cps = ary'amns,'iln',
     soe' > ra(pyet' blig)
    'o = 'akeapecm
     t' > mr@xml.o'
);
 )
LOG MESSAGES WITH A SCOPE
<pp
 ?h
ty{
 r
     $aea-poes$amn)
      gtwy>rcs(pyet;
}cth(amnEcpin$){
  ac  Pyetxeto e
     CkLg:ro(
      aeo:err
          'rnato fie '.$-gtesg(,
           Tascin ald   e>eMsae)
          ary'amns,'iln'
           ra(pyet' blig)
     );
}
NOW TO JOSE

Weitere ähnliche Inhalte

Was ist angesagt?

Php tips-and-tricks4128
Php tips-and-tricks4128Php tips-and-tricks4128
Php tips-and-tricks4128PrinceGuru MS
 
Speed up your developments with Symfony2
Speed up your developments with Symfony2Speed up your developments with Symfony2
Speed up your developments with Symfony2Hugo Hamon
 
Dependency Injection with PHP 5.3
Dependency Injection with PHP 5.3Dependency Injection with PHP 5.3
Dependency Injection with PHP 5.3Fabien Potencier
 
Dependency Injection IPC 201
Dependency Injection IPC 201Dependency Injection IPC 201
Dependency Injection IPC 201Fabien Potencier
 
Php unit the-mostunknownparts
Php unit the-mostunknownpartsPhp unit the-mostunknownparts
Php unit the-mostunknownpartsBastian Feder
 
Corephpcomponentpresentation 1211425966721657-8
Corephpcomponentpresentation 1211425966721657-8Corephpcomponentpresentation 1211425966721657-8
Corephpcomponentpresentation 1211425966721657-8PrinceGuru MS
 
Dependency injection - phpday 2010
Dependency injection - phpday 2010Dependency injection - phpday 2010
Dependency injection - phpday 2010Fabien Potencier
 
Lithium: The Framework for People Who Hate Frameworks
Lithium: The Framework for People Who Hate FrameworksLithium: The Framework for People Who Hate Frameworks
Lithium: The Framework for People Who Hate FrameworksNate Abele
 
Objects, Testing, and Responsibility
Objects, Testing, and ResponsibilityObjects, Testing, and Responsibility
Objects, Testing, and Responsibilitymachuga
 
Dependency injection in PHP 5.3/5.4
Dependency injection in PHP 5.3/5.4Dependency injection in PHP 5.3/5.4
Dependency injection in PHP 5.3/5.4Fabien Potencier
 
PHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php frameworkPHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php frameworkG Woo
 
Your code sucks, let's fix it
Your code sucks, let's fix itYour code sucks, let's fix it
Your code sucks, let's fix itRafael Dohms
 
The Zen of Lithium
The Zen of LithiumThe Zen of Lithium
The Zen of LithiumNate Abele
 
The Beauty and the Beast
The Beauty and the BeastThe Beauty and the Beast
The Beauty and the BeastBastian Feder
 
PHP Traits
PHP TraitsPHP Traits
PHP Traitsmattbuzz
 
Can't Miss Features of PHP 5.3 and 5.4
Can't Miss Features of PHP 5.3 and 5.4Can't Miss Features of PHP 5.3 and 5.4
Can't Miss Features of PHP 5.3 and 5.4Jeff Carouth
 
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2Fabien Potencier
 
PHP security audits
PHP security auditsPHP security audits
PHP security auditsDamien Seguy
 

Was ist angesagt? (20)

Php tips-and-tricks4128
Php tips-and-tricks4128Php tips-and-tricks4128
Php tips-and-tricks4128
 
Speed up your developments with Symfony2
Speed up your developments with Symfony2Speed up your developments with Symfony2
Speed up your developments with Symfony2
 
Dependency Injection with PHP 5.3
Dependency Injection with PHP 5.3Dependency Injection with PHP 5.3
Dependency Injection with PHP 5.3
 
Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010
 
Dependency Injection IPC 201
Dependency Injection IPC 201Dependency Injection IPC 201
Dependency Injection IPC 201
 
Php unit the-mostunknownparts
Php unit the-mostunknownpartsPhp unit the-mostunknownparts
Php unit the-mostunknownparts
 
Corephpcomponentpresentation 1211425966721657-8
Corephpcomponentpresentation 1211425966721657-8Corephpcomponentpresentation 1211425966721657-8
Corephpcomponentpresentation 1211425966721657-8
 
Dependency injection - phpday 2010
Dependency injection - phpday 2010Dependency injection - phpday 2010
Dependency injection - phpday 2010
 
Lithium: The Framework for People Who Hate Frameworks
Lithium: The Framework for People Who Hate FrameworksLithium: The Framework for People Who Hate Frameworks
Lithium: The Framework for People Who Hate Frameworks
 
Objects, Testing, and Responsibility
Objects, Testing, and ResponsibilityObjects, Testing, and Responsibility
Objects, Testing, and Responsibility
 
Dependency injection in PHP 5.3/5.4
Dependency injection in PHP 5.3/5.4Dependency injection in PHP 5.3/5.4
Dependency injection in PHP 5.3/5.4
 
PHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php frameworkPHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php framework
 
Your code sucks, let's fix it
Your code sucks, let's fix itYour code sucks, let's fix it
Your code sucks, let's fix it
 
The Zen of Lithium
The Zen of LithiumThe Zen of Lithium
The Zen of Lithium
 
The Beauty and the Beast
The Beauty and the BeastThe Beauty and the Beast
The Beauty and the Beast
 
PHP Traits
PHP TraitsPHP Traits
PHP Traits
 
Symfony2 - OSIDays 2010
Symfony2 - OSIDays 2010Symfony2 - OSIDays 2010
Symfony2 - OSIDays 2010
 
Can't Miss Features of PHP 5.3 and 5.4
Can't Miss Features of PHP 5.3 and 5.4Can't Miss Features of PHP 5.3 and 5.4
Can't Miss Features of PHP 5.3 and 5.4
 
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
 
PHP security audits
PHP security auditsPHP security audits
PHP security audits
 

Ähnlich wie Making the most of 2.2

The State of PHPUnit
The State of PHPUnitThe State of PHPUnit
The State of PHPUnitEdorian
 
The State of PHPUnit
The State of PHPUnitThe State of PHPUnit
The State of PHPUnitEdorian
 
The state of PHPUnit
The state of PHPUnitThe state of PHPUnit
The state of PHPUnitEdorian
 
Beginner workshop to angularjs presentation at Google
Beginner workshop to angularjs presentation at GoogleBeginner workshop to angularjs presentation at Google
Beginner workshop to angularjs presentation at GoogleAri Lerner
 
How Xslate Works
How Xslate WorksHow Xslate Works
How Xslate WorksGoro Fuji
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJSPat Cito
 
Computer notes - Hashing
Computer notes - HashingComputer notes - Hashing
Computer notes - Hashingecomputernotes
 
Building modern web apps with html5, javascript, and java
Building modern web apps with html5, javascript, and javaBuilding modern web apps with html5, javascript, and java
Building modern web apps with html5, javascript, and javaAlexander Gyoshev
 
Introduction to source{d} Engine and source{d} Lookout
Introduction to source{d} Engine and source{d} Lookout Introduction to source{d} Engine and source{d} Lookout
Introduction to source{d} Engine and source{d} Lookout source{d}
 
computer notes - Data Structures - 35
computer notes - Data Structures - 35computer notes - Data Structures - 35
computer notes - Data Structures - 35ecomputernotes
 
course slides -- powerpoint
course slides -- powerpointcourse slides -- powerpoint
course slides -- powerpointwebhostingguy
 
PhpUnit Best Practices
PhpUnit Best PracticesPhpUnit Best Practices
PhpUnit Best PracticesEdorian
 
Ch ch-changes cake php2
Ch ch-changes cake php2Ch ch-changes cake php2
Ch ch-changes cake php2markstory
 
Practical catalyst
Practical catalystPractical catalyst
Practical catalystdwm042
 
Groovy Introduction - JAX Germany - 2008
Groovy Introduction - JAX Germany - 2008Groovy Introduction - JAX Germany - 2008
Groovy Introduction - JAX Germany - 2008Guillaume Laforge
 
Getting started with ES6
Getting started with ES6Getting started with ES6
Getting started with ES6Nitay Neeman
 
Good practices for PrestaShop code security and optimization
Good practices for PrestaShop code security and optimizationGood practices for PrestaShop code security and optimization
Good practices for PrestaShop code security and optimizationPrestaShop
 

Ähnlich wie Making the most of 2.2 (20)

The State of PHPUnit
The State of PHPUnitThe State of PHPUnit
The State of PHPUnit
 
The State of PHPUnit
The State of PHPUnitThe State of PHPUnit
The State of PHPUnit
 
The state of PHPUnit
The state of PHPUnitThe state of PHPUnit
The state of PHPUnit
 
Beginner workshop to angularjs presentation at Google
Beginner workshop to angularjs presentation at GoogleBeginner workshop to angularjs presentation at Google
Beginner workshop to angularjs presentation at Google
 
How Xslate Works
How Xslate WorksHow Xslate Works
How Xslate Works
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJS
 
Computer notes - Hashing
Computer notes - HashingComputer notes - Hashing
Computer notes - Hashing
 
Building modern web apps with html5, javascript, and java
Building modern web apps with html5, javascript, and javaBuilding modern web apps with html5, javascript, and java
Building modern web apps with html5, javascript, and java
 
Introduction to source{d} Engine and source{d} Lookout
Introduction to source{d} Engine and source{d} Lookout Introduction to source{d} Engine and source{d} Lookout
Introduction to source{d} Engine and source{d} Lookout
 
computer notes - Data Structures - 35
computer notes - Data Structures - 35computer notes - Data Structures - 35
computer notes - Data Structures - 35
 
Magento code audit
Magento code auditMagento code audit
Magento code audit
 
course slides -- powerpoint
course slides -- powerpointcourse slides -- powerpoint
course slides -- powerpoint
 
PhpUnit Best Practices
PhpUnit Best PracticesPhpUnit Best Practices
PhpUnit Best Practices
 
Ch ch-changes cake php2
Ch ch-changes cake php2Ch ch-changes cake php2
Ch ch-changes cake php2
 
Practical catalyst
Practical catalystPractical catalyst
Practical catalyst
 
Groovy Introduction - JAX Germany - 2008
Groovy Introduction - JAX Germany - 2008Groovy Introduction - JAX Germany - 2008
Groovy Introduction - JAX Germany - 2008
 
lab4_php
lab4_phplab4_php
lab4_php
 
lab4_php
lab4_phplab4_php
lab4_php
 
Getting started with ES6
Getting started with ES6Getting started with ES6
Getting started with ES6
 
Good practices for PrestaShop code security and optimization
Good practices for PrestaShop code security and optimizationGood practices for PrestaShop code security and optimization
Good practices for PrestaShop code security and optimization
 

Mehr von markstory

Dependency injection in CakePHP
Dependency injection in CakePHPDependency injection in CakePHP
Dependency injection in CakePHPmarkstory
 
Safer, More Helpful CakePHP
Safer, More Helpful CakePHPSafer, More Helpful CakePHP
Safer, More Helpful CakePHPmarkstory
 
CakePHP - The Road Ahead
CakePHP - The Road AheadCakePHP - The Road Ahead
CakePHP - The Road Aheadmarkstory
 
Future of HTTP in CakePHP
Future of HTTP in CakePHPFuture of HTTP in CakePHP
Future of HTTP in CakePHPmarkstory
 
CakePHP mistakes made 2015
CakePHP mistakes made 2015CakePHP mistakes made 2015
CakePHP mistakes made 2015markstory
 
New in cakephp3
New in cakephp3New in cakephp3
New in cakephp3markstory
 
CakePHP 3.0 and beyond
CakePHP 3.0 and beyondCakePHP 3.0 and beyond
CakePHP 3.0 and beyondmarkstory
 
CakePHP mistakes made confoo 2015
CakePHP mistakes made confoo 2015CakePHP mistakes made confoo 2015
CakePHP mistakes made confoo 2015markstory
 
CakePHP mistakes made
CakePHP mistakes madeCakePHP mistakes made
CakePHP mistakes mademarkstory
 
Performance and optimization CakeFest 2014
Performance and optimization CakeFest 2014Performance and optimization CakeFest 2014
Performance and optimization CakeFest 2014markstory
 
Road to CakePHP 3.0
Road to CakePHP 3.0Road to CakePHP 3.0
Road to CakePHP 3.0markstory
 
Performance and optimization
Performance and optimizationPerformance and optimization
Performance and optimizationmarkstory
 
OWASP Top 10 2013
OWASP Top 10 2013OWASP Top 10 2013
OWASP Top 10 2013markstory
 
CakePHP the yum & yuck
CakePHP the yum & yuckCakePHP the yum & yuck
CakePHP the yum & yuckmarkstory
 
Owasp top 10
Owasp top 10Owasp top 10
Owasp top 10markstory
 
Simple search with elastic search
Simple search with elastic searchSimple search with elastic search
Simple search with elastic searchmarkstory
 
Intro to continuous integration
Intro to continuous integration Intro to continuous integration
Intro to continuous integration markstory
 
Evented applications with RabbitMQ and CakePHP
Evented applications with RabbitMQ and CakePHPEvented applications with RabbitMQ and CakePHP
Evented applications with RabbitMQ and CakePHPmarkstory
 
PHPunit and you
PHPunit and youPHPunit and you
PHPunit and youmarkstory
 

Mehr von markstory (20)

Dependency injection in CakePHP
Dependency injection in CakePHPDependency injection in CakePHP
Dependency injection in CakePHP
 
Safer, More Helpful CakePHP
Safer, More Helpful CakePHPSafer, More Helpful CakePHP
Safer, More Helpful CakePHP
 
CakePHP - The Road Ahead
CakePHP - The Road AheadCakePHP - The Road Ahead
CakePHP - The Road Ahead
 
Future of HTTP in CakePHP
Future of HTTP in CakePHPFuture of HTTP in CakePHP
Future of HTTP in CakePHP
 
CakePHP mistakes made 2015
CakePHP mistakes made 2015CakePHP mistakes made 2015
CakePHP mistakes made 2015
 
New in cakephp3
New in cakephp3New in cakephp3
New in cakephp3
 
PHP WTF
PHP WTFPHP WTF
PHP WTF
 
CakePHP 3.0 and beyond
CakePHP 3.0 and beyondCakePHP 3.0 and beyond
CakePHP 3.0 and beyond
 
CakePHP mistakes made confoo 2015
CakePHP mistakes made confoo 2015CakePHP mistakes made confoo 2015
CakePHP mistakes made confoo 2015
 
CakePHP mistakes made
CakePHP mistakes madeCakePHP mistakes made
CakePHP mistakes made
 
Performance and optimization CakeFest 2014
Performance and optimization CakeFest 2014Performance and optimization CakeFest 2014
Performance and optimization CakeFest 2014
 
Road to CakePHP 3.0
Road to CakePHP 3.0Road to CakePHP 3.0
Road to CakePHP 3.0
 
Performance and optimization
Performance and optimizationPerformance and optimization
Performance and optimization
 
OWASP Top 10 2013
OWASP Top 10 2013OWASP Top 10 2013
OWASP Top 10 2013
 
CakePHP the yum & yuck
CakePHP the yum & yuckCakePHP the yum & yuck
CakePHP the yum & yuck
 
Owasp top 10
Owasp top 10Owasp top 10
Owasp top 10
 
Simple search with elastic search
Simple search with elastic searchSimple search with elastic search
Simple search with elastic search
 
Intro to continuous integration
Intro to continuous integration Intro to continuous integration
Intro to continuous integration
 
Evented applications with RabbitMQ and CakePHP
Evented applications with RabbitMQ and CakePHPEvented applications with RabbitMQ and CakePHP
Evented applications with RabbitMQ and CakePHP
 
PHPunit and you
PHPunit and youPHPunit and you
PHPunit and you
 

Kürzlich hochgeladen

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024SynarionITSolutions
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Principled Technologies
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
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
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 

Kürzlich hochgeladen (20)

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
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
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 

Making the most of 2.2

  • 1. MAKING THE MOST OF 2.2 MARK STORY @MARK_STORY
  • 2. PACKING IN THE GOOD 2.0.0 was release October 18, 2011 Since then 2.1, 2.2, and 2.3 have been released or started. Over 20 releases since 2.0.0. Highest release velocity ever for CakePHP.
  • 3. FOCUS ON PROBLEMS We've tried to keep releases focused on solving real world problems developers have everyday. Make upgrading as easy as possible.
  • 4. VIEW BLOCKS PROBLEM Multiple similar views would often contain repeated structural HTML. Apps suffered from element-itis to keep HTML DRY. Piles of elements make code hard to follow and understand.
  • 5. Inspired by blocks in Jinja/Twig. Allows you to create slots/blocks in layouts or parent templates. Helps keep views/layouts more DRY by letting you create extensible HTML content. Replaces annoying magic variables like $ c i t _ o _ a o t srpsfrlyu and $ o t n _ o _ a o t cnetfrlyu.
  • 6. EXAMPLE Parent wrapper view with a child view
  • 7. PARENT VIEW <1cas"otn-il"<=$hs>ec(tte) ?<h> h ls=cnettte>? ti-fth'il'; >/1 <i cas"otn" dv ls=cnet> <=$hs>ec(cnet) ? ? ti-fth'otn'; > <dv /i> <i cas"iea" dv ls=sdbr> <=$hs>ec(sdbr) ? ? ti-fth'iea'; > <dv /i> <ppi (ti-fth'aiain):? ?h f $hs>ec(pgnto') > <i cas"aiain> dv ls=pgnto" <=$hs>ec(pgnto';? ? ti-fth'aiain) > <dv /i> <ppedf ? ?h ni; >
  • 8. CHILD VIEW <pp$hs>xed'.cmo/iea.t';? ?h ti-etn(./omnsdbrcp) > <pp$hs>sin'il' 'rdc ls';? ?h ti-asg(tte, Pout it) > <pp$hs>tr(cnet) ? ?h ti-sat'otn'; > <>hsi tecnet/> pTi s h otn<p <pp$hs>n(;? ?h ti-ed) > <pp$hs>tr(sdbr) ? ?h ti-sat'iea'; > <>hsi asdbr/> pTi s iea<p <pp$hs>n(;? ?h ti-ed) >
  • 9. JSON & XML VIEWS PROBLEM Previously creating JSON and XML views that just serialized data was a pain. Tons of repetitive views and layout files required.
  • 10. Two view classes that allow you to easily serialize data for simple uses. Special _ e i l z view variable defines which view variables sraie should be serialized. You can also use normal view files if you need to massage data first. Integrates well with existing features like exception handling and RequestHandlerComponent.
  • 11. EXAMPLE <pp ?h / I acnrle. / n otolr fnto idx){ ucin ne( $hs>e(tss,$hs>aiae); ti-st'ak' ti-pgnt() $hs>e(_eilz' ary'ak') ti-st'sraie, ra(tss); }
  • 12. HASH CLASS PROBLEM S t full of inconsistencies. Both in the API and path selector e is syntax. Set::extract() while powerful, is slow and insane inside. xpath-ish syntax full of un-fixable bugs and not supported in most methods.
  • 13. Hash implements >90% of Set's API. All methods have a consistent signature. The same dot notation features are supported everywhere. Up to 1.6x faster on extract(). Most methods are faster as well.
  • 14. PERFORMANCE COMPARISONS Do a similar operation 1000 times, on the same data.
  • 15. Hs:etat$,'n.ril.d) ah:xrc(d {}Atcei' 0.215131998 St:xrc(/ril/d,$) e:etat'Atcei' d 0.23719382 1.1x improvement
  • 16. H s : e t a t $ , ' n . o m n . n . d ) 0.173635005 ah:xrc(d {}Cmet{}i' St:xrc(/omn/d,$) e:etat'Cmeti' d 0.201920986 1.1x improvement
  • 17. Hs:mxiesos$) ah:aDmnin(d 0.075587987 St:onDm$,tu) e:cuti(d re 0.575523138 7.6x improvement
  • 18. API CONSISTENCY Every method takes an array of data as the first argument. Second argument is always one or more paths. A consistent API is easier to document, understand and remember.
  • 19. CAKETIME & CAKENUMBER PROBLEM T m H l e , N m e H l e and T x H l e have some very ieepr ubrepr etepr useful methods. But they are all trapped in a helper.
  • 20. Expose non HTML related features as a utility library. Greatly improve timezone handling. New features for testing & working with datetimes.
  • 21. EXAMPLE <pp ?h Ap:ss'aeie,'tlt'; p:ue(CkTm' Uiiy) Ap:ss'aeubr,'tlt'; p:ue(CkNme' Uiiy) $t =CkTm:tSre(dttm,'mrc/oot'; uc aeie:oevr$aeie AeiaTrno) $oa =CkTm:iTdy$ietm) tdy aeie:soa(tmsap; $eut=CkNme:tRaalSz(oeeaye; rsl aeubr:oedbeie$nTrbt)
  • 22. LOGGING++ PROBLEM Granular logging based on application section was impossible. Log messages were simply broadcast to every connected logger.
  • 23. Borrowed idea of logging 'scopes' from python's l g i g o g n module. Log messages can be tagged with scopes. Only loggers interested in those scopes will get scoped messages.
  • 24. ATTACH A LOGGER WITH A SCOPE <pp ?h CkLg:ofg'amns,ary aeo:cni(pyet' ra( 'nie = 'mi' egn' > Eal 'cps = ary'amns,'iln', soe' > ra(pyet' blig) 'o = 'akeapecm t' > mr@xml.o' ); )
  • 25. LOG MESSAGES WITH A SCOPE <pp ?h ty{ r $aea-poes$amn) gtwy>rcs(pyet; }cth(amnEcpin$){ ac Pyetxeto e CkLg:ro( aeo:err 'rnato fie '.$-gtesg(, Tascin ald e>eMsae) ary'amns,'iln' ra(pyet' blig) ); }