SlideShare una empresa de Scribd logo
1 de 43
Descargar para leer sin conexión
Un progetto open source
cresciuto insieme al web




  Asmir Mustafic - Linux Day 2011
                        Pordenone
   Asmir Mustafic
    ◦ PHP: 8+ anni

    ◦ Lavoro @

    ◦ PUG Friuli

    ◦ http://linkedin.com/in/goetas




                            Asmir Mustafic - Linux Day 2011
                                                  Pordenone
Su le mani!




          Asmir Mustafic - Linux Day 2011
                                Pordenone
   Linguaggio di scripting (1995)
    ◦ Interpretato
   Orientato al web
   Open source (PHP License [non GPL])
   Popolare, scalabile, facile, ecc.




                         Asmir Mustafic - Linux Day 2011
                                               Pordenone
Quanto è cambiato il nostro mondo
negli ultimi 10 anni, con l’avvento
del era di internet?




          Asmir Mustafic - Linux Day 2011
                                Pordenone
   Wordpress
   PHP
   10M di download
   61M di blog attivi
   http://wordpress.com




                       Asmir Mustafic - Linux Day 2011
                                             Pordenone
   MediaWiki
   PHP
   Opensource
   Multidatabase
   Usato da Wikipedia
   http://www.mediawiki.org




                        Asmir Mustafic - Linux Day 2011
                                              Pordenone
   Search engine & more
   PHP
   Migrato da C/C++ a PHP nel 2002
   3.4 G pageview/day
   Uno dei leader del web attuale




                       Asmir Mustafic - Linux Day 2011
                                             Pordenone
   Social network
   PHP (hiphop)
   800M di utenti
   10K server
   http://facebook.com




                          Asmir Mustafic - Linux Day 2011
                                                Pordenone
   Ricerca campione su 10M domini
    ◦ 59% usa PHP
   40 dei 100 siti più vistati al mondo usa PHP
   6° posto dei linguaggi più popolari in
    assoluto (TIOBE Index Settembre 2011)




                          Asmir Mustafic - Linux Day 2011
                                                Pordenone
Perché dovrei scegliere PHP per il
mio prossimo progetto?
Cosa ha di buono?




           Asmir Mustafic - Linux Day 2011
                                 Pordenone
Open source



            Deployment
                                              Community
              rapido




Veloce &
                                                          Documentato
Scalabile




            Estensibile                          Facile



                          Completo &
                            Maturo




                               Asmir Mustafic - Linux Day 2011
                                                     Pordenone
“Si usa Java o .NET per fare i siti seri!”




            Asmir Mustafic - Linux Day 2011
                                  Pordenone
Uso                     Storia

                           1994
      Enterprise             ◦ Esperimenti per
                               appassionati
                           1998
                             ◦ Siti personali
           Small
                           2002
                             ◦ Semplici siti e mini portali
              Home           ◦ Blog e CMS
                           2008
                             ◦ Grandi siti
                             ◦ Istituzioni
                             ◦ Multinazionali

                     Asmir Mustafic - Linux Day 2011
                                           Pordenone
Si possono produrre pessime
applicazioni anche con ottimi linguaggi.




          Asmir Mustafic - Linux Day 2011
                                Pordenone
Vediamo tre semplici regole...




          Asmir Mustafic - Linux Day 2011
                                Pordenone
Pensare molto bene, prima di iniziare a
                       scrivere codice




                Asmir Mustafic - Linux Day 2011
                                      Pordenone
   Troverete la soluzione migliore
   Risolvere un problema in fase di progettazione
    costa davvero poco

    In fase di progettazione




         In fase di sviluppo




             In produzione




                                Ore di lavro

                               Asmir Mustafic - Linux Day 2011
                                                     Pordenone
Non reinventare la ruota




 Asmir Mustafic - Linux Day 2011
                       Pordenone
   Problematiche già risolte
    ◦ Da molto tempo (soluzioni mature)
    ◦ Nel migliore dei modi
    ◦ Da molte persone (anche da esperti del problema)

   Risparmi tempo e fatica

   Ma se siete davvero sicuri di voi stessi, allora
    si può provare...



                            Asmir Mustafic - Linux Day 2011
                                                  Pordenone
Non essere rigidi




Asmir Mustafic - Linux Day 2011
                      Pordenone
   Non avrete tempo
   Non avrete voglia
   Vorrete provare (bene o male che
    vada, imparerete qualcosa!)
   Dovrete migliorare la ruota

   Se non si cambia, non si migliora, si perde in
    partenza!



                          Asmir Mustafic - Linux Day 2011
                                                Pordenone
Le “regole” sono tante altre…
#tu, #cliente, #capo, #team,
#specifiche, ecc.




          Asmir Mustafic - Linux Day 2011
                                Pordenone
Alcune “best practice” per
semplificare la vita...




          Asmir Mustafic - Linux Day 2011
                                Pordenone
   Aderite agli standard
    ◦ Aumenti la qualità                         Faciliti la collaborazione
   Richiedere gli standard


                                       Standard

       Soluzioni                                                                 Filesystem
                       Formattazione    Consistenza          Strumenti
    (architetturali)                                                           (nomenclatura)




                          Regola #2
                          Non reinventare la ruota
                                             Asmir Mustafic - Linux Day 2011
                                                                   Pordenone
   Commenti sul codice
    ◦ phpDocumentor
    ◦ PEAR UML (consigliato)
   Schemi e Diagrammi
    ◦ UML, ER, Wireframe, Workflow...
   Usate un wiki aziendale o DocBook...
   Usate un sistema di controllo versione



                 Regola #1
                 Pensare molto bene prima di iniziare a scrivere codice
                                Asmir Mustafic - Linux Day 2011
                                                      Pordenone
Centralizzato (SVN)                Distribuito (GIT)

   Server centrale                   Più repository
   Si lavora su copie locali          “principali”
   Migliore controllo                Si inviano le modifiche
    accessi                            ai propri “peer”
                                      Si sfuma il concetto di
                                       copia locale




                                Asmir Mustafic - Linux Day 2011
                                                      Pordenone
Controller
   Dividete in entità ben distinte:
    ◦ Dati (Model)
    ◦ Visualizzazione (View)
    ◦ Elaborazione (Controller)                        Model                 View



   Ogni classe/file/funzione assolve ad un solo
    compito (Single Responsibility Principle)!

   La maggior parte delle moderne applicazioni
    ereditano qualche principio da MVC.

                              Asmir Mustafic - Linux Day 2011
                                                    Pordenone
<?php
$res = mysql_query("SELECT * FROM utenti");
?>
<select name='utente'>
<?php
while($data = mysql_fetch_array($res)){
    echo "<option
            value='".$data["id"]."' " .($sel==$data["id"]?'selected':'').">";
    echo htmspecialchars($data["nome"],ENT_QUOTES,'UTF-8');
    echo "</option>";
}
echo "</select>";




                                      Asmir Mustafic - Linux Day 2011
                                                            Pordenone
DATI
<?php
$res = mysql_query("SELECT * FROM utenti");
?>                                                         LOGICA
<select name='utente'>
<?php
while($data = mysql_fetch_array($res)){
    echo "<option
            value='".$data["id"]."' " .($sel==$data["id"]?'selected':'').">";
    echo htmspecialchars($data["nome"],ENT_QUOTES,'UTF-8');
    echo "</option>";
}
echo "</select>";           PRESENTAZIONE



                                        SICUREZZA




                                      Asmir Mustafic - Linux Day 2011
                                                            Pordenone
<?php
$res = mysql_query("SELECT * FROM utenti");
?>
<select name='utente'>
<?php
while($data = mysql_fetch_array($res)){
    echo "<option
            value='".$data["id"]."' " .($sel==$data["id"]?'selected':'').">";
    echo htmspecialchars($data["nome"],ENT_QUOTES,'UTF-8');
    echo "</option>";
}
echo "</select>";




    Basta con codice “groviglio”!
    Applicate i principi dell’MVC!


                                      Asmir Mustafic - Linux Day 2011
                                                            Pordenone
Controller
<?php
$utenti = getElencoUtenti();
display("utenti.template", array("utenti"=>$utenti, "sel"=>$selected));

Model
<?php
function getElencoUtenti(){
    $res = mysql_query("SELECT * FROM utenti");
    return mysql_fetch_all($res) ;
}
View
<select name='name'>
     <? foreach($utenti as $ut): ?>
        <option <?= selectedIf($ut['id']==$sel)?>><?= escape($ut['nome']) ?>
        </option>
     <? endforeach ?>
</select>


                                      Asmir Mustafic - Linux Day 2011
                                                            Pordenone
Controller
<?php                                      Dati prelevati dal Model
$utenti = getElencoUtenti();
display("utenti.template", array("utenti"=>$utenti, "sel"=>$selected));

Model
<?php
function getElencoUtenti(){
    $res = mysql_query("SELECT * FROM utenti");
    return mysql_fetch_all($res) ;
}
View
<select name='name'>
     <? foreach($utenti as $ut): ?>
        <option <?= selectedIf($ut['id']==$sel)?>><?= escape($ut['nome']) ?>
        </option>
     <? endforeach ?>
</select>


                                      Asmir Mustafic - Linux Day 2011
                                                            Pordenone
Controller
<?php
$utenti = getElencoUtenti();
                                          Dati visualizzati tramite la Vista
display("utenti.template", array("utenti"=>$utenti, "sel"=>$selected));

Model
<?php
function getElencoUtenti(){
    $res = mysql_query("SELECT * FROM utenti");
    return mysql_fetch_all($res) ;
}
View
<select name='name'>
     <? foreach($utenti as $ut): ?>
        <option <?= selectedIf($ut['id']==$sel)?>><?= escape($ut['nome']) ?>
        </option>
     <? endforeach ?>
</select>


                                      Asmir Mustafic - Linux Day 2011
                                                            Pordenone
Database driver                            ORM

    PHP PDO                                  Doctrine 2
    Doctrine DBAL                            Propel
    Creole                                   dORM
    ADODB
    $user = new User();
    $user->setName('name');

    $orm->persist($user); // save
    $user = $orm->findByName('name');
    $orm->remove($user); // delete

                       Regola #2
                       Non reinventare la ruota
                       Model per MVC
                                        Asmir Mustafic - Linux Day 2011
                                                              Pordenone
Classico                                  XML Attribute Template

    Twig                                    ATal
    Smarty                                  PHPTAL
    Dwoo                                    Open Power Template
{if count($utenti)}                      <ul t:if="count($utenti)">
   <ul>                                     <li t:foreach="$utenti as $ut">
      {foreach from=$utenti item=ut}          {$ut->name}
        <li>                                </li>
          {$ut->name|escape}             </ul>
        </li>
      {/foreach}
   </ul>
{/if}


                     View per MVC

                                       Asmir Mustafic - Linux Day 2011
                                                             Pordenone
   Probabilmente
    ◦   Penserete meglio a ciò che fate (Regola #1)
    ◦   Non reinventerete la ruota (Regola #2)
    ◦   Sarete aperti al cambiamento (Regola #3)
    ◦   Applicherete MVC

   Probabilmente
    ◦   Il risultato sarà più standard
    ◦   Userete un Template Engine
    ◦   Userete un ORM
    ◦   Sfrutterete gli strumenti offerti (se fanno al caso vostro)
    ◦   L’applicazione sarà più sicura
    ◦   ecc.

   Otterrete migliori risultati con meno sforzo!

                                     Asmir Mustafic - Linux Day 2011
                                                           Pordenone
   Non esiste il framework migliore
   Non esiste il framework peggiore

   Esiste il framework più adatto!

   Scegliete il vostro
    ◦ Orizzontale? Verticale?
    ◦ PHP4? 5? 5.3+?
    ◦ ecc.                      Zend Framework, Symfony, Kohana, eZ
                                Components, Yii,, CakePHP, Lithium,
                                Code Igniter e troppi altri!


                                Asmir Mustafic - Linux Day 2011
                                                      Pordenone
   Scrivete i test
    ◦ Applicate modifiche senza il terrore di “rompere”
      l’applicazione
    ◦ PHPUnit (standard de facto)
   Pensate sempre alla sicurezza
   Tenete sotto controllo le prestazioni
   Usate un IDE “serio”
    ◦ Eclipse, Zend Studio, Aptana, NetBeans, Komodo
   Usate un debugger
    ◦ Xdebug, Zend Debugger
   Provate
    ◦ Phing, Jenkins, Redmine


                                Asmir Mustafic - Linux Day 2011
                                                      Pordenone
   Uno dei modi migliori per mantenersi
    aggiornati e al passo con i tempi è
    partecipare al mondo open source.




                         Asmir Mustafic - Linux Day 2011
                                               Pordenone
Domande?




           Asmir Mustafic - Linux Day 2011
                                 Pordenone
   PHP http://php.net                                  Yii http://www.yiiframework.com/
   Zend Framework http://framework.zend.com            Lithium http://lithify.me/
   Symfony http://symfony.com
                                                        Kohana http://kohanaframework.org/
   eZComponents http://ezcomponents.org
    http://incubator.apache.org/zetacomponents/         Eclipse http://www.eclipse.org
   CakePHP http://cakephp.org/                         Zend Studio http://www.zend.com/products/studio
   Twig http://twig-project.com                        Net beans http://netbeans.org/
   ATal http://opensource.mercuriosistemi.com
                                                        Komodo http://www.activestate.com/komodo-ide
   Dwoo http://dwoo.com
   Smarty http://smarty.net                            Aptana http://www.aptana.com/
   OpenPowerTemplate http://www.invenzzia.org          Xdebug http://xdebug.org/
   Subversion http://subversion.apache.org
   GIT http://git-scm.com
   PHPUnit http://phpunit.de
   SipleTest http://www.simpletest.org/
   Doctrine http://www.doctrine-project.org/
   dOrm http://getdorm.com
   Propel http://www.propelorm.org/
   Pear http://pear.php.net
   phpDocumentor http://www.phpdoc.org/
   Phing http://www.phing.info
   Jenkins http://jenkins-ci.com
   Redmine http://redmine.com




                                                  Asmir Mustafic - Linux Day 2011
                                                                        Pordenone
   php.net
   phpadvent.com
   rogchap.com
   www.slideshare.net/weppos
   wikipedia.com
   zend.com
   langpop.com
   wordpress.com
   www.slideshare.net/dlondero
   joind.in/talk/view/65

                        Asmir Mustafic - Linux Day 2011
                                              Pordenone

Más contenido relacionado

Destacado

Joomla fap-joomla-day-2012
Joomla fap-joomla-day-2012Joomla fap-joomla-day-2012
Joomla fap-joomla-day-2012elpaso66
 
2 regole del corso tecniche di modellazione digitale – computer 3d
2 regole del corso tecniche di modellazione digitale – computer 3d2 regole del corso tecniche di modellazione digitale – computer 3d
2 regole del corso tecniche di modellazione digitale – computer 3dDaniele Francaviglia
 
Wordpress Installation for Windows and Mac
Wordpress Installation for Windows and MacWordpress Installation for Windows and Mac
Wordpress Installation for Windows and MacMarcello Mingardi
 
Luigi ricca portfolio
Luigi ricca portfolioLuigi ricca portfolio
Luigi ricca portfolioLuigi Ricca
 
Misurazione del video sul Web
Misurazione del video sul WebMisurazione del video sul Web
Misurazione del video sul WebPortante Andrea
 
Internet e animazione
Internet e animazioneInternet e animazione
Internet e animazionePivari.com
 
Corso PHP ENAIP - lezione #01 - 17/01/2014
Corso PHP ENAIP - lezione #01 - 17/01/2014Corso PHP ENAIP - lezione #01 - 17/01/2014
Corso PHP ENAIP - lezione #01 - 17/01/2014Matteo Moro
 
Musica, illustrazione e social media: una storia da raccontare
Musica, illustrazione e social media: una storia da raccontareMusica, illustrazione e social media: una storia da raccontare
Musica, illustrazione e social media: una storia da raccontareInSide Training
 
PHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQLPHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQLextrategy
 
Decustruzione progetto e mood board
Decustruzione progetto e mood boardDecustruzione progetto e mood board
Decustruzione progetto e mood boardDaniele Francaviglia
 
exhibition design 2_misure standard/grafica
exhibition design 2_misure standard/graficaexhibition design 2_misure standard/grafica
exhibition design 2_misure standard/graficaDaniele Francaviglia
 
Note per workshop Stop Motion Seconda Parte
Note per workshop Stop Motion Seconda ParteNote per workshop Stop Motion Seconda Parte
Note per workshop Stop Motion Seconda PartePortante Andrea
 
Tecniche di modellazione 3d metodo progettuale
Tecniche di modellazione 3d metodo progettualeTecniche di modellazione 3d metodo progettuale
Tecniche di modellazione 3d metodo progettualeDaniele Francaviglia
 
PHP: strutture di controllo e funzioni
PHP: strutture di controllo e funzioniPHP: strutture di controllo e funzioni
PHP: strutture di controllo e funzioniextrategy
 

Destacado (19)

Joomla fap-joomla-day-2012
Joomla fap-joomla-day-2012Joomla fap-joomla-day-2012
Joomla fap-joomla-day-2012
 
Media tools e significati simbolici 11 aprile 2014 Orient@ti
Media tools e significati simbolici 11 aprile 2014 Orient@tiMedia tools e significati simbolici 11 aprile 2014 Orient@ti
Media tools e significati simbolici 11 aprile 2014 Orient@ti
 
2 regole del corso tecniche di modellazione digitale – computer 3d
2 regole del corso tecniche di modellazione digitale – computer 3d2 regole del corso tecniche di modellazione digitale – computer 3d
2 regole del corso tecniche di modellazione digitale – computer 3d
 
Laboratori e Workshop
Laboratori e WorkshopLaboratori e Workshop
Laboratori e Workshop
 
Wordpress Installation for Windows and Mac
Wordpress Installation for Windows and MacWordpress Installation for Windows and Mac
Wordpress Installation for Windows and Mac
 
Luigi ricca portfolio
Luigi ricca portfolioLuigi ricca portfolio
Luigi ricca portfolio
 
Misurazione del video sul Web
Misurazione del video sul WebMisurazione del video sul Web
Misurazione del video sul Web
 
Creativity and graphic design 4
Creativity and graphic design 4Creativity and graphic design 4
Creativity and graphic design 4
 
Internet e animazione
Internet e animazioneInternet e animazione
Internet e animazione
 
Corso PHP ENAIP - lezione #01 - 17/01/2014
Corso PHP ENAIP - lezione #01 - 17/01/2014Corso PHP ENAIP - lezione #01 - 17/01/2014
Corso PHP ENAIP - lezione #01 - 17/01/2014
 
CINEMA 4D
CINEMA 4DCINEMA 4D
CINEMA 4D
 
Musica, illustrazione e social media: una storia da raccontare
Musica, illustrazione e social media: una storia da raccontareMusica, illustrazione e social media: una storia da raccontare
Musica, illustrazione e social media: una storia da raccontare
 
PHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQLPHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQL
 
Decustruzione progetto e mood board
Decustruzione progetto e mood boardDecustruzione progetto e mood board
Decustruzione progetto e mood board
 
exhibition design 2_misure standard/grafica
exhibition design 2_misure standard/graficaexhibition design 2_misure standard/grafica
exhibition design 2_misure standard/grafica
 
Workshop lezione_3_stand
Workshop lezione_3_standWorkshop lezione_3_stand
Workshop lezione_3_stand
 
Note per workshop Stop Motion Seconda Parte
Note per workshop Stop Motion Seconda ParteNote per workshop Stop Motion Seconda Parte
Note per workshop Stop Motion Seconda Parte
 
Tecniche di modellazione 3d metodo progettuale
Tecniche di modellazione 3d metodo progettualeTecniche di modellazione 3d metodo progettuale
Tecniche di modellazione 3d metodo progettuale
 
PHP: strutture di controllo e funzioni
PHP: strutture di controllo e funzioniPHP: strutture di controllo e funzioni
PHP: strutture di controllo e funzioni
 

Similar a PHP: Un progetto open source cresciuto insieme al web

Fabio Riccio - Un'esperienza di free-software nelle scuole
Fabio Riccio - Un'esperienza di free-software nelle scuoleFabio Riccio - Un'esperienza di free-software nelle scuole
Fabio Riccio - Un'esperienza di free-software nelle scuoleMaurizio Antonelli
 
Linux & Tools: per la piccola azienda e i freelance
Linux & Tools: per la piccola azienda e i freelanceLinux & Tools: per la piccola azienda e i freelance
Linux & Tools: per la piccola azienda e i freelanceFabio Mora
 
GNU/Linux for embedded system
GNU/Linux for embedded systemGNU/Linux for embedded system
GNU/Linux for embedded systemMarco Ferrigno
 
Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2Fabio Mora
 
Soluzioni integrate per il design e la comunicazione digital: Extensis
Soluzioni integrate per il design e la comunicazione digital: ExtensisSoluzioni integrate per il design e la comunicazione digital: Extensis
Soluzioni integrate per il design e la comunicazione digital: ExtensisPico Srl
 
La Unix Way vista da un DevOps
La Unix Way vista da un DevOpsLa Unix Way vista da un DevOps
La Unix Way vista da un DevOpsFabio Mora
 
Il Comune di Modena e l'Open Source
Il Comune di Modena e l'Open SourceIl Comune di Modena e l'Open Source
Il Comune di Modena e l'Open SourceE-R
 
Creare un Information Radiator con Delphi
Creare un Information Radiator con DelphiCreare un Information Radiator con Delphi
Creare un Information Radiator con DelphiMarco Breveglieri
 
Linux per la Computer Forensics: i motivi di una scelta
Linux per la Computer Forensics: i motivi di una sceltaLinux per la Computer Forensics: i motivi di una scelta
Linux per la Computer Forensics: i motivi di una sceltadenis frati
 
Da Zero all'open per PA e PMI
Da Zero all'open per PA e PMIDa Zero all'open per PA e PMI
Da Zero all'open per PA e PMINaLUG
 
Soluzioni Open Source per lo sviluppo di ogni tipologia di sito web. Il ca…
Soluzioni Open Source per lo sviluppo di ogni tipologia di sito web. Il ca…Soluzioni Open Source per lo sviluppo di ogni tipologia di sito web. Il ca…
Soluzioni Open Source per lo sviluppo di ogni tipologia di sito web. Il ca…bsdlover
 
php day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez componentsphp day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez componentsGaetano Giunta
 
The performance of microkernel based system
The performance of microkernel based systemThe performance of microkernel based system
The performance of microkernel based systemSergio Guastaferro
 

Similar a PHP: Un progetto open source cresciuto insieme al web (20)

Fabio Riccio - Un'esperienza di free-software nelle scuole
Fabio Riccio - Un'esperienza di free-software nelle scuoleFabio Riccio - Un'esperienza di free-software nelle scuole
Fabio Riccio - Un'esperienza di free-software nelle scuole
 
Linux & Tools: per la piccola azienda e i freelance
Linux & Tools: per la piccola azienda e i freelanceLinux & Tools: per la piccola azienda e i freelance
Linux & Tools: per la piccola azienda e i freelance
 
GNU/Linux for embedded system
GNU/Linux for embedded systemGNU/Linux for embedded system
GNU/Linux for embedded system
 
Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2Tanti "piccoli rilasci" con Symfony2
Tanti "piccoli rilasci" con Symfony2
 
Soluzioni integrate per il design e la comunicazione digital: Extensis
Soluzioni integrate per il design e la comunicazione digital: ExtensisSoluzioni integrate per il design e la comunicazione digital: Extensis
Soluzioni integrate per il design e la comunicazione digital: Extensis
 
La Unix Way vista da un DevOps
La Unix Way vista da un DevOpsLa Unix Way vista da un DevOps
La Unix Way vista da un DevOps
 
Il Comune di Modena e l'Open Source
Il Comune di Modena e l'Open SourceIl Comune di Modena e l'Open Source
Il Comune di Modena e l'Open Source
 
Creare un Information Radiator con Delphi
Creare un Information Radiator con DelphiCreare un Information Radiator con Delphi
Creare un Information Radiator con Delphi
 
Php for ASP.NET Developers
Php for ASP.NET DevelopersPhp for ASP.NET Developers
Php for ASP.NET Developers
 
this = that
this = that this = that
this = that
 
ASP.NET Core 1.0
ASP.NET Core 1.0ASP.NET Core 1.0
ASP.NET Core 1.0
 
debian gnu linux
debian gnu linuxdebian gnu linux
debian gnu linux
 
Linux per la Computer Forensics: i motivi di una scelta
Linux per la Computer Forensics: i motivi di una sceltaLinux per la Computer Forensics: i motivi di una scelta
Linux per la Computer Forensics: i motivi di una scelta
 
Da Zero all'open per PA e PMI
Da Zero all'open per PA e PMIDa Zero all'open per PA e PMI
Da Zero all'open per PA e PMI
 
Da 0 all'open per PA e PMI
Da 0 all'open per PA e PMIDa 0 all'open per PA e PMI
Da 0 all'open per PA e PMI
 
Soluzioni Open Source per lo sviluppo di ogni tipologia di sito web. Il ca…
Soluzioni Open Source per lo sviluppo di ogni tipologia di sito web. Il ca…Soluzioni Open Source per lo sviluppo di ogni tipologia di sito web. Il ca…
Soluzioni Open Source per lo sviluppo di ogni tipologia di sito web. Il ca…
 
2006 Py01 intro
2006 Py01 intro2006 Py01 intro
2006 Py01 intro
 
KDE4 ld2007
KDE4 ld2007KDE4 ld2007
KDE4 ld2007
 
php day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez componentsphp day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez components
 
The performance of microkernel based system
The performance of microkernel based systemThe performance of microkernel based system
The performance of microkernel based system
 

PHP: Un progetto open source cresciuto insieme al web

  • 1. Un progetto open source cresciuto insieme al web Asmir Mustafic - Linux Day 2011 Pordenone
  • 2. Asmir Mustafic ◦ PHP: 8+ anni ◦ Lavoro @ ◦ PUG Friuli ◦ http://linkedin.com/in/goetas Asmir Mustafic - Linux Day 2011 Pordenone
  • 3. Su le mani! Asmir Mustafic - Linux Day 2011 Pordenone
  • 4. Linguaggio di scripting (1995) ◦ Interpretato  Orientato al web  Open source (PHP License [non GPL])  Popolare, scalabile, facile, ecc. Asmir Mustafic - Linux Day 2011 Pordenone
  • 5. Quanto è cambiato il nostro mondo negli ultimi 10 anni, con l’avvento del era di internet? Asmir Mustafic - Linux Day 2011 Pordenone
  • 6. Wordpress  PHP  10M di download  61M di blog attivi  http://wordpress.com Asmir Mustafic - Linux Day 2011 Pordenone
  • 7. MediaWiki  PHP  Opensource  Multidatabase  Usato da Wikipedia  http://www.mediawiki.org Asmir Mustafic - Linux Day 2011 Pordenone
  • 8. Search engine & more  PHP  Migrato da C/C++ a PHP nel 2002  3.4 G pageview/day  Uno dei leader del web attuale Asmir Mustafic - Linux Day 2011 Pordenone
  • 9. Social network  PHP (hiphop)  800M di utenti  10K server  http://facebook.com Asmir Mustafic - Linux Day 2011 Pordenone
  • 10. Ricerca campione su 10M domini ◦ 59% usa PHP  40 dei 100 siti più vistati al mondo usa PHP  6° posto dei linguaggi più popolari in assoluto (TIOBE Index Settembre 2011) Asmir Mustafic - Linux Day 2011 Pordenone
  • 11. Perché dovrei scegliere PHP per il mio prossimo progetto? Cosa ha di buono? Asmir Mustafic - Linux Day 2011 Pordenone
  • 12. Open source Deployment Community rapido Veloce & Documentato Scalabile Estensibile Facile Completo & Maturo Asmir Mustafic - Linux Day 2011 Pordenone
  • 13. “Si usa Java o .NET per fare i siti seri!” Asmir Mustafic - Linux Day 2011 Pordenone
  • 14. Uso Storia  1994 Enterprise ◦ Esperimenti per appassionati  1998 ◦ Siti personali Small  2002 ◦ Semplici siti e mini portali Home ◦ Blog e CMS  2008 ◦ Grandi siti ◦ Istituzioni ◦ Multinazionali Asmir Mustafic - Linux Day 2011 Pordenone
  • 15. Si possono produrre pessime applicazioni anche con ottimi linguaggi. Asmir Mustafic - Linux Day 2011 Pordenone
  • 16. Vediamo tre semplici regole... Asmir Mustafic - Linux Day 2011 Pordenone
  • 17. Pensare molto bene, prima di iniziare a scrivere codice Asmir Mustafic - Linux Day 2011 Pordenone
  • 18. Troverete la soluzione migliore  Risolvere un problema in fase di progettazione costa davvero poco In fase di progettazione In fase di sviluppo In produzione Ore di lavro Asmir Mustafic - Linux Day 2011 Pordenone
  • 19. Non reinventare la ruota Asmir Mustafic - Linux Day 2011 Pordenone
  • 20. Problematiche già risolte ◦ Da molto tempo (soluzioni mature) ◦ Nel migliore dei modi ◦ Da molte persone (anche da esperti del problema)  Risparmi tempo e fatica  Ma se siete davvero sicuri di voi stessi, allora si può provare... Asmir Mustafic - Linux Day 2011 Pordenone
  • 21. Non essere rigidi Asmir Mustafic - Linux Day 2011 Pordenone
  • 22. Non avrete tempo  Non avrete voglia  Vorrete provare (bene o male che vada, imparerete qualcosa!)  Dovrete migliorare la ruota  Se non si cambia, non si migliora, si perde in partenza! Asmir Mustafic - Linux Day 2011 Pordenone
  • 23. Le “regole” sono tante altre… #tu, #cliente, #capo, #team, #specifiche, ecc. Asmir Mustafic - Linux Day 2011 Pordenone
  • 24. Alcune “best practice” per semplificare la vita... Asmir Mustafic - Linux Day 2011 Pordenone
  • 25. Aderite agli standard ◦ Aumenti la qualità Faciliti la collaborazione  Richiedere gli standard Standard Soluzioni Filesystem Formattazione Consistenza Strumenti (architetturali) (nomenclatura) Regola #2 Non reinventare la ruota Asmir Mustafic - Linux Day 2011 Pordenone
  • 26. Commenti sul codice ◦ phpDocumentor ◦ PEAR UML (consigliato)  Schemi e Diagrammi ◦ UML, ER, Wireframe, Workflow...  Usate un wiki aziendale o DocBook...  Usate un sistema di controllo versione Regola #1 Pensare molto bene prima di iniziare a scrivere codice Asmir Mustafic - Linux Day 2011 Pordenone
  • 27. Centralizzato (SVN) Distribuito (GIT)  Server centrale  Più repository  Si lavora su copie locali “principali”  Migliore controllo  Si inviano le modifiche accessi ai propri “peer”  Si sfuma il concetto di copia locale Asmir Mustafic - Linux Day 2011 Pordenone
  • 28. Controller  Dividete in entità ben distinte: ◦ Dati (Model) ◦ Visualizzazione (View) ◦ Elaborazione (Controller) Model View  Ogni classe/file/funzione assolve ad un solo compito (Single Responsibility Principle)!  La maggior parte delle moderne applicazioni ereditano qualche principio da MVC. Asmir Mustafic - Linux Day 2011 Pordenone
  • 29. <?php $res = mysql_query("SELECT * FROM utenti"); ?> <select name='utente'> <?php while($data = mysql_fetch_array($res)){ echo "<option value='".$data["id"]."' " .($sel==$data["id"]?'selected':'').">"; echo htmspecialchars($data["nome"],ENT_QUOTES,'UTF-8'); echo "</option>"; } echo "</select>"; Asmir Mustafic - Linux Day 2011 Pordenone
  • 30. DATI <?php $res = mysql_query("SELECT * FROM utenti"); ?> LOGICA <select name='utente'> <?php while($data = mysql_fetch_array($res)){ echo "<option value='".$data["id"]."' " .($sel==$data["id"]?'selected':'').">"; echo htmspecialchars($data["nome"],ENT_QUOTES,'UTF-8'); echo "</option>"; } echo "</select>"; PRESENTAZIONE SICUREZZA Asmir Mustafic - Linux Day 2011 Pordenone
  • 31. <?php $res = mysql_query("SELECT * FROM utenti"); ?> <select name='utente'> <?php while($data = mysql_fetch_array($res)){ echo "<option value='".$data["id"]."' " .($sel==$data["id"]?'selected':'').">"; echo htmspecialchars($data["nome"],ENT_QUOTES,'UTF-8'); echo "</option>"; } echo "</select>";  Basta con codice “groviglio”!  Applicate i principi dell’MVC! Asmir Mustafic - Linux Day 2011 Pordenone
  • 32. Controller <?php $utenti = getElencoUtenti(); display("utenti.template", array("utenti"=>$utenti, "sel"=>$selected)); Model <?php function getElencoUtenti(){ $res = mysql_query("SELECT * FROM utenti"); return mysql_fetch_all($res) ; } View <select name='name'> <? foreach($utenti as $ut): ?> <option <?= selectedIf($ut['id']==$sel)?>><?= escape($ut['nome']) ?> </option> <? endforeach ?> </select> Asmir Mustafic - Linux Day 2011 Pordenone
  • 33. Controller <?php Dati prelevati dal Model $utenti = getElencoUtenti(); display("utenti.template", array("utenti"=>$utenti, "sel"=>$selected)); Model <?php function getElencoUtenti(){ $res = mysql_query("SELECT * FROM utenti"); return mysql_fetch_all($res) ; } View <select name='name'> <? foreach($utenti as $ut): ?> <option <?= selectedIf($ut['id']==$sel)?>><?= escape($ut['nome']) ?> </option> <? endforeach ?> </select> Asmir Mustafic - Linux Day 2011 Pordenone
  • 34. Controller <?php $utenti = getElencoUtenti(); Dati visualizzati tramite la Vista display("utenti.template", array("utenti"=>$utenti, "sel"=>$selected)); Model <?php function getElencoUtenti(){ $res = mysql_query("SELECT * FROM utenti"); return mysql_fetch_all($res) ; } View <select name='name'> <? foreach($utenti as $ut): ?> <option <?= selectedIf($ut['id']==$sel)?>><?= escape($ut['nome']) ?> </option> <? endforeach ?> </select> Asmir Mustafic - Linux Day 2011 Pordenone
  • 35. Database driver ORM  PHP PDO  Doctrine 2  Doctrine DBAL  Propel  Creole  dORM  ADODB $user = new User(); $user->setName('name'); $orm->persist($user); // save $user = $orm->findByName('name'); $orm->remove($user); // delete Regola #2 Non reinventare la ruota Model per MVC Asmir Mustafic - Linux Day 2011 Pordenone
  • 36. Classico XML Attribute Template  Twig  ATal  Smarty  PHPTAL  Dwoo  Open Power Template {if count($utenti)} <ul t:if="count($utenti)"> <ul> <li t:foreach="$utenti as $ut"> {foreach from=$utenti item=ut} {$ut->name} <li> </li> {$ut->name|escape} </ul> </li> {/foreach} </ul> {/if} View per MVC Asmir Mustafic - Linux Day 2011 Pordenone
  • 37. Probabilmente ◦ Penserete meglio a ciò che fate (Regola #1) ◦ Non reinventerete la ruota (Regola #2) ◦ Sarete aperti al cambiamento (Regola #3) ◦ Applicherete MVC  Probabilmente ◦ Il risultato sarà più standard ◦ Userete un Template Engine ◦ Userete un ORM ◦ Sfrutterete gli strumenti offerti (se fanno al caso vostro) ◦ L’applicazione sarà più sicura ◦ ecc.  Otterrete migliori risultati con meno sforzo! Asmir Mustafic - Linux Day 2011 Pordenone
  • 38. Non esiste il framework migliore  Non esiste il framework peggiore  Esiste il framework più adatto!  Scegliete il vostro ◦ Orizzontale? Verticale? ◦ PHP4? 5? 5.3+? ◦ ecc. Zend Framework, Symfony, Kohana, eZ Components, Yii,, CakePHP, Lithium, Code Igniter e troppi altri! Asmir Mustafic - Linux Day 2011 Pordenone
  • 39. Scrivete i test ◦ Applicate modifiche senza il terrore di “rompere” l’applicazione ◦ PHPUnit (standard de facto)  Pensate sempre alla sicurezza  Tenete sotto controllo le prestazioni  Usate un IDE “serio” ◦ Eclipse, Zend Studio, Aptana, NetBeans, Komodo  Usate un debugger ◦ Xdebug, Zend Debugger  Provate ◦ Phing, Jenkins, Redmine Asmir Mustafic - Linux Day 2011 Pordenone
  • 40. Uno dei modi migliori per mantenersi aggiornati e al passo con i tempi è partecipare al mondo open source. Asmir Mustafic - Linux Day 2011 Pordenone
  • 41. Domande? Asmir Mustafic - Linux Day 2011 Pordenone
  • 42. PHP http://php.net  Yii http://www.yiiframework.com/  Zend Framework http://framework.zend.com  Lithium http://lithify.me/  Symfony http://symfony.com  Kohana http://kohanaframework.org/  eZComponents http://ezcomponents.org http://incubator.apache.org/zetacomponents/  Eclipse http://www.eclipse.org  CakePHP http://cakephp.org/  Zend Studio http://www.zend.com/products/studio  Twig http://twig-project.com  Net beans http://netbeans.org/  ATal http://opensource.mercuriosistemi.com  Komodo http://www.activestate.com/komodo-ide  Dwoo http://dwoo.com  Smarty http://smarty.net  Aptana http://www.aptana.com/  OpenPowerTemplate http://www.invenzzia.org  Xdebug http://xdebug.org/  Subversion http://subversion.apache.org  GIT http://git-scm.com  PHPUnit http://phpunit.de  SipleTest http://www.simpletest.org/  Doctrine http://www.doctrine-project.org/  dOrm http://getdorm.com  Propel http://www.propelorm.org/  Pear http://pear.php.net  phpDocumentor http://www.phpdoc.org/  Phing http://www.phing.info  Jenkins http://jenkins-ci.com  Redmine http://redmine.com Asmir Mustafic - Linux Day 2011 Pordenone
  • 43. php.net  phpadvent.com  rogchap.com  www.slideshare.net/weppos  wikipedia.com  zend.com  langpop.com  wordpress.com  www.slideshare.net/dlondero  joind.in/talk/view/65 Asmir Mustafic - Linux Day 2011 Pordenone