SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Php tips-and-tricks4128
Php tips-and-tricks4128Php tips-and-tricks4128
Php tips-and-tricks4128
PrinceGuru MS
 
Speed up your developments with Symfony2
Speed up your developments with Symfony2Speed up your developments with Symfony2
Speed up your developments with Symfony2
Hugo Hamon
 
Dependency Injection IPC 201
Dependency Injection IPC 201Dependency Injection IPC 201
Dependency Injection IPC 201
Fabien Potencier
 
Corephpcomponentpresentation 1211425966721657-8
Corephpcomponentpresentation 1211425966721657-8Corephpcomponentpresentation 1211425966721657-8
Corephpcomponentpresentation 1211425966721657-8
PrinceGuru MS
 
Dependency injection - phpday 2010
Dependency injection - phpday 2010Dependency injection - phpday 2010
Dependency injection - phpday 2010
Fabien Potencier
 
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
Fabien Potencier
 
Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2Unit and Functional Testing with Symfony2
Unit and Functional Testing with Symfony2
Fabien Potencier
 

Mais procurados (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
 

Semelhante a Making the most of 2.2

The State of PHPUnit
The State of PHPUnitThe State of PHPUnit
The State of PHPUnit
Edorian
 
The state of PHPUnit
The state of PHPUnitThe state of PHPUnit
The state of PHPUnit
Edorian
 
Introduction to AngularJS
Introduction to AngularJSIntroduction to AngularJS
Introduction to AngularJS
Pat Cito
 
computer notes - Data Structures - 35
computer notes - Data Structures - 35computer notes - Data Structures - 35
computer notes - Data Structures - 35
ecomputernotes
 
course slides -- powerpoint
course slides -- powerpointcourse slides -- powerpoint
course slides -- powerpoint
webhostingguy
 

Semelhante a 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
 

Mais de markstory

Owasp top 10
Owasp top 10Owasp top 10
Owasp top 10
markstory
 
Intro to continuous integration
Intro to continuous integration Intro to continuous integration
Intro to continuous integration
markstory
 

Mais de 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
 

Último

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Último (20)

Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
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
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 

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) ); }