Making the most of 2.2


Published on

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

Published in: Technology
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Making the most of 2.2

  2. 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. 3. FOCUS ON PROBLEMSWeve tried to keep releases focused on solving real world problems developers have everyday. Make upgrading as easy as possible.
  4. 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. 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. 6. EXAMPLEParent wrapper view with a child view
  7. 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. 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. 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. 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. 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. 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. 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. 14. PERFORMANCE COMPARISONSDo a similar operation 1000 times, on the same data.
  15. 15. Hs:etat$, ah:xrc(d {}Atcei 0.215131998St:xrc(/ril/d,$) e:etatAtcei d 0.237193821.1x improvement
  16. 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. 17. Hs:mxiesos$) ah:aDmnin(d 0.075587987St:onDm$,tu) e:cuti(d re 0.5755231387.6x improvement
  18. 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. 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. 20. Expose non HTML related features as a utility library.Greatly improve timezone handling.New features for testing & working with datetimes.
  21. 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. 22. LOGGING++ PROBLEMGranular logging based on application section was impossible.Log messages were simply broadcast to every connected logger.
  23. 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. 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. 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. 26. NOW TO JOSE