Upload
asmir-mustafic
View
879
Download
4
Embed Size (px)
DESCRIPTION
PHP, i cambiamenti di un progetto cresciuto insieme al web
Citation preview
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
Asmir Mustafic - Linux Day 2011 Pordenone
Open source
Community
Documentato
Facile
Completo &
Maturo
Estensibile
Veloce &
Scalabile
Deployment
rapido
“Si usa Java o .NET per fare i siti seri!”
Asmir Mustafic - Linux Day 2011 Pordenone
Uso Storia
1994◦ Esperimenti per
appassionati 1998
◦ Siti personali 2002
◦ Semplici siti e mini portali◦ Blog e CMS
2008◦ Grandi siti◦ Istituzioni◦ Multinazionali
Asmir Mustafic - Linux Day 2011 Pordenone
Enterprise
Small
Home
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 produzione
In fase di sviluppo
In fase di progettazione
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à
Richiedere gli standard
Asmir Mustafic - Linux Day 2011 Pordenone
Regola #2Non reinventare la ruota
Standard
Soluzioni
(architetturali)Formattazione Consistenza Strumenti
Filesystem
(nomenclatura)
Faciliti la collaborazione
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 #1Pensare molto bene prima di iniziare a scrivere codice
Asmir Mustafic - Linux Day 2011 Pordenone
Centralizzato (SVN) Distribuito (GIT)
Server centrale
Si lavora su copie locali
Migliore controllo accessi
Più repository “principali”
Si inviano le modifiche ai propri “peer”
Si sfuma il concetto di copia locale
Asmir Mustafic - Linux Day 2011 Pordenone
Dividete in entità ben distinte:◦ Dati (Model)
◦ Visualizzazione (View)
◦ Elaborazione (Controller)
Ogni classe/file/funzione assolve ad un solo compito (Single Responsibility Principle)!
La maggior parte delle moderne applicazioni ereditano qualche principio da MVC.
Controller
ViewModel
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
<?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>";
DATI
PRESENTAZIONE
SICUREZZA
LOGICA
Asmir Mustafic - Linux Day 2011 Pordenone
Basta con codice “groviglio”!
Applicate i principi dell’MVC!
<?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
<?php
$utenti = getElencoUtenti();
display("utenti.template", array("utenti"=>$utenti, "sel"=>$selected));
Asmir Mustafic - Linux Day 2011 Pordenone
<?php
function getElencoUtenti(){
$res = mysql_query("SELECT * FROM utenti");
return mysql_fetch_all($res) ;
}
Controller
View
Model
<select name='name'>
<? foreach($utenti as $ut): ?>
<option <?= selectedIf($ut['id']==$sel)?>><?= escape($ut['nome']) ?>
</option>
<? endforeach ?>
</select>
<?php
function getElencoUtenti(){
$res = mysql_query("SELECT * FROM utenti");
return mysql_fetch_all($res) ;
}
Controller
Model
<?php
$utenti = getElencoUtenti();
display("utenti.template", array("utenti"=>$utenti, "sel"=>$selected));
Asmir Mustafic - Linux Day 2011 Pordenone
Dati prelevati dal Model
View
<select name='name'>
<? foreach($utenti as $ut): ?>
<option <?= selectedIf($ut['id']==$sel)?>><?= escape($ut['nome']) ?>
</option>
<? endforeach ?>
</select>
<?php
$utenti = getElencoUtenti();
display("utenti.template", array("utenti"=>$utenti, "sel"=>$selected));
<?php
function getElencoUtenti(){
$res = mysql_query("SELECT * FROM utenti");
return mysql_fetch_all($res) ;
}
Controller
View
Model
<select name='name'>
<? foreach($utenti as $ut): ?>
<option <?= selectedIf($ut['id']==$sel)?>><?= escape($ut['nome']) ?>
</option>
<? endforeach ?>
</select>
Asmir Mustafic - Linux Day 2011 Pordenone
Dati visualizzati tramite la Vista
Database driver ORM
PHP PDO
Doctrine DBAL
Creole
ADODB
Doctrine 2 Propel dORM
Asmir Mustafic - Linux Day 2011 Pordenone
Regola #2Non reinventare la ruotaModel per MVC
$user = new User();
$user->setName('name');
$orm->persist($user); // save
$user = $orm->findByName('name');
$orm->remove($user); // delete
Classico XML Attribute Template
Twig
Smarty
Dwoo
ATal PHPTAL Open Power Template
{if count($utenti)}
<ul>
{foreach from=$utenti item=ut}
<li>
{$ut->name|escape}
</li>
{/foreach}
</ul>
{/if}
<ul t:if="count($utenti)">
<li t:foreach="$utenti as $ut">
{$ut->name}
</li>
</ul>
Asmir Mustafic - Linux Day 2011 Pordenone
View per MVC
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.
Asmir Mustafic - Linux Day 2011 Pordenone
Zend Framework, Symfony, Kohana, eZComponents, Yii,, CakePHP, Lithium, Code Igniter e troppi altri!
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
Asmir Mustafic - Linux Day 2011 Pordenone
Domande?
PHP http://php.net
Zend Framework http://framework.zend.com
Symfony http://symfony.com
eZComponents http://ezcomponents.orghttp://incubator.apache.org/zetacomponents/
CakePHP http://cakephp.org/
Twig http://twig-project.com
ATal http://opensource.mercuriosistemi.com
Dwoo http://dwoo.com
Smarty http://smarty.net
OpenPowerTemplate http://www.invenzzia.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
Yii http://www.yiiframework.com/
Lithium http://lithify.me/
Kohana http://kohanaframework.org/
Eclipse http://www.eclipse.org
Zend Studio http://www.zend.com/products/studio
Net beans http://netbeans.org/
Komodo http://www.activestate.com/komodo-ide
Aptana http://www.aptana.com/
Xdebug http://xdebug.org/
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