SlideShare a Scribd company logo
1 of 156
Download to read offline
Long story short, a true tale about an hopeless DevTeam


        CMF: a pain in the F



                   David Funaro & Alessandro Nadalin
                                        May, 14 2011




domenica 15 maggio 2011
let us introduce

                          The Problem™




domenica 15 maggio 2011
There comes the boss
                          < there's a new project




domenica 15 maggio 2011
There comes the boss


                           < seems easy,
                             let's use Joomla!




domenica 15 maggio 2011
Don't open that door!

domenica 15 maggio 2011
CMS


 The 80/20 dilemma


domenica 15 maggio 2011
80% is cool at all
domenica 15 maggio 2011
but as

                          the requirements grows




domenica 15 maggio 2011
(you always knew that)




domenica 15 maggio 2011
the project becomes a mess




domenica 15 maggio 2011
There comes the boss
                          < can I haz fotonic
                            menthal scanner
                            in the website




domenica 15 maggio 2011
There comes the boss


                           < can't do boss
                          Joomla! is not meant...




domenica 15 maggio 2011
There comes the boss
                          < STFU NOOB DO THA
                            OR BLA BLA BLA




domenica 15 maggio 2011
what if




domenica 15 maggio 2011
There comes the boss


                            < seems complex,
                           no Joomla this time,
                          let's use a framework!




domenica 15 maggio 2011
There comes the boss
                          < STFU NOOB WE
                            SHOULD GO LIVE
                            NEXT WEEK BLA BLA




domenica 15 maggio 2011
Framework


 The 20/80 dilemma


domenica 15 maggio 2011
20% is cool at all
domenica 15 maggio 2011
the 80%
                          is really
                           funny




domenica 15 maggio 2011
but has a cost
                          Time To Market

domenica 15 maggio 2011
again, what if




domenica 15 maggio 2011
There comes the boss


                            < seems complex,
                           no Joomla this time,
                          when should it go live?




domenica 15 maggio 2011
There comes the boss
                          < salesguy just told the
                            client tomorrow




domenica 15 maggio 2011
There comes the boss


                          < ok, let's use a CMF




domenica 15 maggio 2011
unfortunately, there is no stable
          CMF in the PHP ecosystem




domenica 15 maggio 2011
so it has a cost
                          initial development

domenica 15 maggio 2011
investment
                                  =
                        know how (team) +
                       quality (framework) +
                 velocity (that customers pretend)

                                =

                              CMF

domenica 15 maggio 2011
"Our" CMF



domenica 15 maggio 2011
Target: End User/Site admin


                 Should be able to manage a site editing
                               pages with
                          different elements.



                          Easily, like a CMS.


domenica 15 maggio 2011
Target: Developer

             should be able to plug the CMF with NO PAIN,
         using the kick-ass framework at the bottom of the CMF.




domenica 15 maggio 2011
domenica 15 maggio 2011
2
                          things
domenica 15 maggio 2011
Pages

                          •   main structure of a web site
                          •   organized as a tree
                          •   a way to express our contents
                          •   usually composed by a series of
                              containers ( that we'll refer to as
                              boxes )




domenica 15 maggio 2011
Boxes




domenica 15 maggio 2011
Boxes

 The way to separate
 single elements of a page

 Loosely coupled HMVC
 structures




domenica 15 maggio 2011
Entities             Pages




domenica 15 maggio 2011
Boxes
                          {Bridge}




     Entities                                Pages


        Boxes let entities be shown inside webpages


domenica 15 maggio 2011
Boxes


 We dispose of different types of
 boxes:
 • Common
 • DSL




domenica 15 maggio 2011
Common Box
   • Simple
      o Input field
      o Textarea
      o Video
      o Image
      o File
      o Richtext
   • Composite
      o Input field + image
      o input field + image + richetex
      o textarea + video




domenica 15 maggio 2011
what about the DSL?



domenica 15 maggio 2011
Domain Specific Language


         DSL = ! (Website 1      Website 2 )



domenica 15 maggio 2011
Example: Identify DSL



                     Event    Page        Event           Page

          Books                           Cars            Users
                       Review
                  News      Users          News      Contract

                          Widget                 Widget




domenica 15 maggio 2011
domenica 15 maggio 2011
News
                           Page
                          Widget




domenica 15 maggio 2011
Web Elements = CMF Entities




                                    News
                                     Page
                                    Widget




domenica 15 maggio 2011
Web Elements = CMF Entities




                          Books      News         Cars
                                      Page
                          Review                Contract
                                     Widget




domenica 15 maggio 2011
Web Elements = CMF Entities




                          Books      News         Cars
                                      Page
                          Review                Contract
                                     Widget




                                      DSL


domenica 15 maggio 2011
back to the CMF




domenica 15 maggio 2011
CMF Stack


                          •   Framework: symfony, for example
                          •   CMF entities: Site, Pages, Menus, Users ...
                          •   DSL entities: cars, contracts (for Hertz)
                          •   Common Boxes : Textarea, image, video, ...
                          •   Dsl boxes: Cars image gallery




domenica 15 maggio 2011
Common Boxes + DSL Boxes
                            =




The main tool for the developer to build a page
                with the CMF


domenica 15 maggio 2011
Example : page & box composition


                                  Main
                                           Image
             most sold product




                                 product




                                     Richtext




domenica 15 maggio 2011
Example : page & box composition


                                  Main
                                           Image
             most sold product




                                 product




                                     Richtext

                                                   Dsl Boxes




domenica 15 maggio 2011
Example : page & box composition


                                  Main
                                           Image
             most sold product




                                 product




                                                   Common Boxes
                                     Richtext

                                                     Dsl Boxes




domenica 15 maggio 2011
Example : page & box composition


                                  Main
                                           Image
             most sold product




                                 product




                                                   Common Boxes
                                     Richtext

                                                     Dsl Boxes




domenica 15 maggio 2011
Example : page & box composition


                                  Main
                                           Image
             most sold product




                                 product




                                                   Common Boxes
                                     Richtext

                                                     Dsl Boxes




domenica 15 maggio 2011
Example : page & box composition


                                  Main
                                           Image
             most sold product




                                 product




                                                   Common Boxes
                                     Richtext

                                                     Dsl Boxes




domenica 15 maggio 2011
Example : page & box composition


                                  Main
                                           Image
             most sold product




                                 product




                                                   Common Boxes
                                     Richtext

                                                     Dsl Boxes




domenica 15 maggio 2011
The Page-Box Binding Storage

    Data can change its structure fastly, according to the domain model.

                   We need a technology supporting this fast change.

               Since we have N box type, to compose a page we should
                               look for a few tables.

                We need a technology supporting this kind of lookups.




domenica 15 maggio 2011
so,
            How will we
          manage the data?

domenica 15 maggio 2011
RDBMS   , of course




domenica 15 maggio 2011
because different
                          data always have
                           the same need




domenica 15 maggio 2011
one size fits all



domenica 15 maggio 2011
We tend to think at the way we should store data

                            not how we're gonna use it




domenica 15 maggio 2011
and we think that the

    shit-it-always-happens migration

                              will be easy


domenica 15 maggio 2011
also if that column is useful for one and one only row




domenica 15 maggio 2011
among milions



domenica 15 maggio 2011
so we know we're gonna face
            a few well-known problems...




domenica 15 maggio 2011
Data Mapping
    Data Structure                         RDBMS

                                      id


                                    name


                                   parent_id


 we have to find a way to re-organize the data-structre to insert our
 tree inside a table.
 But is really different! Tree find a node in O(nlogn)


domenica 15 maggio 2011
Data Mapping
    Data Structure                                RDBMS




                 is better than before, but isn't the best way



domenica 15 maggio 2011
Data Mapping
    Data Structure                        RDBMS




                                          ?
                          ... and NOW??????

domenica 15 maggio 2011
The Alien

                          spend more time to normalize
                          your models




                                    BUT
                              you always find
                            something that as a
                            different Behaviour


domenica 15 maggio 2011
Unpredictable
                               Tomorrow

                          User Story evolve continous
                             Worse than the Alien




domenica 15 maggio 2011
EAV
                             formerly known as:
                          normalization WTF?!?!?!


                                    or:
          how to do 70k joins to retrieve an entity of you model




domenica 15 maggio 2011
Overnormalized
                          user_id | mail | phone | address


                                              Large schema is broken
                                                 into smaller ones



                                 user_id | mail_id
                                user_id | phone_id
                               user_id | address_id




domenica 15 maggio 2011
Overnormalized
user_id | mail_id LEFT JOIN
user_id | phone_id LEFT JOIN
 ...
 ...
 ...
 ...
 ...

user_id | address_id        LEFT JOIN




domenica 15 maggio 2011
Overnormalized

                            Users List
LEFT JOIN                             LEFT JOIN
                               LEFT JOIN
                                     LEFT JOIN
                                 LEFT JOIN
LEFT JOIN                            LEFT JOIN


domenica 15 maggio 2011
Overnormalized
LEFT JOIN                LEFT JOIN
              JOIN LEFT JOIN
         LEFTUsers List
                          LEFT JOIN
LEFT JOIN              LEFT JOIN
          LEFT JOIN
 LEFT JOIN       LEFT JOIN
  LEFT JOIN
   LEFT JOIN
           LEFT JOIN    LEFT JOIN
     LEFT JOIN
      LEFT JOIN LEFT JOIN
       LEFT JOIN
        What if you need to show only a single primary address?



domenica 15 maggio 2011
back to the CMF




domenica 15 maggio 2011
Bind Page with Boxes




                          Foreing Key -> TextareaBox



domenica 15 maggio 2011
Bind Page with Boxes




                          Foreing Key -> ?


                                   AND NOW ???


domenica 15 maggio 2011
#1                        Mantain the RI




domenica 15 maggio 2011
#2                        Not Mantain the RI




domenica 15 maggio 2011
Maintain or not Maintain
      the RI; that is the
          question


domenica 15 maggio 2011
we have to choose




domenica 15 maggio 2011
have you ever thought



                          "there should be
                           another way!"

                                      ?


domenica 15 maggio 2011
Can someone help us ?




domenica 15 maggio 2011
lets try


                          NoSQL
                           world

domenica 15 maggio 2011
• Written in: C/C++
                               • Main point: Blazing fast
                               • Protocol: Telnet-like
                               • Disk-backed in-memory database,
                               • but since 2.0, it can swap to disk.
                               • Master-slave replication
                               • Simple keys and values,
                               • but complex operations like
                                 ZREVRANGEBYSCORE
                               • INCR
                               • Values can be set to expire (as in a cache)




   $ redis-cli set mykey "my binary safe value" => OK
   $ redis-cli get mykey => my binary safe value


domenica 15 maggio 2011
Best used:
                                                   • rapidly changing data with
                                                     a foreseeable database size
                                                     (should fit mostly in
                                                     memory)


                                                   For example:
                                                   • analytics
                                                   • real-time data collection
                                                   • caching
                                                   • MQ
                                                   • log
http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis




domenica 15 maggio 2011
very fast




domenica 15 maggio 2011
very fast

                          Object != key->value




domenica 15 maggio 2011
very fast

                          Object != key->value

                          Not reliable




domenica 15 maggio 2011
very fast

                                         Object != key->value

                                         Not reliable




                          Can I haz otha nozql?

domenica 15 maggio 2011
• Written in: C++
                                                • Main point: Retains some friendly properties
                                                  of SQL
                                                • Protocol: Custom, binary (BSON)
                                                • Master/slave replication
                                                • speaks JavaScript
                                                • Built-in sharding
                                                • Performance over features
                                                • After crash, it needs to repair tables


> j = { name : 'david', surname : 'funaro' };

{ "name" : "david", "surname" : "funaro" }

> db.things.save(t);

> db.things.find();

{ "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }



domenica 15 maggio 2011
Best used:
                                             • you need dynamic queries
                                             • you prefer to define indexes,
                                               not map/reduce functions
                                             • you need good performance on
                                               a big DB



                                              For example:
                                              • all things that you would do
                                                with MySQL or PostgreSQL,
                                                but having predefined columns
                                                really holds you back
http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis




domenica 15 maggio 2011
Document Oriented




domenica 15 maggio 2011
Document Oriented

                          Schema Free




domenica 15 maggio 2011
Document Oriented

                          Schema Free

                          Navigate Object




domenica 15 maggio 2011
Document Oriented

                                     Schema Free

                                     Navigate Object




                          Can I haz otha nozql?

domenica 15 maggio 2011
•   Written in: Erlang
                                       •   Main point: DB consistency, ease of use
                                       •   Protocol: HTTP, some say REST
                                       •   Bi-directional replication => master-master
                                       •   conflict detection ( 409 Conflict )
                                       •   MVCC: write operations do not block reads
                                       •   Previous versions of documents are available
                                       •   Crash-only (reliable) design
                                       •   Needs compacting from time to time
                                       •   Views: embedded map/reduce
                                       •   jQuery library included




  curl -d '{"keys":["bar"]}' -X POST http://host:port/foo/_all_docs?include_docs=true




domenica 15 maggio 2011
Best used:
                                            • accumulating occasionally-
                                              changing data
                                            • pre-defined queries
                                            • versioning is king


                                             For example:
                                             • CRM/CMS systems
                                             • API


http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis




domenica 15 maggio 2011
Reliable




domenica 15 maggio 2011
Reliable

                          Document Oriented




domenica 15 maggio 2011
Reliable

                          Document Oriented

                          Schema Free




domenica 15 maggio 2011
Reliable

                          Document Oriented

                          Schema Free

                          Navigate Object




domenica 15 maggio 2011
Reliable

                                     Document Oriented

                                     Schema Free

                                     Navigate Object




                          Can I haz otha nozql?

domenica 15 maggio 2011
Why do we so hardly
              need a GraphDB
               like OrientDB?


domenica 15 maggio 2011
"GraphDBs don't avoid relations but they embrace them in
    a way that they are not a computational problem anymore,
    by making them explicit instead of implicit through joins."

                                                             Claudio Martella
                             ( http://blog.acaro.org/entry/somebody-is-going-to-hate-me-nosparql )




domenica 15 maggio 2011
Easy joins
           select from users where city.country.continent = 'Oceania'




domenica 15 maggio 2011
Same link semantics,
               different objects
                          select links from menu >> 28:1, 17:5




domenica 15 maggio 2011
Same link semantics,
               different objects
                                 select from [28:1, 17:5]


                          28:1                                 17:5
                 ExternalLink                               ProductLink
         url: http://www.google.com                            id: 4


domenica 15 maggio 2011
28:1         17:5
              ExternalLink          ProductLink
      url: http://www.google.com       id: 4




                          $link->render()


domenica 15 maggio 2011
•   Written in: Java
                                 •   Main point: Graph
                                 •   Protocol: Binary or HTTP
                                 •   ACID
                                 •   Disk-persisted or in-memory,
                                 •   Cluster
                                 •   150k inserts per second
                                 •   Schema-less, *-full, *-mixed
                                 •   Speaks JSON
                                 •   Integrated GUI
                                 •   Documental
                                 •   SQL commands



curl -X PUT '127.0.0.1:2480/document/demo/1:2' --data "{'@rid': '1:2'}"



domenica 15 maggio 2011
Reliable




domenica 15 maggio 2011
Reliable

                          Graph - Documental




domenica 15 maggio 2011
Reliable

                          Graph - Documental

                          Schema-*




domenica 15 maggio 2011
Reliable

                          Graph - Documental

                          Schema-*

                          Easy traversal




domenica 15 maggio 2011
Reliable

                          Graph - Documental

                          Schema-*

                          Easy traversal

                          SQL-friendly




domenica 15 maggio 2011
Reliable

                          Graph - Documental

                          Schema-*

                          Easy traversal

                          SQL-friendly

                          UberFast ( binary protocol )




domenica 15 maggio 2011
Reliable

                          Graph - Documental

                          Schema-*

                          Easy traversal

                          SQL-friendly

                          UberFast ( binary protocol )

                          Universal ( HTTP protocol )



domenica 15 maggio 2011
is so cool
domenica 15 maggio 2011
but has a problem...
domenica 15 maggio 2011
ver 1.0



domenica 15 maggio 2011
rc1



domenica 15 maggio 2011
but has a couple problems...

domenica 15 maggio 2011
JAVA


domenica 15 maggio 2011
but somebody




domenica 15 maggio 2011
started writing the binary-protocol binding
                          https://github.com/AntonTerekhov/OrientDB-PHP
                                         ( beta, 28 April 2010 )




domenica 15 maggio 2011
and others




domenica 15 maggio 2011
domenica 15 maggio 2011
wrote the HTTP one
                          https://github.com/odino/Orient




domenica 15 maggio 2011
$driver = new OrientHttpClientCurl();
$orient = new OrientFoundationBinding(
  $driver, '127.0.0.1', '2480', 'admin', 'admin', 'demo
');

$response = $orient->query("select from fellas where
any() traverse(0,-1) ( @rid = 1:1 )");

$output = json_decode($response->getBody());
foreach ($output->result as $friend)
{
  echo $friend->name;

    // other fun...
}

domenica 15 maggio 2011
you can start playing with a pure

                               GraphDB now




domenica 15 maggio 2011
High-level PHP Component?




domenica 15 maggio 2011
No



domenica 15 maggio 2011
but we know that ;)




domenica 15 maggio 2011
that's why in DNSEE we will build a basic

            Object Graph Mapper
                          for OrientDB




domenica 15 maggio 2011
...because...




domenica 15 maggio 2011
hey, you remember about our CMF?




domenica 15 maggio 2011
codename:




domenica 15 maggio 2011
codename:


                          ConGoW


domenica 15 maggio 2011
codename:


                          ConGoW
                          contents gone wild
                             ( don't ask why )




domenica 15 maggio 2011
ConGoW




domenica 15 maggio 2011
ConGoW

   • soon the real kickstart




domenica 15 maggio 2011
ConGoW

   • soon the real kickstart
   • 10 devs at the starting point




domenica 15 maggio 2011
ConGoW

   • soon the real kickstart
   • 10 devs at the starting point
   • OSS on GitHub




domenica 15 maggio 2011
ConGoW

   •   soon the real kickstart
   •   10 devs at the starting point
   •   OSS on GitHub
   •   Stack




domenica 15 maggio 2011
ConGoW

   •   soon the real kickstart
   •   10 devs at the starting point
   •   OSS on GitHub
   •   Stack
        o Symfony2




domenica 15 maggio 2011
ConGoW

   •   soon the real kickstart
   •   10 devs at the starting point
   •   OSS on GitHub
   •   Stack
        o Symfony2
        o Orient




domenica 15 maggio 2011
ConGoW

   •   soon the real kickstart
   •   10 devs at the starting point
   •   OSS on GitHub
   •   Stack
        o Symfony2
        o Orient
        o Doctrine2




domenica 15 maggio 2011
"My only friend, the end"




domenica 15 maggio 2011
"My only friend, the end"
   David Funaro
   @ingdavidino
   http://davidfunaro.com




domenica 15 maggio 2011
"My only friend, the end"
   David Funaro             Alessandro Nadalin
   @ingdavidino                              @_odino_
   http://davidfunaro.com              http://odino.org




domenica 15 maggio 2011
"My only friend, the end"
   David Funaro             Alessandro Nadalin
   @ingdavidino                              @_odino_
   http://davidfunaro.com              http://odino.org




domenica 15 maggio 2011
"My only friend, the end"
   David Funaro                        Alessandro Nadalin
   @ingdavidino                                                  @_odino_
   http://davidfunaro.com                                  http://odino.org




                          http://joind.in/talk/view/3008


domenica 15 maggio 2011
Credits
       http://www.flickr.com/photos/pagedooley/5313217918/sizes/l/in/photostream/
         http://www.flickr.com/photos/zoetnet/5520594473/sizes/l/in/photostream/
        http://www.flickr.com/photos/mhxbhd/3962410821/sizes/o/in/photostream/
       http://www.flickr.com/photos/labyrinthx/1955594336/sizes/z/in/photostream/
                http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis
           http://www.flickr.com/photos/salim/19426192/sizes/o/in/photostream/
       http://www.flickr.com/photos/mybluevan/3780363712/sizes/l/in/photostream/
                http://farm4.static.flickr.com/3064/3086258014_f1925639e0.jpg




domenica 15 maggio 2011

More Related Content

Viewers also liked

Graph db: time for serious stuff @ codemotion 23/03/2012
Graph db: time for serious stuff @ codemotion 23/03/2012Graph db: time for serious stuff @ codemotion 23/03/2012
Graph db: time for serious stuff @ codemotion 23/03/2012David Funaro
 
The Continuous delivery Value @ codemotion 2014
The Continuous delivery Value @ codemotion 2014The Continuous delivery Value @ codemotion 2014
The Continuous delivery Value @ codemotion 2014David Funaro
 
Continuous delivery @wcap 5-09-2013
Continuous delivery   @wcap 5-09-2013Continuous delivery   @wcap 5-09-2013
Continuous delivery @wcap 5-09-2013David Funaro
 
Graph databases in PHP @ PHPCon Poland 10-22-2011
Graph databases in PHP @ PHPCon Poland 10-22-2011Graph databases in PHP @ PHPCon Poland 10-22-2011
Graph databases in PHP @ PHPCon Poland 10-22-2011David Funaro
 
NoSQL overview #phptostart turin 11.07.2011
NoSQL overview #phptostart turin 11.07.2011NoSQL overview #phptostart turin 11.07.2011
NoSQL overview #phptostart turin 11.07.2011David Funaro
 

Viewers also liked (6)

Graph db: time for serious stuff @ codemotion 23/03/2012
Graph db: time for serious stuff @ codemotion 23/03/2012Graph db: time for serious stuff @ codemotion 23/03/2012
Graph db: time for serious stuff @ codemotion 23/03/2012
 
The Continuous delivery Value @ codemotion 2014
The Continuous delivery Value @ codemotion 2014The Continuous delivery Value @ codemotion 2014
The Continuous delivery Value @ codemotion 2014
 
Continuous delivery @wcap 5-09-2013
Continuous delivery   @wcap 5-09-2013Continuous delivery   @wcap 5-09-2013
Continuous delivery @wcap 5-09-2013
 
Graph databases in PHP @ PHPCon Poland 10-22-2011
Graph databases in PHP @ PHPCon Poland 10-22-2011Graph databases in PHP @ PHPCon Poland 10-22-2011
Graph databases in PHP @ PHPCon Poland 10-22-2011
 
One size fit All
One size fit AllOne size fit All
One size fit All
 
NoSQL overview #phptostart turin 11.07.2011
NoSQL overview #phptostart turin 11.07.2011NoSQL overview #phptostart turin 11.07.2011
NoSQL overview #phptostart turin 11.07.2011
 

Similar to The 80/20 Dilemma of CMS, Frameworks and CMF

Joomla website design
Joomla website designJoomla website design
Joomla website designnpierson
 
Ruby and Rails, as secret weapon to build your service-oriented apps
Ruby and Rails,  as secret weapon to build your service-oriented appsRuby and Rails,  as secret weapon to build your service-oriented apps
Ruby and Rails, as secret weapon to build your service-oriented appsFelipe Talavera
 
Usability tour-pceu-2011
Usability tour-pceu-2011Usability tour-pceu-2011
Usability tour-pceu-2011Puppet
 
10 Web Development Concepts a Designer Should Know
10 Web Development Concepts a Designer Should Know10 Web Development Concepts a Designer Should Know
10 Web Development Concepts a Designer Should KnowRachel Andrew
 
TTVC without animation
TTVC without animationTTVC without animation
TTVC without animationvolkerreisen
 
Magento's Imagine eCommerce Conference 2011 - Yoav Kutner Day 2 Keynote
Magento's Imagine eCommerce Conference 2011 - Yoav Kutner Day 2 KeynoteMagento's Imagine eCommerce Conference 2011 - Yoav Kutner Day 2 Keynote
Magento's Imagine eCommerce Conference 2011 - Yoav Kutner Day 2 KeynoteMagentoImagine
 
Managing Projects on a Mac
Managing Projects on a MacManaging Projects on a Mac
Managing Projects on a MacProjectWizards
 
GT Logiciel Libre - Convention Systematic 2011
GT Logiciel Libre - Convention Systematic 2011GT Logiciel Libre - Convention Systematic 2011
GT Logiciel Libre - Convention Systematic 2011Stefane Fermigier
 

Similar to The 80/20 Dilemma of CMS, Frameworks and CMF (8)

Joomla website design
Joomla website designJoomla website design
Joomla website design
 
Ruby and Rails, as secret weapon to build your service-oriented apps
Ruby and Rails,  as secret weapon to build your service-oriented appsRuby and Rails,  as secret weapon to build your service-oriented apps
Ruby and Rails, as secret weapon to build your service-oriented apps
 
Usability tour-pceu-2011
Usability tour-pceu-2011Usability tour-pceu-2011
Usability tour-pceu-2011
 
10 Web Development Concepts a Designer Should Know
10 Web Development Concepts a Designer Should Know10 Web Development Concepts a Designer Should Know
10 Web Development Concepts a Designer Should Know
 
TTVC without animation
TTVC without animationTTVC without animation
TTVC without animation
 
Magento's Imagine eCommerce Conference 2011 - Yoav Kutner Day 2 Keynote
Magento's Imagine eCommerce Conference 2011 - Yoav Kutner Day 2 KeynoteMagento's Imagine eCommerce Conference 2011 - Yoav Kutner Day 2 Keynote
Magento's Imagine eCommerce Conference 2011 - Yoav Kutner Day 2 Keynote
 
Managing Projects on a Mac
Managing Projects on a MacManaging Projects on a Mac
Managing Projects on a Mac
 
GT Logiciel Libre - Convention Systematic 2011
GT Logiciel Libre - Convention Systematic 2011GT Logiciel Libre - Convention Systematic 2011
GT Logiciel Libre - Convention Systematic 2011
 

Recently uploaded

Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 

Recently uploaded (20)

Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 

The 80/20 Dilemma of CMS, Frameworks and CMF

  • 1. Long story short, a true tale about an hopeless DevTeam CMF: a pain in the F David Funaro & Alessandro Nadalin May, 14 2011 domenica 15 maggio 2011
  • 2. let us introduce The Problem™ domenica 15 maggio 2011
  • 3. There comes the boss < there's a new project domenica 15 maggio 2011
  • 4. There comes the boss < seems easy, let's use Joomla! domenica 15 maggio 2011
  • 5. Don't open that door! domenica 15 maggio 2011
  • 6. CMS The 80/20 dilemma domenica 15 maggio 2011
  • 7. 80% is cool at all domenica 15 maggio 2011
  • 8. but as the requirements grows domenica 15 maggio 2011
  • 9. (you always knew that) domenica 15 maggio 2011
  • 10. the project becomes a mess domenica 15 maggio 2011
  • 11. There comes the boss < can I haz fotonic menthal scanner in the website domenica 15 maggio 2011
  • 12. There comes the boss < can't do boss Joomla! is not meant... domenica 15 maggio 2011
  • 13. There comes the boss < STFU NOOB DO THA OR BLA BLA BLA domenica 15 maggio 2011
  • 14. what if domenica 15 maggio 2011
  • 15. There comes the boss < seems complex, no Joomla this time, let's use a framework! domenica 15 maggio 2011
  • 16. There comes the boss < STFU NOOB WE SHOULD GO LIVE NEXT WEEK BLA BLA domenica 15 maggio 2011
  • 17. Framework The 20/80 dilemma domenica 15 maggio 2011
  • 18. 20% is cool at all domenica 15 maggio 2011
  • 19. the 80% is really funny domenica 15 maggio 2011
  • 20. but has a cost Time To Market domenica 15 maggio 2011
  • 21. again, what if domenica 15 maggio 2011
  • 22. There comes the boss < seems complex, no Joomla this time, when should it go live? domenica 15 maggio 2011
  • 23. There comes the boss < salesguy just told the client tomorrow domenica 15 maggio 2011
  • 24. There comes the boss < ok, let's use a CMF domenica 15 maggio 2011
  • 25. unfortunately, there is no stable CMF in the PHP ecosystem domenica 15 maggio 2011
  • 26. so it has a cost initial development domenica 15 maggio 2011
  • 27. investment = know how (team) + quality (framework) + velocity (that customers pretend) = CMF domenica 15 maggio 2011
  • 28. "Our" CMF domenica 15 maggio 2011
  • 29. Target: End User/Site admin Should be able to manage a site editing pages with different elements. Easily, like a CMS. domenica 15 maggio 2011
  • 30. Target: Developer should be able to plug the CMF with NO PAIN, using the kick-ass framework at the bottom of the CMF. domenica 15 maggio 2011
  • 32. 2 things domenica 15 maggio 2011
  • 33. Pages • main structure of a web site • organized as a tree • a way to express our contents • usually composed by a series of containers ( that we'll refer to as boxes ) domenica 15 maggio 2011
  • 35. Boxes The way to separate single elements of a page Loosely coupled HMVC structures domenica 15 maggio 2011
  • 36. Entities Pages domenica 15 maggio 2011
  • 37. Boxes {Bridge} Entities Pages Boxes let entities be shown inside webpages domenica 15 maggio 2011
  • 38. Boxes We dispose of different types of boxes: • Common • DSL domenica 15 maggio 2011
  • 39. Common Box • Simple o Input field o Textarea o Video o Image o File o Richtext • Composite o Input field + image o input field + image + richetex o textarea + video domenica 15 maggio 2011
  • 40. what about the DSL? domenica 15 maggio 2011
  • 41. Domain Specific Language DSL = ! (Website 1 Website 2 ) domenica 15 maggio 2011
  • 42. Example: Identify DSL Event Page Event Page Books Cars Users Review News Users News Contract Widget Widget domenica 15 maggio 2011
  • 44. News Page Widget domenica 15 maggio 2011
  • 45. Web Elements = CMF Entities News Page Widget domenica 15 maggio 2011
  • 46. Web Elements = CMF Entities Books News Cars Page Review Contract Widget domenica 15 maggio 2011
  • 47. Web Elements = CMF Entities Books News Cars Page Review Contract Widget DSL domenica 15 maggio 2011
  • 48. back to the CMF domenica 15 maggio 2011
  • 49. CMF Stack • Framework: symfony, for example • CMF entities: Site, Pages, Menus, Users ... • DSL entities: cars, contracts (for Hertz) • Common Boxes : Textarea, image, video, ... • Dsl boxes: Cars image gallery domenica 15 maggio 2011
  • 50. Common Boxes + DSL Boxes = The main tool for the developer to build a page with the CMF domenica 15 maggio 2011
  • 51. Example : page & box composition Main Image most sold product product Richtext domenica 15 maggio 2011
  • 52. Example : page & box composition Main Image most sold product product Richtext Dsl Boxes domenica 15 maggio 2011
  • 53. Example : page & box composition Main Image most sold product product Common Boxes Richtext Dsl Boxes domenica 15 maggio 2011
  • 54. Example : page & box composition Main Image most sold product product Common Boxes Richtext Dsl Boxes domenica 15 maggio 2011
  • 55. Example : page & box composition Main Image most sold product product Common Boxes Richtext Dsl Boxes domenica 15 maggio 2011
  • 56. Example : page & box composition Main Image most sold product product Common Boxes Richtext Dsl Boxes domenica 15 maggio 2011
  • 57. Example : page & box composition Main Image most sold product product Common Boxes Richtext Dsl Boxes domenica 15 maggio 2011
  • 58. The Page-Box Binding Storage Data can change its structure fastly, according to the domain model. We need a technology supporting this fast change. Since we have N box type, to compose a page we should look for a few tables. We need a technology supporting this kind of lookups. domenica 15 maggio 2011
  • 59. so, How will we manage the data? domenica 15 maggio 2011
  • 60. RDBMS , of course domenica 15 maggio 2011
  • 61. because different data always have the same need domenica 15 maggio 2011
  • 62. one size fits all domenica 15 maggio 2011
  • 63. We tend to think at the way we should store data not how we're gonna use it domenica 15 maggio 2011
  • 64. and we think that the shit-it-always-happens migration will be easy domenica 15 maggio 2011
  • 65. also if that column is useful for one and one only row domenica 15 maggio 2011
  • 67. so we know we're gonna face a few well-known problems... domenica 15 maggio 2011
  • 68. Data Mapping Data Structure RDBMS id name parent_id we have to find a way to re-organize the data-structre to insert our tree inside a table. But is really different! Tree find a node in O(nlogn) domenica 15 maggio 2011
  • 69. Data Mapping Data Structure RDBMS is better than before, but isn't the best way domenica 15 maggio 2011
  • 70. Data Mapping Data Structure RDBMS ? ... and NOW?????? domenica 15 maggio 2011
  • 71. The Alien spend more time to normalize your models BUT you always find something that as a different Behaviour domenica 15 maggio 2011
  • 72. Unpredictable Tomorrow User Story evolve continous Worse than the Alien domenica 15 maggio 2011
  • 73. EAV formerly known as: normalization WTF?!?!?! or: how to do 70k joins to retrieve an entity of you model domenica 15 maggio 2011
  • 74. Overnormalized user_id | mail | phone | address Large schema is broken into smaller ones user_id | mail_id user_id | phone_id user_id | address_id domenica 15 maggio 2011
  • 75. Overnormalized user_id | mail_id LEFT JOIN user_id | phone_id LEFT JOIN ... ... ... ... ... user_id | address_id LEFT JOIN domenica 15 maggio 2011
  • 76. Overnormalized Users List LEFT JOIN LEFT JOIN LEFT JOIN LEFT JOIN LEFT JOIN LEFT JOIN LEFT JOIN domenica 15 maggio 2011
  • 77. Overnormalized LEFT JOIN LEFT JOIN JOIN LEFT JOIN LEFTUsers List LEFT JOIN LEFT JOIN LEFT JOIN LEFT JOIN LEFT JOIN LEFT JOIN LEFT JOIN LEFT JOIN LEFT JOIN LEFT JOIN LEFT JOIN LEFT JOIN LEFT JOIN LEFT JOIN What if you need to show only a single primary address? domenica 15 maggio 2011
  • 78. back to the CMF domenica 15 maggio 2011
  • 79. Bind Page with Boxes Foreing Key -> TextareaBox domenica 15 maggio 2011
  • 80. Bind Page with Boxes Foreing Key -> ? AND NOW ??? domenica 15 maggio 2011
  • 81. #1 Mantain the RI domenica 15 maggio 2011
  • 82. #2 Not Mantain the RI domenica 15 maggio 2011
  • 83. Maintain or not Maintain the RI; that is the question domenica 15 maggio 2011
  • 84. we have to choose domenica 15 maggio 2011
  • 85. have you ever thought "there should be another way!" ? domenica 15 maggio 2011
  • 86. Can someone help us ? domenica 15 maggio 2011
  • 87. lets try NoSQL world domenica 15 maggio 2011
  • 88. • Written in: C/C++ • Main point: Blazing fast • Protocol: Telnet-like • Disk-backed in-memory database, • but since 2.0, it can swap to disk. • Master-slave replication • Simple keys and values, • but complex operations like ZREVRANGEBYSCORE • INCR • Values can be set to expire (as in a cache) $ redis-cli set mykey "my binary safe value" => OK $ redis-cli get mykey => my binary safe value domenica 15 maggio 2011
  • 89. Best used: • rapidly changing data with a foreseeable database size (should fit mostly in memory) For example: • analytics • real-time data collection • caching • MQ • log http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis domenica 15 maggio 2011
  • 90. very fast domenica 15 maggio 2011
  • 91. very fast Object != key->value domenica 15 maggio 2011
  • 92. very fast Object != key->value Not reliable domenica 15 maggio 2011
  • 93. very fast Object != key->value Not reliable Can I haz otha nozql? domenica 15 maggio 2011
  • 94. • Written in: C++ • Main point: Retains some friendly properties of SQL • Protocol: Custom, binary (BSON) • Master/slave replication • speaks JavaScript • Built-in sharding • Performance over features • After crash, it needs to repair tables > j = { name : 'david', surname : 'funaro' }; { "name" : "david", "surname" : "funaro" } > db.things.save(t); > db.things.find(); { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" } domenica 15 maggio 2011
  • 95. Best used: • you need dynamic queries • you prefer to define indexes, not map/reduce functions • you need good performance on a big DB For example: • all things that you would do with MySQL or PostgreSQL, but having predefined columns really holds you back http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis domenica 15 maggio 2011
  • 97. Document Oriented Schema Free domenica 15 maggio 2011
  • 98. Document Oriented Schema Free Navigate Object domenica 15 maggio 2011
  • 99. Document Oriented Schema Free Navigate Object Can I haz otha nozql? domenica 15 maggio 2011
  • 100. Written in: Erlang • Main point: DB consistency, ease of use • Protocol: HTTP, some say REST • Bi-directional replication => master-master • conflict detection ( 409 Conflict ) • MVCC: write operations do not block reads • Previous versions of documents are available • Crash-only (reliable) design • Needs compacting from time to time • Views: embedded map/reduce • jQuery library included curl -d '{"keys":["bar"]}' -X POST http://host:port/foo/_all_docs?include_docs=true domenica 15 maggio 2011
  • 101. Best used: • accumulating occasionally- changing data • pre-defined queries • versioning is king For example: • CRM/CMS systems • API http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis domenica 15 maggio 2011
  • 103. Reliable Document Oriented domenica 15 maggio 2011
  • 104. Reliable Document Oriented Schema Free domenica 15 maggio 2011
  • 105. Reliable Document Oriented Schema Free Navigate Object domenica 15 maggio 2011
  • 106. Reliable Document Oriented Schema Free Navigate Object Can I haz otha nozql? domenica 15 maggio 2011
  • 107. Why do we so hardly need a GraphDB like OrientDB? domenica 15 maggio 2011
  • 108. "GraphDBs don't avoid relations but they embrace them in a way that they are not a computational problem anymore, by making them explicit instead of implicit through joins." Claudio Martella ( http://blog.acaro.org/entry/somebody-is-going-to-hate-me-nosparql ) domenica 15 maggio 2011
  • 109. Easy joins select from users where city.country.continent = 'Oceania' domenica 15 maggio 2011
  • 110. Same link semantics, different objects select links from menu >> 28:1, 17:5 domenica 15 maggio 2011
  • 111. Same link semantics, different objects select from [28:1, 17:5] 28:1 17:5 ExternalLink ProductLink url: http://www.google.com id: 4 domenica 15 maggio 2011
  • 112. 28:1 17:5 ExternalLink ProductLink url: http://www.google.com id: 4 $link->render() domenica 15 maggio 2011
  • 113. Written in: Java • Main point: Graph • Protocol: Binary or HTTP • ACID • Disk-persisted or in-memory, • Cluster • 150k inserts per second • Schema-less, *-full, *-mixed • Speaks JSON • Integrated GUI • Documental • SQL commands curl -X PUT '127.0.0.1:2480/document/demo/1:2' --data "{'@rid': '1:2'}" domenica 15 maggio 2011
  • 115. Reliable Graph - Documental domenica 15 maggio 2011
  • 116. Reliable Graph - Documental Schema-* domenica 15 maggio 2011
  • 117. Reliable Graph - Documental Schema-* Easy traversal domenica 15 maggio 2011
  • 118. Reliable Graph - Documental Schema-* Easy traversal SQL-friendly domenica 15 maggio 2011
  • 119. Reliable Graph - Documental Schema-* Easy traversal SQL-friendly UberFast ( binary protocol ) domenica 15 maggio 2011
  • 120. Reliable Graph - Documental Schema-* Easy traversal SQL-friendly UberFast ( binary protocol ) Universal ( HTTP protocol ) domenica 15 maggio 2011
  • 121. is so cool domenica 15 maggio 2011
  • 122. but has a problem... domenica 15 maggio 2011
  • 123. ver 1.0 domenica 15 maggio 2011
  • 125. but has a couple problems... domenica 15 maggio 2011
  • 127. but somebody domenica 15 maggio 2011
  • 128. started writing the binary-protocol binding https://github.com/AntonTerekhov/OrientDB-PHP ( beta, 28 April 2010 ) domenica 15 maggio 2011
  • 129. and others domenica 15 maggio 2011
  • 131. wrote the HTTP one https://github.com/odino/Orient domenica 15 maggio 2011
  • 132. $driver = new OrientHttpClientCurl(); $orient = new OrientFoundationBinding( $driver, '127.0.0.1', '2480', 'admin', 'admin', 'demo '); $response = $orient->query("select from fellas where any() traverse(0,-1) ( @rid = 1:1 )"); $output = json_decode($response->getBody()); foreach ($output->result as $friend) { echo $friend->name; // other fun... } domenica 15 maggio 2011
  • 133. you can start playing with a pure GraphDB now domenica 15 maggio 2011
  • 136. but we know that ;) domenica 15 maggio 2011
  • 137. that's why in DNSEE we will build a basic Object Graph Mapper for OrientDB domenica 15 maggio 2011
  • 139. hey, you remember about our CMF? domenica 15 maggio 2011
  • 141. codename: ConGoW domenica 15 maggio 2011
  • 142. codename: ConGoW contents gone wild ( don't ask why ) domenica 15 maggio 2011
  • 144. ConGoW • soon the real kickstart domenica 15 maggio 2011
  • 145. ConGoW • soon the real kickstart • 10 devs at the starting point domenica 15 maggio 2011
  • 146. ConGoW • soon the real kickstart • 10 devs at the starting point • OSS on GitHub domenica 15 maggio 2011
  • 147. ConGoW • soon the real kickstart • 10 devs at the starting point • OSS on GitHub • Stack domenica 15 maggio 2011
  • 148. ConGoW • soon the real kickstart • 10 devs at the starting point • OSS on GitHub • Stack o Symfony2 domenica 15 maggio 2011
  • 149. ConGoW • soon the real kickstart • 10 devs at the starting point • OSS on GitHub • Stack o Symfony2 o Orient domenica 15 maggio 2011
  • 150. ConGoW • soon the real kickstart • 10 devs at the starting point • OSS on GitHub • Stack o Symfony2 o Orient o Doctrine2 domenica 15 maggio 2011
  • 151. "My only friend, the end" domenica 15 maggio 2011
  • 152. "My only friend, the end" David Funaro @ingdavidino http://davidfunaro.com domenica 15 maggio 2011
  • 153. "My only friend, the end" David Funaro Alessandro Nadalin @ingdavidino @_odino_ http://davidfunaro.com http://odino.org domenica 15 maggio 2011
  • 154. "My only friend, the end" David Funaro Alessandro Nadalin @ingdavidino @_odino_ http://davidfunaro.com http://odino.org domenica 15 maggio 2011
  • 155. "My only friend, the end" David Funaro Alessandro Nadalin @ingdavidino @_odino_ http://davidfunaro.com http://odino.org http://joind.in/talk/view/3008 domenica 15 maggio 2011
  • 156. Credits http://www.flickr.com/photos/pagedooley/5313217918/sizes/l/in/photostream/ http://www.flickr.com/photos/zoetnet/5520594473/sizes/l/in/photostream/ http://www.flickr.com/photos/mhxbhd/3962410821/sizes/o/in/photostream/ http://www.flickr.com/photos/labyrinthx/1955594336/sizes/z/in/photostream/ http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis http://www.flickr.com/photos/salim/19426192/sizes/o/in/photostream/ http://www.flickr.com/photos/mybluevan/3780363712/sizes/l/in/photostream/ http://farm4.static.flickr.com/3064/3086258014_f1925639e0.jpg domenica 15 maggio 2011