Approaching unknown unknowns
          - CMF for the masses -
The problem™
The problem™
        Too much work
The problem™
        Too much work




The solution™
The problem™
        Too much work




The solution™
         Work less
 Be  lazy
Don't reinvent the
     wheel
Technologic stack:
      php
     mysql
     apache
   symfony 1.4
Why not Symfony2?
Why not Symfony2?

       Sf2 is not ready for
           production.
We are
N customers express
 theirselves in one
        way:

     The Web
So you need a tool to
express N domains into the
web.

 That is called CMF.
How do the CMF
and the customer
   domain (DSL)
            talk?
How does the CMF is bound with the DSL?


There is a hierarchycal Tree.
Containing N Pages.
Pages use nested sets.

Every page containing N Boxes.
Each box containing its Content.
How does the CMF is bound with the DSL?

Dependency inversion:
the CMF doesn't know
anything about the DSL
How does the CMF is bound with the DSL?
Each box has a content:
the content is an instance of
ConcreteBox
The system is
pluggable.

 Permissions are an
          example:
Abstraction over
abstraction over
abstraction over
abstraction over
 abstraction....
So our well-dressed
CMF will finally look
like...
Solution:
  a spaghetti coder +

  memcached V2.0 +

        ANSI C


          =
Redis
A fast in-memory key-value storage engine written in ANSI-C.
Supports clustering, stores data like PHP arrays, writes to disk.

  Instead of memcached 2.0 we can call it memcache 100.0
F***
YEAH!
We have NoSQL, we're on the edge!
MySQL talks to Redis
Cross-DBMS transactions
Redis is gently asked by
the front-end
So this...
...becomes
    this...
F***
YEAH!²
We use NoSQL, and we have a reason!
A few other
  points:
Intensive logging
  If a transaction fails, we
 need to know if it has failed
  due to MySQL or Redis.



       And then why.
REST vs SEO
     GET /products/1



           or
GET /products/ferrari-f3000
REST vs SEO
       GET /products/1



             or
  GET /products/ferrari-f3000




MIX'EM!
                    Still REST, still SEO!
               GET /products/ferrari-f3000-1
Thanks!
   Alessandro Nadalin
   odino.org
   twitter.com/_odino_
Last but not least!
Credits
     http://www.flickr.com/photos/whatknot/13198827/sizes/o/in/photostream/
  http://www.flickr.com/photos/donnagrayson/195244498/sizes/o/in/photostream/
   http://www.flickr.com/photos/sakechaud/4452392482/sizes/o/in/photostream/
   http://www.flickr.com/photos/gamergates/3461154165/sizes/o/in/photostream/
 http://www.flickr.com/photos/14060551@N06/3050235141/sizes/l/in/photostream/
http://www.flickr.com/photos/33246833@N00/4353212216/sizes/o/in/photostream/
     http://www.flickr.com/photos/jurvetson/36572011/sizes/o/in/photostream/
http://www.flickr.com/photos/htcfloorsystems/4008090894/sizes/o/in/photostream/
     http://www.flickr.com/photos/mlleglass/491378611/sizes/o/in/photostream/
  http://www.flickr.com/photos/rhymereverie/2253533697/sizes/l/in/photostream/
  http://www.flickr.com/photos/spunkinator/3050946547/sizes/o/in/photostream/
       http://www.flickr.com/photos/725/3524480344/sizes/l/in/photostream/

Approaching unknown unknowns: CMF for the masses

  • 1.
    Approaching unknown unknowns - CMF for the masses -
  • 3.
  • 4.
    The problem™ Too much work
  • 5.
    The problem™ Too much work The solution™
  • 6.
    The problem™ Too much work The solution™ Work less
  • 7.
  • 8.
  • 9.
    Technologic stack: php mysql apache symfony 1.4
  • 10.
  • 11.
    Why not Symfony2? Sf2 is not ready for production.
  • 12.
  • 13.
    N customers express theirselves in one way: The Web
  • 14.
    So you needa tool to express N domains into the web. That is called CMF.
  • 15.
    How do theCMF and the customer domain (DSL) talk?
  • 16.
    How does theCMF is bound with the DSL? There is a hierarchycal Tree. Containing N Pages. Pages use nested sets. Every page containing N Boxes. Each box containing its Content.
  • 17.
    How does theCMF is bound with the DSL? Dependency inversion: the CMF doesn't know anything about the DSL
  • 18.
    How does theCMF is bound with the DSL? Each box has a content: the content is an instance of ConcreteBox
  • 19.
    The system is pluggable. Permissions are an example:
  • 21.
    Abstraction over abstraction over abstractionover abstraction over abstraction....
  • 22.
    So our well-dressed CMFwill finally look like...
  • 24.
    Solution: aspaghetti coder + memcached V2.0 + ANSI C =
  • 25.
    Redis A fast in-memorykey-value storage engine written in ANSI-C. Supports clustering, stores data like PHP arrays, writes to disk. Instead of memcached 2.0 we can call it memcache 100.0
  • 26.
    F*** YEAH! We have NoSQL,we're on the edge!
  • 27.
  • 28.
  • 29.
    Redis is gentlyasked by the front-end
  • 30.
  • 32.
    ...becomes this...
  • 34.
    F*** YEAH!² We use NoSQL,and we have a reason!
  • 35.
    A few other points:
  • 36.
    Intensive logging If a transaction fails, we need to know if it has failed due to MySQL or Redis. And then why.
  • 37.
    REST vs SEO GET /products/1 or GET /products/ferrari-f3000
  • 38.
    REST vs SEO GET /products/1 or GET /products/ferrari-f3000 MIX'EM! Still REST, still SEO! GET /products/ferrari-f3000-1
  • 39.
    Thanks! Alessandro Nadalin odino.org twitter.com/_odino_
  • 40.
  • 41.
    Credits http://www.flickr.com/photos/whatknot/13198827/sizes/o/in/photostream/ http://www.flickr.com/photos/donnagrayson/195244498/sizes/o/in/photostream/ http://www.flickr.com/photos/sakechaud/4452392482/sizes/o/in/photostream/ http://www.flickr.com/photos/gamergates/3461154165/sizes/o/in/photostream/ http://www.flickr.com/photos/14060551@N06/3050235141/sizes/l/in/photostream/ http://www.flickr.com/photos/33246833@N00/4353212216/sizes/o/in/photostream/ http://www.flickr.com/photos/jurvetson/36572011/sizes/o/in/photostream/ http://www.flickr.com/photos/htcfloorsystems/4008090894/sizes/o/in/photostream/ http://www.flickr.com/photos/mlleglass/491378611/sizes/o/in/photostream/ http://www.flickr.com/photos/rhymereverie/2253533697/sizes/l/in/photostream/ http://www.flickr.com/photos/spunkinator/3050946547/sizes/o/in/photostream/ http://www.flickr.com/photos/725/3524480344/sizes/l/in/photostream/