SlideShare a Scribd company logo
Symfony vs. Integrating products
  when to use a framework
  Xavier Lacot – Clever Age




Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot
Who I am

         ξ€Š
             Symfony developer since end 2005
         ξ€Š
             Several contributions (plugins, docs, patches, etc.)
         ξ€Š
             Manager of the PHP Business Unit of Clever Age
         ξ€Š
             Clever Age - http://clever-age.com/
             ξ€Š
                 Based in Paris, Bordeaux and Lyon, ~70 people
             ξ€Š
                 Technical architecture expertise
             ξ€Š
                 Development,
             ξ€Š
                 Consulting / training / etc.




Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                               2
Contents

      ξ€Š
          A (web) developer's life ?

      ξ€Š
          The choice of a technical architecture

      ξ€Š
          A practical sight on CMS and framework's code

      ξ€Š   Howto...
          ξ€Š
              Integrate Symfony within other products
          ξ€Š
              A CMS with Symfony in less than one day

      ξ€Š   Publication time : cleverMediaLibrary

Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                      3
A (web) developer's life
    Symfony Day – 4. Juni 2009
    Clever Age | Xavier Lacot
http://www.flickr.com/photos/nathonline/918128338
                                                                               4
A developer's life

      ξ€Š   Web projects cover a large panel
            ξ€Š
                Content management
            ξ€Š
                Social networks
            ξ€Š
                Customer Relation Management
            ξ€Š
                Communication
            ξ€Š
                Collaborative
            ξ€Š
                File sharing
            ξ€Š
                Specific applications

      ξ€Š   In almost every web project, a developer will
          loose some hair
Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                       5
A developer's life

      ξ€Š
          Wide range of difficulty
            ξ€Š
                5 days of html integration for a small Β« webpage Β»
            ξ€Š
                … 1000+ development days using a framework for a social/2.0
                platform
            ξ€Š
                Often, the right solution does not exist !




Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                                     6
A developer's life


      ξ€Š
          The developer has the choice between a lot
          of tools
            ξ€Š
                Frameworks
            ξ€Š
                Integrated (open source) products
            ξ€Š
                The bad : Integrated (closed-source) products
            ξ€Š
                The worse : closed-source frameworks




Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                                   7
A practical sight on products and framework's code


      ξ€Š
          What do I mean with « products » ?
            ξ€Š
                CMS, forums, CRM tools, blogs, photo gallery, etc.
            ξ€Š
                Not designed as development platforms, but as usable tools
            ξ€Š
                Usually only available as packages archives (zip, tar.gz)
            ξ€Š
                Not based on a framework




Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                                      8
A practical sight on products and framework's code


      ξ€Š
          ...and with « frameworks » ?
            ξ€Š
                Not Β« functionalities-oriented Β»
            ξ€Š
                Created as a development platform
            ξ€Š
                DIY – do it yourself




Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                                      9
… for instance, Symfony

  Symfony, a « full options » framework
                                   cli
                                  mvc
                                  ajax
                                  crud
                                 cache
                                events
                                routing
                             +600 plugins
                             performance
                            documentation
                           admin generator
                         internationalization
                       unit and functional tests
                      ORMs (Propel or Doctrine)
Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                               10
The choice of a technical architecture
Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                        11
The choice of a technical architecture



   Several considerations
         ξ€Š
             Complexity of the project (workload, features,
             scalability)
         ξ€Š
             Development methodology
         ξ€Š
             Is there a lot of personnalisation ?
               ξ€Š
                   Adding functions
               ξ€Š
                   Removing functions
         ξ€Š
             Do plugins/extensions exist, that cover the
             requirements ?



Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                                   12
Integrating products


      ξ€Š
          Integrating products is a good idea
          ξ€Š
              It may save time, money, and pressure
          ξ€Š
              It may help building a better application
          ξ€Š
              At least the client will get the product's feature set
          ξ€Š
              Don't always re-invent the wheel !

      ξ€Š
          Perfect solutions for common needs



   … the hell is that client rarely have common needs !
Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                                13
Integrating products


   Possible options :
         ξ€Š
             Change some code :
             ξ€Š
                 issues with future upgrades
         ξ€Š
             Change code + submit ticket :
             ξ€Š
                 lot more work (contributions needs to be clean)
             ξ€Š
                 Not sure it is accepted
         ξ€Š
             Create extensions when possible
             ξ€Š
                 These products are not designed for developing !
         ξ€Š
             Drop the product and code yourself
             ξ€Š
                 Clearly define the project

Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                                      14
Β«CMS are good to make simple websites that are
   mainly meant to be looked at, while frameworks
         are good to make complex websites that are
                             meant to be interacted withΒ Β»




Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                    15
The choice of a technical architecture




Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                        16
The choice of a technical architecture


      ξ€Š
          Magento Commerce is a sort of success story
          ξ€Š
              Based on Zend Framework
          ξ€Š
              Overhealmed OS Commerce in 2 years




Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                             17
The choice of a technical architecture


      ξ€Š
          Gold rules
          ξ€Š
              Think simple – not a overload of useless functions
          ξ€Š
              Backend must be easy to use
              ξ€Š
                  WYSIWYG editor
              ξ€Š
                  Adapted widgets
          ξ€Š
              Follow standards – never hack up
          ξ€Š
              Documentation !
          ξ€Š
              Open the development : search contributors
          ξ€Š
              Release often

Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                                18
The choice of a technical architecture


      ξ€Š
          The equation is simple :


                 Time to hack   vs.        Time to build


      ξ€Š
          What do you prefer in your life ?




Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                           19
A practical sight on products and framework's code


Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                  20
A practical sight on products and framework's code


      ξ€Š
          The quality largely varies
            ξ€Š
                Security
            ξ€Š
                A common design pattern (MVC ?)
            ξ€Š
                Portability (database, etc.)
            ξ€Š
                ORM
            ξ€Š
                Developer tools / Technical documentation
            ξ€Š
                Performance
            ξ€Š
                API
            ξ€Š
                Object-oriented
            ξ€Š
                Standards compliance


Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                                     21
For instance : Drupal architecture




                                          request


                                        Drupal core

                                              Modules hooks
                             hook()
                                              Theme engine

                                  Theme engine (*.tpl.php)


Symfony Day – 4. Juni 2009
                                         response
Clever Age | Xavier Lacot                                                      22
For instance : some Drupal facts


         ξ€Š
             Forms validation … w00t
if (!empty($form_values['departing']) && ( $departing < $date )) {
  form_set_error('departing', t('The departing date isn't valid.'));
}

         ξ€Š
             We love documentation...

function node_form_submit($form_id, $form_values) {
  global $user;
  ...
         ξ€Š
             … and also SQL queries !
   db_query('DELETE FROM {node} WHERE nid = %d', $node->nid);
   db_query('DELETE FROM {node_revisions} WHERE nid = %d', $node->nid);

         ξ€Š
             ~70 000 lines of PHP code, ~75 files only...
Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                              23
A practical sight on products and framework's code
      ξ€Š
          Overall criticism :
          ξ€Š
              Poorly (well, not) OO
          ξ€Š
              No MVC, Modules are a mess
          ξ€Š
              No native developer tool, core code is not
              commented
          ξ€Š
              No ORM. The Β« database layer Β» main usage is to
              map Β« drupal_query() Β» to db specific functions
          ξ€Š
              Forms management is archaiq
          ξ€Š
              Writing modules might turn into a nightmare – 5000
              lines+ of code in a single file, etc.

          ξ€Š
              From a purely technical point of view :      #FAIL
Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                                    24
A practical sight on products and framework's code

      ξ€Š
          Positive points:
          ξ€Š
              It works out of the box
          ξ€Š
              If there are very few customizations to do, then it is
              the prfect solution (no development at all)
          ξ€Š
              There is a huge community
              ξ€Š
                  Lots of contributions
              ξ€Š
                  /! mot of them are unusable !!!
          ξ€Š
              The Β« client effect Β» always works




Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                                       25
So how to take profit out of both ?


Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                      26
How to integrate Symfony with other products


      ξ€Š
          Consider the following context
            ξ€Š
                Very large company
            ξ€Š
                Non-technical people
            ξ€Š
                High content management requirements
            ξ€Š
                A big part of the site is a custom development
            ξ€Š
                We do not have a lot of days




                             ...a common situation

Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                                   27
How to integrate Symfony with other products


      ξ€Š
          Facts:
          ξ€Š
              Not possible to develop everything
          ξ€Š
              Using the CMS as the development tool won't help

      ξ€Š   => let's integrate Symfony ! Several ways:
          ξ€Š
              Include-based integration
          ξ€Š
              Several Apache mountpoints
          ξ€Š
              XMPP-based communication




Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                               28
How to integrate Symfony with other products




                                                          Module A

                                                          Module B
                                  Symfony
                                                            ...

                                                       β€œcms” module




                             databases               Drupal install


Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                                    29
How to integrate Symfony with other products


      ξ€Š
          routing.yml, last rule :
drupal:
  url:   /:uri
  param: { module: cms, action: drupal }
  requirements: { uri: ^(.)*$ }

      ξ€Š   Cms module / executeDrupal() :
public function executeDrupal(sfWebRequest $request)
{
  ob_start('drupal');
  include(sfConfig::get('sf_root_dir').'/lib/drupal/index.php');
  $this->return = ob_get_flush();
}



Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                              30
How to integrate Symfony with other products


      ξ€Š
          Second solution, XMPP calls for db
          synchronisation (huge work, but w00t):




                                 XMPP server
Drupal install                                                Symfony
                                  (Openfire)




                                Uses pubSub as data format
Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                              31
The one-development-day Symfony CMS


Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                      32
A minimal CMS


      ξ€Š
          What is a minimal CMS ?
          ξ€Š
              Backend
              ξ€Š
                  Users management,
              ξ€Š
                  Possibility to create pages at certain urls
              ξ€Š
                  Posibiliy to put content in these pages
              ξ€Š
                  Media management
          ξ€Š
              Frontend
              ξ€Š
                  Ability to display informations




Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                                  33
A minimal CMS


       ξ€Š
           Backend components
           ξ€Š
               sfDoctrineGuardPlugin
           ξ€Š
               cleverMediaLibraryPlugin
           ξ€Š
               some tables for the model:
content:
  id:
  displayed_author:           varchar(150)
  title:                      varchar(255)
  body:                       longvarchar
  created_at:                 timestamp
  created_by:                 { type: integer, foreignTable: sf_guard_user, foreignReference: id }
  publication_status:         varchar(20)
  published_at:               timestamp
  published_by:               { type: integer, foreignTable: sf_guard_user, foreignReference: id }
  updated_at:                 timestamp
  updated_by:                 { type: integer, foreignTable: sf_guard_user, foreignReference: id }
  meta_description:           longvarchar
  meta_keywords:              longvarchar

 Symfony Day – 4. Juni 2009
 Clever Age | Xavier Lacot                                                                           34
A minimal CMS : frontend highlights


      ξ€Š
          « catch-all » routing rule in routing.yml

   # for html pages
   cms:
     url:   /:uri.html
     param: { module: cms, action: view }
     requirements: { uri: ^(.)*$ }

   # for all other defined url
   cms_garbage:
     url:   /:uri
     param: { module: cms, action: view }
     requirements: { uri: ^(.)*$ }




Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                           35
Publication time : cleverMediaLibraryPlugin


Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                              36
Objectifs


         ξ€Š
             An enterprise solution for managing media
         ξ€Š
             Supports a large number of file formats
             ξ€Š
                 Images, videos
             ξ€Š
                 Documents
             ξ€Š
                 etc.
         ξ€Š
             Storage abstraction
         ξ€Š
             Media management API
         ξ€Š
             Metadata support
         ξ€Š
             Search (tags + index), credentials
         ξ€Š
             Performance
Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                       37
Formats de fichiers supportΓ©s

         ξ€Š
             Images, whatever the type (jpg, gif, png, etc.)
             ξ€Š
                 Several adapters are available:
                 ξ€Š
                     Imagemagick tools
                 ξ€Š
                     GD
         ξ€Š
             PDF documents
         ξ€Š
             Office documents
             ξ€Š
                 OpenOffice
             ξ€Š
                 MS Office
             ξ€Š
                 Uses PUNO (PHP ↔ OpenOffice UNO bridge) – not stable
         ξ€Š
             Videos
             ξ€Š
                 Ffmpeg / imagemagick
Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                                38
Schema

                                        GD        ImageMagick    PUNO ...
                             adapters             handler
                                      Adapter                   Adapter

                                         Image      PDF          Office ...
                             handlers
                                        handler   handler       handler



     Model classes                          cleverMedia



                File storage abstraction - cleverFilesystemPlugin

Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                                39
File storage abstraction
                                                   cleverFileSystemPlugin (1/3)

         ξ€Š
             Adapters set
             ξ€Š
                 Disk
             ξ€Š
                 FTP
             ξ€Š
                 S3
             ξ€Š
                 … contributions are welcome !
         ξ€Š
             The API is classical
             ξ€Š
                 Statistics: exists / getSize / isDir / isFile
             ξ€Š
                 Directories operations: mkDir / listDir /
             ξ€Š
                 File operations: write / unlink / rename / read / copy



Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                                     40
File storage abstraction
                                      cleverFileSystemPlugin (2/3)

         ξ€Š
             File system creation


                $fs = cleverFilesystem::getInstance(array(
                    'type'      => 'disk',
                    'root'      => '/path/to/root',
                    'cache_dir' => '/tmp'
                ));

                // filesystem operations
                $content = $fs->listDir('');
                $content = $fs->listDir('path/to/directory');



Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                        41
File storage abstraction
                                       cleverFileSystemPlugin (3/3)


             $fs = cleverFilesystem::getInstance('ftp_michel');

              app:
                cleverFilesystemPlugin:
                   filesystems:
                     ftp_michel:
                       cache_dir:     /tmp
                       type:          ftp
                       host:          localhost
                       username:      michel
                       password:      p4ssw0rd
                       Port:          21
                       root:          ftpserv

               ftp://michel:p4ssw0rd@localhost:21/ftpserv/
Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                         42
API usage


 // retrieve a folder
 $parent =
 ccMediaFolderPeer::retrieveByPath('meetings/cologne');

 // Create a folder
 $folder = new ccMediaFolder();
 $fields = array(
    'name'       => 'Symfony Day Cologne',
    'created_by' => $this->getUser()->getUserId(),
    'updated_by' => $this->getUser()->getUserId()
    'parent'     => $parent
 );
 $folder->update($fields);
 $folder->save();

Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                 43
API usage

 // retrieve a folder
 $parent =
 ccMediaFolderPeer::retrieveByPath('meetings/cologne');

 // Create a file
 $image = new ccMedia();
 $fields = array(
    'cc_media_folder' => $folder,
    'source'          => 'http://lacot.org/image.png',
    'filename'        => 'new_filename.png',
    'updated_by'      => $this->getUser()->getUserId(),
    'created_by'      => $this->getUser()->getUserId()
 );
 $image->update($fields);
 $image->save();

Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                 44
tasks




Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot       45
Questions

                             Xavier Lacot <xavier@lacot.org>
                                    http://lacot.org/




Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                      46
Contact us


                             Clever Age :   37, boulevard des Capucines
                                            75002 Paris, France

                              Agencies :    Lyon, Bordeaux

                                 Phone :    +33 1 53 34 66 10

                                   Web :    http://www.clever-age.com/

        Commercial contact :                commercial@clever-age.com

             Technical contact :            technique@clever-age.com

Symfony Day – 4. Juni 2009
Clever Age | Xavier Lacot                                                 47

More Related Content

What's hot

Getting Started with Node.js
Getting Started with Node.jsGetting Started with Node.js
Getting Started with Node.js
Justin Reock
Β 
slide to delete
slide to deleteslide to delete
slide to deletealind tiwari
Β 
Virgo Project Creation Review
Virgo Project Creation ReviewVirgo Project Creation Review
Virgo Project Creation Review
glynnormington
Β 
Netbeans
NetbeansNetbeans
Netbeansacosdt
Β 
GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...
GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...
GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...Xamarin
Β 
Robust collaboration services with OSGi - Satya Maheshwari
Robust collaboration services with OSGi - Satya MaheshwariRobust collaboration services with OSGi - Satya Maheshwari
Robust collaboration services with OSGi - Satya Maheshwari
mfrancis
Β 
PHP, Cloud And Microsoft Symfony Live 2010
PHP,  Cloud And  Microsoft    Symfony  Live 2010PHP,  Cloud And  Microsoft    Symfony  Live 2010
PHP, Cloud And Microsoft Symfony Live 2010
guest5a7126
Β 
10 clues showing that you are doing OSGi in the wrong manner - Jerome Moliere
10 clues showing that you are doing OSGi in the wrong manner - Jerome Moliere10 clues showing that you are doing OSGi in the wrong manner - Jerome Moliere
10 clues showing that you are doing OSGi in the wrong manner - Jerome Moliere
mfrancis
Β 
symfony: An Open-Source Framework for Professionals (PHP Day 2008)
symfony: An Open-Source Framework for Professionals (PHP Day 2008)symfony: An Open-Source Framework for Professionals (PHP Day 2008)
symfony: An Open-Source Framework for Professionals (PHP Day 2008)Fabien Potencier
Β 
Html5, Native and Platform based Mobile Applications
Html5, Native and Platform based Mobile ApplicationsHtml5, Native and Platform based Mobile Applications
Html5, Native and Platform based Mobile Applications
Yoss Cohen
Β 
#JavaOne What's in an object?
#JavaOne What's in an object?#JavaOne What's in an object?
#JavaOne What's in an object?
Charlie Gracie
Β 
AD114 - Don't be afraid of curly brackets reloaded - even more JavaScript for...
AD114 - Don't be afraid of curly brackets reloaded - even more JavaScript for...AD114 - Don't be afraid of curly brackets reloaded - even more JavaScript for...
AD114 - Don't be afraid of curly brackets reloaded - even more JavaScript for...
Stephan H. Wissel
Β 
JavaFX vs AJAX vs Flex
JavaFX vs AJAX vs FlexJavaFX vs AJAX vs Flex
JavaFX vs AJAX vs Flex
Craig Dickson
Β 
Embedding Web UIs in your Eclipse application
Embedding Web UIs in your Eclipse applicationEmbedding Web UIs in your Eclipse application
Embedding Web UIs in your Eclipse application
Boris Bokowski
Β 
3978 Why is Java so different... A Session for Cobol/PLI/Assembler Developers
3978   Why is Java so different... A Session for Cobol/PLI/Assembler Developers3978   Why is Java so different... A Session for Cobol/PLI/Assembler Developers
3978 Why is Java so different... A Session for Cobol/PLI/Assembler Developers
nick_garrod
Β 
symfony: Simplify your professional web development with PHP (IPC Frankfurt 2...
symfony: Simplify your professional web development with PHP (IPC Frankfurt 2...symfony: Simplify your professional web development with PHP (IPC Frankfurt 2...
symfony: Simplify your professional web development with PHP (IPC Frankfurt 2...Fabien Potencier
Β 
Java Presentation
Java PresentationJava Presentation
Java Presentation
Amr Salah
Β 

What's hot (20)

engage 2014 - JavaBlast
engage 2014 - JavaBlastengage 2014 - JavaBlast
engage 2014 - JavaBlast
Β 
Getting Started with Node.js
Getting Started with Node.jsGetting Started with Node.js
Getting Started with Node.js
Β 
slide to delete
slide to deleteslide to delete
slide to delete
Β 
Virgo Project Creation Review
Virgo Project Creation ReviewVirgo Project Creation Review
Virgo Project Creation Review
Β 
Eclipse Vs Netbeans
Eclipse Vs NetbeansEclipse Vs Netbeans
Eclipse Vs Netbeans
Β 
Netbeans
NetbeansNetbeans
Netbeans
Β 
GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...
GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...
GitHub halp app - Minimizing platform-specific code with MVVM - Justin Spahr-...
Β 
Robust collaboration services with OSGi - Satya Maheshwari
Robust collaboration services with OSGi - Satya MaheshwariRobust collaboration services with OSGi - Satya Maheshwari
Robust collaboration services with OSGi - Satya Maheshwari
Β 
PHP, Cloud And Microsoft Symfony Live 2010
PHP,  Cloud And  Microsoft    Symfony  Live 2010PHP,  Cloud And  Microsoft    Symfony  Live 2010
PHP, Cloud And Microsoft Symfony Live 2010
Β 
10 clues showing that you are doing OSGi in the wrong manner - Jerome Moliere
10 clues showing that you are doing OSGi in the wrong manner - Jerome Moliere10 clues showing that you are doing OSGi in the wrong manner - Jerome Moliere
10 clues showing that you are doing OSGi in the wrong manner - Jerome Moliere
Β 
symfony: An Open-Source Framework for Professionals (PHP Day 2008)
symfony: An Open-Source Framework for Professionals (PHP Day 2008)symfony: An Open-Source Framework for Professionals (PHP Day 2008)
symfony: An Open-Source Framework for Professionals (PHP Day 2008)
Β 
Html5, Native and Platform based Mobile Applications
Html5, Native and Platform based Mobile ApplicationsHtml5, Native and Platform based Mobile Applications
Html5, Native and Platform based Mobile Applications
Β 
#JavaOne What's in an object?
#JavaOne What's in an object?#JavaOne What's in an object?
#JavaOne What's in an object?
Β 
AD114 - Don't be afraid of curly brackets reloaded - even more JavaScript for...
AD114 - Don't be afraid of curly brackets reloaded - even more JavaScript for...AD114 - Don't be afraid of curly brackets reloaded - even more JavaScript for...
AD114 - Don't be afraid of curly brackets reloaded - even more JavaScript for...
Β 
JavaFX vs AJAX vs Flex
JavaFX vs AJAX vs FlexJavaFX vs AJAX vs Flex
JavaFX vs AJAX vs Flex
Β 
Embedding Web UIs in your Eclipse application
Embedding Web UIs in your Eclipse applicationEmbedding Web UIs in your Eclipse application
Embedding Web UIs in your Eclipse application
Β 
3978 Why is Java so different... A Session for Cobol/PLI/Assembler Developers
3978   Why is Java so different... A Session for Cobol/PLI/Assembler Developers3978   Why is Java so different... A Session for Cobol/PLI/Assembler Developers
3978 Why is Java so different... A Session for Cobol/PLI/Assembler Developers
Β 
FreshAir2008
FreshAir2008FreshAir2008
FreshAir2008
Β 
symfony: Simplify your professional web development with PHP (IPC Frankfurt 2...
symfony: Simplify your professional web development with PHP (IPC Frankfurt 2...symfony: Simplify your professional web development with PHP (IPC Frankfurt 2...
symfony: Simplify your professional web development with PHP (IPC Frankfurt 2...
Β 
Java Presentation
Java PresentationJava Presentation
Java Presentation
Β 

Viewers also liked

Keynote d'ouverture - Forum PHP 2012
Keynote d'ouverture - Forum PHP 2012Keynote d'ouverture - Forum PHP 2012
Keynote d'ouverture - Forum PHP 2012Xavier Lacot
Β 
Keynote de clΓ΄ture - PHP Tour 2011
Keynote de clΓ΄ture - PHP Tour 2011Keynote de clΓ΄ture - PHP Tour 2011
Keynote de clΓ΄ture - PHP Tour 2011
Xavier Lacot
Β 
Domain Driven Development applied
Domain Driven Development appliedDomain Driven Development applied
Domain Driven Development applied
Eloi Poch
Β 
Abstracting databases access in Titanium Mobile
Abstracting databases access in Titanium MobileAbstracting databases access in Titanium Mobile
Abstracting databases access in Titanium Mobile
Xavier Lacot
Β 
Introduction to Akamon software arquitecture for MPWAR
Introduction to Akamon software arquitecture for MPWARIntroduction to Akamon software arquitecture for MPWAR
Introduction to Akamon software arquitecture for MPWAR
Eloi Poch
Β 
Forum PHP 2010 - Les frameworks, essentiels dans-l-ecosysteme-php-xavier-laco...
Forum PHP 2010 - Les frameworks, essentiels dans-l-ecosysteme-php-xavier-laco...Forum PHP 2010 - Les frameworks, essentiels dans-l-ecosysteme-php-xavier-laco...
Forum PHP 2010 - Les frameworks, essentiels dans-l-ecosysteme-php-xavier-laco...
Xavier Lacot
Β 
Symfony2 components to the rescue of your PHP projects
Symfony2 components to the rescue of your PHP projectsSymfony2 components to the rescue of your PHP projects
Symfony2 components to the rescue of your PHP projects
Xavier Lacot
Β 

Viewers also liked (7)

Keynote d'ouverture - Forum PHP 2012
Keynote d'ouverture - Forum PHP 2012Keynote d'ouverture - Forum PHP 2012
Keynote d'ouverture - Forum PHP 2012
Β 
Keynote de clΓ΄ture - PHP Tour 2011
Keynote de clΓ΄ture - PHP Tour 2011Keynote de clΓ΄ture - PHP Tour 2011
Keynote de clΓ΄ture - PHP Tour 2011
Β 
Domain Driven Development applied
Domain Driven Development appliedDomain Driven Development applied
Domain Driven Development applied
Β 
Abstracting databases access in Titanium Mobile
Abstracting databases access in Titanium MobileAbstracting databases access in Titanium Mobile
Abstracting databases access in Titanium Mobile
Β 
Introduction to Akamon software arquitecture for MPWAR
Introduction to Akamon software arquitecture for MPWARIntroduction to Akamon software arquitecture for MPWAR
Introduction to Akamon software arquitecture for MPWAR
Β 
Forum PHP 2010 - Les frameworks, essentiels dans-l-ecosysteme-php-xavier-laco...
Forum PHP 2010 - Les frameworks, essentiels dans-l-ecosysteme-php-xavier-laco...Forum PHP 2010 - Les frameworks, essentiels dans-l-ecosysteme-php-xavier-laco...
Forum PHP 2010 - Les frameworks, essentiels dans-l-ecosysteme-php-xavier-laco...
Β 
Symfony2 components to the rescue of your PHP projects
Symfony2 components to the rescue of your PHP projectsSymfony2 components to the rescue of your PHP projects
Symfony2 components to the rescue of your PHP projects
Β 

Similar to Symfony Day 2009 - Symfony vs Integrating products

symfony: Open-Source Enterprise Framework
symfony: Open-Source Enterprise Frameworksymfony: Open-Source Enterprise Framework
symfony: Open-Source Enterprise FrameworkFabien Potencier
Β 
Domino X Pages 8.5
Domino X Pages 8.5Domino X Pages 8.5
Domino X Pages 8.5
John Head
Β 
Dynamic Languages In The Enterprise (4developers march 2009)
Dynamic Languages In The Enterprise (4developers march 2009)Dynamic Languages In The Enterprise (4developers march 2009)
Dynamic Languages In The Enterprise (4developers march 2009)
Ivo Jansch
Β 
Tales of Suckage and Awesomeness (Full Frontal 2012)
Tales of Suckage and Awesomeness (Full Frontal 2012)Tales of Suckage and Awesomeness (Full Frontal 2012)
Tales of Suckage and Awesomeness (Full Frontal 2012)
Chris Wilson
Β 
Hithhiker guide to eclipse presentation frameworks galaxy
Hithhiker guide to eclipse presentation frameworks galaxyHithhiker guide to eclipse presentation frameworks galaxy
Hithhiker guide to eclipse presentation frameworks galaxy
glefur
Β 
MinneWebCon 2009 CodeMorphic Hybrid iPhone App Presentation
MinneWebCon 2009 CodeMorphic Hybrid iPhone App PresentationMinneWebCon 2009 CodeMorphic Hybrid iPhone App Presentation
MinneWebCon 2009 CodeMorphic Hybrid iPhone App Presentation
CodeMorphic, Inc.
Β 
iPhone Development For .Net Dev
iPhone Development For .Net DeviPhone Development For .Net Dev
iPhone Development For .Net Dev
Alex Hung
Β 
symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)
symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)
symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)Fabien Potencier
Β 
Rubymotion inspect 2014_review
Rubymotion inspect 2014_reviewRubymotion inspect 2014_review
Rubymotion inspect 2014_reviewBob Firestone
Β 
Introduction to Cross Platform Development with Xamarin/ Visual Studio
Introduction to Cross Platform Development with Xamarin/ Visual StudioIntroduction to Cross Platform Development with Xamarin/ Visual Studio
Introduction to Cross Platform Development with Xamarin/ Visual Studio
IndyMobileNetDev
Β 
Colin Clark Accessible U Is With J Query And Infusion[1]
Colin Clark Accessible U Is With J Query And Infusion[1]Colin Clark Accessible U Is With J Query And Infusion[1]
Colin Clark Accessible U Is With J Query And Infusion[1]Ajax Experience 2009
Β 
Electronic Publishing 2.0: Reimagining the Publication and Preservation of E ...
Electronic Publishing 2.0: Reimagining the Publication and Preservation of E ...Electronic Publishing 2.0: Reimagining the Publication and Preservation of E ...
Electronic Publishing 2.0: Reimagining the Publication and Preservation of E ...
Leonardo Flores
Β 
iPhone Web Development
iPhone Web DevelopmentiPhone Web Development
iPhone Web Development
Andy Peters
Β 
Squeak
SqueakSqueak
Squeak
Marcus Denker
Β 
Design for Hackers
Design for HackersDesign for Hackers
Design for Hackers
San Kim
Β 
20 Practical tips for a successful internationalisation project
20 Practical tips for a successful internationalisation project20 Practical tips for a successful internationalisation project
20 Practical tips for a successful internationalisation project
ecomplexx
Β 
EMC World 2016 - cnaITL.01 Adopting An Open Source Strategy
EMC World 2016 - cnaITL.01 Adopting An Open Source StrategyEMC World 2016 - cnaITL.01 Adopting An Open Source Strategy
EMC World 2016 - cnaITL.01 Adopting An Open Source Strategy
{code}
Β 
Screencasting in the cloud
Screencasting in the cloudScreencasting in the cloud
Screencasting in the cloudCaroline Conlon
Β 
Introduction to Buildpacks.io Presentation
Introduction to Buildpacks.io PresentationIntroduction to Buildpacks.io Presentation
Introduction to Buildpacks.io Presentation
Knoldus Inc.
Β 
Distributing Information Online
Distributing Information OnlineDistributing Information Online
Distributing Information Online
Lethbridge College
Β 

Similar to Symfony Day 2009 - Symfony vs Integrating products (20)

symfony: Open-Source Enterprise Framework
symfony: Open-Source Enterprise Frameworksymfony: Open-Source Enterprise Framework
symfony: Open-Source Enterprise Framework
Β 
Domino X Pages 8.5
Domino X Pages 8.5Domino X Pages 8.5
Domino X Pages 8.5
Β 
Dynamic Languages In The Enterprise (4developers march 2009)
Dynamic Languages In The Enterprise (4developers march 2009)Dynamic Languages In The Enterprise (4developers march 2009)
Dynamic Languages In The Enterprise (4developers march 2009)
Β 
Tales of Suckage and Awesomeness (Full Frontal 2012)
Tales of Suckage and Awesomeness (Full Frontal 2012)Tales of Suckage and Awesomeness (Full Frontal 2012)
Tales of Suckage and Awesomeness (Full Frontal 2012)
Β 
Hithhiker guide to eclipse presentation frameworks galaxy
Hithhiker guide to eclipse presentation frameworks galaxyHithhiker guide to eclipse presentation frameworks galaxy
Hithhiker guide to eclipse presentation frameworks galaxy
Β 
MinneWebCon 2009 CodeMorphic Hybrid iPhone App Presentation
MinneWebCon 2009 CodeMorphic Hybrid iPhone App PresentationMinneWebCon 2009 CodeMorphic Hybrid iPhone App Presentation
MinneWebCon 2009 CodeMorphic Hybrid iPhone App Presentation
Β 
iPhone Development For .Net Dev
iPhone Development For .Net DeviPhone Development For .Net Dev
iPhone Development For .Net Dev
Β 
symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)
symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)
symfony: An Open-Source Framework for Professionals (Dutch Php Conference 2008)
Β 
Rubymotion inspect 2014_review
Rubymotion inspect 2014_reviewRubymotion inspect 2014_review
Rubymotion inspect 2014_review
Β 
Introduction to Cross Platform Development with Xamarin/ Visual Studio
Introduction to Cross Platform Development with Xamarin/ Visual StudioIntroduction to Cross Platform Development with Xamarin/ Visual Studio
Introduction to Cross Platform Development with Xamarin/ Visual Studio
Β 
Colin Clark Accessible U Is With J Query And Infusion[1]
Colin Clark Accessible U Is With J Query And Infusion[1]Colin Clark Accessible U Is With J Query And Infusion[1]
Colin Clark Accessible U Is With J Query And Infusion[1]
Β 
Electronic Publishing 2.0: Reimagining the Publication and Preservation of E ...
Electronic Publishing 2.0: Reimagining the Publication and Preservation of E ...Electronic Publishing 2.0: Reimagining the Publication and Preservation of E ...
Electronic Publishing 2.0: Reimagining the Publication and Preservation of E ...
Β 
iPhone Web Development
iPhone Web DevelopmentiPhone Web Development
iPhone Web Development
Β 
Squeak
SqueakSqueak
Squeak
Β 
Design for Hackers
Design for HackersDesign for Hackers
Design for Hackers
Β 
20 Practical tips for a successful internationalisation project
20 Practical tips for a successful internationalisation project20 Practical tips for a successful internationalisation project
20 Practical tips for a successful internationalisation project
Β 
EMC World 2016 - cnaITL.01 Adopting An Open Source Strategy
EMC World 2016 - cnaITL.01 Adopting An Open Source StrategyEMC World 2016 - cnaITL.01 Adopting An Open Source Strategy
EMC World 2016 - cnaITL.01 Adopting An Open Source Strategy
Β 
Screencasting in the cloud
Screencasting in the cloudScreencasting in the cloud
Screencasting in the cloud
Β 
Introduction to Buildpacks.io Presentation
Introduction to Buildpacks.io PresentationIntroduction to Buildpacks.io Presentation
Introduction to Buildpacks.io Presentation
Β 
Distributing Information Online
Distributing Information OnlineDistributing Information Online
Distributing Information Online
Β 

Recently uploaded

GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
Β 
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilotβ„’
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilotβ„’Le nuove frontiere dell'AI nell'RPA con UiPath Autopilotβ„’
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilotβ„’
UiPathCommunity
Β 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
Β 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
Β 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
RinaMondal9
Β 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
Β 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
Peter Spielvogel
Β 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
Β 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
Β 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
Β 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance
Β 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
Β 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
Β 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
Β 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
Β 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
Β 
UiPath Community Day Dubai: AI at Work..
UiPath Community Day Dubai: AI at Work..UiPath Community Day Dubai: AI at Work..
UiPath Community Day Dubai: AI at Work..
UiPathCommunity
Β 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
Β 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
Β 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
Β 

Recently uploaded (20)

GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
Β 
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilotβ„’
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilotβ„’Le nuove frontiere dell'AI nell'RPA con UiPath Autopilotβ„’
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilotβ„’
Β 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Β 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Β 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
Β 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
Β 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
Β 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Β 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Β 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
Β 
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdfFIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
FIDO Alliance Osaka Seminar: Passkeys at Amazon.pdf
Β 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Β 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Β 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
Β 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Β 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Β 
UiPath Community Day Dubai: AI at Work..
UiPath Community Day Dubai: AI at Work..UiPath Community Day Dubai: AI at Work..
UiPath Community Day Dubai: AI at Work..
Β 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Β 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
Β 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
Β 

Symfony Day 2009 - Symfony vs Integrating products

  • 1. Symfony vs. Integrating products when to use a framework Xavier Lacot – Clever Age Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot
  • 2. Who I am ξ€Š Symfony developer since end 2005 ξ€Š Several contributions (plugins, docs, patches, etc.) ξ€Š Manager of the PHP Business Unit of Clever Age ξ€Š Clever Age - http://clever-age.com/ ξ€Š Based in Paris, Bordeaux and Lyon, ~70 people ξ€Š Technical architecture expertise ξ€Š Development, ξ€Š Consulting / training / etc. Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 2
  • 3. Contents ξ€Š A (web) developer's life ? ξ€Š The choice of a technical architecture ξ€Š A practical sight on CMS and framework's code ξ€Š Howto... ξ€Š Integrate Symfony within other products ξ€Š A CMS with Symfony in less than one day ξ€Š Publication time : cleverMediaLibrary Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 3
  • 4. A (web) developer's life Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot http://www.flickr.com/photos/nathonline/918128338 4
  • 5. A developer's life ξ€Š Web projects cover a large panel ξ€Š Content management ξ€Š Social networks ξ€Š Customer Relation Management ξ€Š Communication ξ€Š Collaborative ξ€Š File sharing ξ€Š Specific applications ξ€Š In almost every web project, a developer will loose some hair Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 5
  • 6. A developer's life ξ€Š Wide range of difficulty ξ€Š 5 days of html integration for a small Β« webpage Β» ξ€Š … 1000+ development days using a framework for a social/2.0 platform ξ€Š Often, the right solution does not exist ! Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 6
  • 7. A developer's life ξ€Š The developer has the choice between a lot of tools ξ€Š Frameworks ξ€Š Integrated (open source) products ξ€Š The bad : Integrated (closed-source) products ξ€Š The worse : closed-source frameworks Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 7
  • 8. A practical sight on products and framework's code ξ€Š What do I mean with « productsΒ Β» ? ξ€Š CMS, forums, CRM tools, blogs, photo gallery, etc. ξ€Š Not designed as development platforms, but as usable tools ξ€Š Usually only available as packages archives (zip, tar.gz) ξ€Š Not based on a framework Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 8
  • 9. A practical sight on products and framework's code ξ€Š ...and with « frameworksΒ Β» ? ξ€Š Not Β« functionalities-oriented Β» ξ€Š Created as a development platform ξ€Š DIY – do it yourself Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 9
  • 10. … for instance, Symfony Symfony, a « full optionsΒ Β» framework cli mvc ajax crud cache events routing +600 plugins performance documentation admin generator internationalization unit and functional tests ORMs (Propel or Doctrine) Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 10
  • 11. The choice of a technical architecture Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 11
  • 12. The choice of a technical architecture Several considerations ξ€Š Complexity of the project (workload, features, scalability) ξ€Š Development methodology ξ€Š Is there a lot of personnalisation ? ξ€Š Adding functions ξ€Š Removing functions ξ€Š Do plugins/extensions exist, that cover the requirements ? Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 12
  • 13. Integrating products ξ€Š Integrating products is a good idea ξ€Š It may save time, money, and pressure ξ€Š It may help building a better application ξ€Š At least the client will get the product's feature set ξ€Š Don't always re-invent the wheel ! ξ€Š Perfect solutions for common needs … the hell is that client rarely have common needs ! Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 13
  • 14. Integrating products Possible options : ξ€Š Change some code : ξ€Š issues with future upgrades ξ€Š Change code + submit ticket : ξ€Š lot more work (contributions needs to be clean) ξ€Š Not sure it is accepted ξ€Š Create extensions when possible ξ€Š These products are not designed for developing ! ξ€Š Drop the product and code yourself ξ€Š Clearly define the project Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 14
  • 15. Β«CMS are good to make simple websites that are mainly meant to be looked at, while frameworks are good to make complex websites that are meant to be interacted withΒ Β» Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 15
  • 16. The choice of a technical architecture Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 16
  • 17. The choice of a technical architecture ξ€Š Magento Commerce is a sort of success story ξ€Š Based on Zend Framework ξ€Š Overhealmed OS Commerce in 2 years Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 17
  • 18. The choice of a technical architecture ξ€Š Gold rules ξ€Š Think simple – not a overload of useless functions ξ€Š Backend must be easy to use ξ€Š WYSIWYG editor ξ€Š Adapted widgets ξ€Š Follow standards – never hack up ξ€Š Documentation ! ξ€Š Open the development : search contributors ξ€Š Release often Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 18
  • 19. The choice of a technical architecture ξ€Š The equation is simple : Time to hack vs. Time to build ξ€Š What do you prefer in your life ? Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 19
  • 20. A practical sight on products and framework's code Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 20
  • 21. A practical sight on products and framework's code ξ€Š The quality largely varies ξ€Š Security ξ€Š A common design pattern (MVC ?) ξ€Š Portability (database, etc.) ξ€Š ORM ξ€Š Developer tools / Technical documentation ξ€Š Performance ξ€Š API ξ€Š Object-oriented ξ€Š Standards compliance Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 21
  • 22. For instance : Drupal architecture request Drupal core Modules hooks hook() Theme engine Theme engine (*.tpl.php) Symfony Day – 4. Juni 2009 response Clever Age | Xavier Lacot 22
  • 23. For instance : some Drupal facts ξ€Š Forms validation … w00t if (!empty($form_values['departing']) && ( $departing < $date )) { form_set_error('departing', t('The departing date isn't valid.')); } ξ€Š We love documentation... function node_form_submit($form_id, $form_values) { global $user; ... ξ€Š … and also SQL queries ! db_query('DELETE FROM {node} WHERE nid = %d', $node->nid); db_query('DELETE FROM {node_revisions} WHERE nid = %d', $node->nid); ξ€Š ~70 000 lines of PHP code, ~75 files only... Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 23
  • 24. A practical sight on products and framework's code ξ€Š Overall criticism : ξ€Š Poorly (well, not) OO ξ€Š No MVC, Modules are a mess ξ€Š No native developer tool, core code is not commented ξ€Š No ORM. The Β« database layer Β» main usage is to map Β« drupal_query() Β» to db specific functions ξ€Š Forms management is archaiq ξ€Š Writing modules might turn into a nightmare – 5000 lines+ of code in a single file, etc. ξ€Š From a purely technical point of view : #FAIL Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 24
  • 25. A practical sight on products and framework's code ξ€Š Positive points: ξ€Š It works out of the box ξ€Š If there are very few customizations to do, then it is the prfect solution (no development at all) ξ€Š There is a huge community ξ€Š Lots of contributions ξ€Š /! mot of them are unusable !!! ξ€Š The Β« client effect Β» always works Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 25
  • 26. So how to take profit out of both ? Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 26
  • 27. How to integrate Symfony with other products ξ€Š Consider the following context ξ€Š Very large company ξ€Š Non-technical people ξ€Š High content management requirements ξ€Š A big part of the site is a custom development ξ€Š We do not have a lot of days ...a common situation Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 27
  • 28. How to integrate Symfony with other products ξ€Š Facts: ξ€Š Not possible to develop everything ξ€Š Using the CMS as the development tool won't help ξ€Š => let's integrate Symfony ! Several ways: ξ€Š Include-based integration ξ€Š Several Apache mountpoints ξ€Š XMPP-based communication Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 28
  • 29. How to integrate Symfony with other products Module A Module B Symfony ... β€œcms” module databases Drupal install Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 29
  • 30. How to integrate Symfony with other products ξ€Š routing.yml, last rule : drupal: url: /:uri param: { module: cms, action: drupal } requirements: { uri: ^(.)*$ } ξ€Š Cms module / executeDrupal() : public function executeDrupal(sfWebRequest $request) { ob_start('drupal'); include(sfConfig::get('sf_root_dir').'/lib/drupal/index.php'); $this->return = ob_get_flush(); } Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 30
  • 31. How to integrate Symfony with other products ξ€Š Second solution, XMPP calls for db synchronisation (huge work, but w00t): XMPP server Drupal install Symfony (Openfire) Uses pubSub as data format Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 31
  • 32. The one-development-day Symfony CMS Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 32
  • 33. A minimal CMS ξ€Š What is a minimal CMS ? ξ€Š Backend ξ€Š Users management, ξ€Š Possibility to create pages at certain urls ξ€Š Posibiliy to put content in these pages ξ€Š Media management ξ€Š Frontend ξ€Š Ability to display informations Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 33
  • 34. A minimal CMS ξ€Š Backend components ξ€Š sfDoctrineGuardPlugin ξ€Š cleverMediaLibraryPlugin ξ€Š some tables for the model: content: id: displayed_author: varchar(150) title: varchar(255) body: longvarchar created_at: timestamp created_by: { type: integer, foreignTable: sf_guard_user, foreignReference: id } publication_status: varchar(20) published_at: timestamp published_by: { type: integer, foreignTable: sf_guard_user, foreignReference: id } updated_at: timestamp updated_by: { type: integer, foreignTable: sf_guard_user, foreignReference: id } meta_description: longvarchar meta_keywords: longvarchar Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 34
  • 35. A minimal CMS : frontend highlights ξ€Š « catch-allΒ Β» routing rule in routing.yml # for html pages cms: url: /:uri.html param: { module: cms, action: view } requirements: { uri: ^(.)*$ } # for all other defined url cms_garbage: url: /:uri param: { module: cms, action: view } requirements: { uri: ^(.)*$ } Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 35
  • 36. Publication time : cleverMediaLibraryPlugin Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 36
  • 37. Objectifs ξ€Š An enterprise solution for managing media ξ€Š Supports a large number of file formats ξ€Š Images, videos ξ€Š Documents ξ€Š etc. ξ€Š Storage abstraction ξ€Š Media management API ξ€Š Metadata support ξ€Š Search (tags + index), credentials ξ€Š Performance Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 37
  • 38. Formats de fichiers supportΓ©s ξ€Š Images, whatever the type (jpg, gif, png, etc.) ξ€Š Several adapters are available: ξ€Š Imagemagick tools ξ€Š GD ξ€Š PDF documents ξ€Š Office documents ξ€Š OpenOffice ξ€Š MS Office ξ€Š Uses PUNO (PHP ↔ OpenOffice UNO bridge) – not stable ξ€Š Videos ξ€Š Ffmpeg / imagemagick Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 38
  • 39. Schema GD ImageMagick PUNO ... adapters handler Adapter Adapter Image PDF Office ... handlers handler handler handler Model classes cleverMedia File storage abstraction - cleverFilesystemPlugin Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 39
  • 40. File storage abstraction cleverFileSystemPlugin (1/3) ξ€Š Adapters set ξ€Š Disk ξ€Š FTP ξ€Š S3 ξ€Š … contributions are welcome ! ξ€Š The API is classical ξ€Š Statistics: exists / getSize / isDir / isFile ξ€Š Directories operations: mkDir / listDir / ξ€Š File operations: write / unlink / rename / read / copy Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 40
  • 41. File storage abstraction cleverFileSystemPlugin (2/3) ξ€Š File system creation $fs = cleverFilesystem::getInstance(array( 'type' => 'disk', 'root' => '/path/to/root', 'cache_dir' => '/tmp' )); // filesystem operations $content = $fs->listDir(''); $content = $fs->listDir('path/to/directory'); Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 41
  • 42. File storage abstraction cleverFileSystemPlugin (3/3) $fs = cleverFilesystem::getInstance('ftp_michel'); app: cleverFilesystemPlugin: filesystems: ftp_michel: cache_dir: /tmp type: ftp host: localhost username: michel password: p4ssw0rd Port: 21 root: ftpserv ftp://michel:p4ssw0rd@localhost:21/ftpserv/ Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 42
  • 43. API usage // retrieve a folder $parent = ccMediaFolderPeer::retrieveByPath('meetings/cologne'); // Create a folder $folder = new ccMediaFolder(); $fields = array( 'name' => 'Symfony Day Cologne', 'created_by' => $this->getUser()->getUserId(), 'updated_by' => $this->getUser()->getUserId() 'parent' => $parent ); $folder->update($fields); $folder->save(); Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 43
  • 44. API usage // retrieve a folder $parent = ccMediaFolderPeer::retrieveByPath('meetings/cologne'); // Create a file $image = new ccMedia(); $fields = array( 'cc_media_folder' => $folder, 'source' => 'http://lacot.org/image.png', 'filename' => 'new_filename.png', 'updated_by' => $this->getUser()->getUserId(), 'created_by' => $this->getUser()->getUserId() ); $image->update($fields); $image->save(); Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 44
  • 45. tasks Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 45
  • 46. Questions Xavier Lacot <xavier@lacot.org> http://lacot.org/ Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 46
  • 47. Contact us Clever Age : 37, boulevard des Capucines 75002 Paris, France Agencies : Lyon, Bordeaux Phone : +33 1 53 34 66 10 Web : http://www.clever-age.com/ Commercial contact : commercial@clever-age.com Technical contact : technique@clever-age.com Symfony Day – 4. Juni 2009 Clever Age | Xavier Lacot 47