Making the most of 2.2
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Making the most of 2.2

  • 3,300 views
Uploaded on

Given at the CakeFest 2012. The second half was given by José Lorenzo.

Given at the CakeFest 2012. The second half was given by José Lorenzo.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,300
On Slideshare
1,729
From Embeds
1,571
Number of Embeds
7

Actions

Shares
Downloads
4
Comments
0
Likes
2

Embeds 1,571

http://trentrichardson.com 1,509
https://twitter.com 50
http://lanyrd.com 6
https://si0.twimg.com 3
http://translate.googleusercontent.com 1
http://trentrichardson.com. 1
http://www.feedspot.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. MAKING THE MOST OF 2.2 MARK STORY @MARK_STORY
  • 2. PACKING IN THE GOOD2.0.0 was release October 18, 2011Since 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 PROBLEMSWeve tried to keep releases focused on solving real world problems developers have everyday. Make upgrading as easy as possible.
  • 4. VIEW BLOCKS PROBLEMMultiple similar views would often contain repeated structuralHTML.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 createextensible HTML content.Replaces annoying magic variables like $ c i t _ o _ a o t srpsfrlyuand $ o t n _ o _ a o t cnetfrlyu.
  • 6. EXAMPLEParent wrapper view with a child view
  • 7. PARENT VIEW<1cas"otn-il"<=$hs>ec(tte) ?<h> h ls=cnettte>? ti-fthil; >/1<i cas"otn" dv ls=cnet><=$hs>ec(cnet) ? ? ti-fthotn; ><dv /i><i cas"iea" dv ls=sdbr><=$hs>ec(sdbr) ? ? ti-fthiea; ><dv /i><ppi (ti-fthaiain):? ?h f $hs>ec(pgnto) ><i cas"aiain> dv ls=pgnto"<=$hs>ec(pgnto;? ? ti-fthaiain) ><dv /i><ppedf ? ?h ni; >
  • 8. CHILD VIEW<pp$hs>xed.cmo/iea.t;? ?h ti-etn(./omnsdbrcp) ><pp$hs>sinil rdc ls;? ?h ti-asg(tte, Pout it) ><pp$hs>tr(cnet) ? ?h ti-satotn; ><>hsi tecnet/> pTi s h otn<p<pp$hs>n(;? ?h ti-ed) ><pp$hs>tr(sdbr) ? ?h ti-satiea; ><>hsi asdbr/> pTi s iea<p<pp$hs>n(;? ?h ti-ed) >
  • 9. JSON & XML VIEWS PROBLEMPreviously creating JSON and XML views that just serialized datawas a pain.Tons of repetitive views and layout files required.
  • 10. Two view classes that allow you to easily serialize data for simpleuses.Special _ e i l z view variable defines which view variables sraieshould be serialized.You can also use normal view files if you need to massage data first.Integrates well with existing features like exception handling andRequestHandlerComponent.
  • 11. EXAMPLE<pp ?h/ I acnrle. / n otolrfnto idx){ ucin ne( $hs>e(tss,$hs>aiae); ti-stak ti-pgnt() $hs>e(_eilz aryak) ti-stsraie, ra(tss);}
  • 12. HASH CLASS PROBLEMS t full of inconsistencies. Both in the API and path selector e issyntax.Set::extract() while powerful, is slow and insane inside.xpath-ish syntax full of un-fixable bugs and not supported in mostmethods.
  • 13. Hash implements >90% of Sets 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 COMPARISONSDo a similar operation 1000 times, on the same data.
  • 15. Hs:etat$,n.ril.d) ah:xrc(d {}Atcei 0.215131998St:xrc(/ril/d,$) e:etatAtcei d 0.237193821.1x improvement
  • 16. H s : e t a t $ , n . o m n . n . d ) 0.173635005 ah:xrc(d {}Cmet{}iSt:xrc(/omn/d,$) e:etatCmeti d 0.2019209861.1x improvement
  • 17. Hs:mxiesos$) ah:aDmnin(d 0.075587987St:onDm$,tu) e:cuti(d re 0.5755231387.6x improvement
  • 18. API CONSISTENCYEvery 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 PROBLEMT m H l e , N m e H l e and T x H l e have some very ieepr ubrepr etepruseful 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 ?hAp:ssaeie,tlt; p:ue(CkTm Uiiy)Ap:ssaeubr,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++ PROBLEMGranular logging based on application section was impossible.Log messages were simply broadcast to every connected logger.
  • 23. Borrowed idea of logging scopes from pythons 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 ?hCkLg:ofgamns,ary aeo:cni(pyet ra( nie = mi egn > Eal cps = aryamns,iln, soe > ra(pyet blig) o = akeapecm t > mr@xml.o); )
  • 25. LOG MESSAGES WITH A SCOPE<pp ?hty{ r $aea-poes$amn) gtwy>rcs(pyet;}cth(amnEcpin$){ ac Pyetxeto e CkLg:ro( aeo:err rnato fie .$-gtesg(, Tascin ald e>eMsae) aryamns,iln ra(pyet blig) );}
  • 26. NOW TO JOSE