19
maggio
2010
0

Doctrine migrate: quando ci si accorge di essere in ritardo

A volte può capitare di essere pronti per il deploy di una applicazione quando ci accorgiamo di aver dimenticato di creare gli script per aggiornare il database in produzione.
Con Symfony, Doctrine e un sistema di versioning è possibile rimediare molto facilmente.
Questa è la mia ricetta:

  • Recuperare la versione di config/doctrine/schema.yml che rappresenta il database in produzione (verosimilmente il file che è adesso in produzione ;) oppure con il sistema di versioning)
  • Lanciare ./symfony doctrine:build --all
  • Copiare l’attuale file config/doctrine/schema.yml in un posto sicuro
  • Sostituire il file config/doctrine/schema.yml con la copia “vecchia” recuperata
  • Lanciare ./symfony doctrine:generate-migrations-diff (se necessario con il parametro env settato)
  • Aprire il file *version*.php appena creato dalla procedura in lib/migration/doctrine (se è la prima volta che migri ce n’è uno solo altrimenti apri solo l’ultimo)
  • Inverti il nome dei metodi “up()” e “down()”, cioè sostituisci il nome “up()” con “down()” e viceversa
  • Riporta lo schema.yml all’ultima versione
  • Ora puoi lanciare il task di migrazione ./symfony doctrine:migrate
  • Nel caso di errori di CHARSET o COLLATION nel lanciare il task precedente, verifica che nel file di migrazione che hai modificato precedentemente non siano presenti i parametri ‘charset’ e ‘collate’ come opzioni dei metodi createTable()

Buona migrazione a tutti.

17
aprile
2010
0

Selenium RC Firefox vs Iceweasel in Debian

Se siete così pazzi da aver installato Debian sui vostri computer e rimanete fedeli alle sue politiche (anche con qualche strappo), vi troverete con questo errore lanciando i vostri test con Selenium RC

PHPUnit_Framework_Exception: Response from Selenium RC server for getNewBrowserSession(*firefox, http://localhost/).
Failed to start new browser session: Error while launching browser.

Questo semplicemente perchè… non avete effettivamente Firefox installato!
I trucco è aggiungere il path di Iceweasel nella dichiarazione del browser da utilizzare con Selenium. Quindi nei vostri test (se utilizzate PHP) sarà

$this->setBrowser("*firefox /usr/bin/iceweasel");

Oppure aggiungete il link

ln -s /usr/lib/iceweasel/iceweasel /usr/bin/firefox-bin

Buoni test a tutti!

27
marzo
2010
5

Symfony: caricare helper dalle action

Talvolta è utile poter caricare alcuni helper dal controller o dal modello, per esempio mi è capitato di dover formattare una data o utilizzare alcuni dei miei helper direttamente dal controller.
Per far questo è sufficiente inserire il codice seguente nel metodo in cui si ha la necessità:

sfLoad::helpers(array('helper1', 'helper2', ...));

Buon coding.

UPDATE: per sf 1.4

$this->getContext()->getConfiguration()->loadHelpers('Partial');
$this->getContext()->getConfiguration()->loadHelpers(array('helper1', 'helper2', ...));

19
settembre
2009
0

Symfony e Ajax, finalmente il “cart” anche con jQuery

Ho appena patchato il plugin sfJqueryReloaded (il trunk) per abilitare il supporto a jq_drop_receiving_element(), ultimo tassello mancante per poter riscrivere il tutorial ajax di symfony anche con jQuery.

Potete trovare la demo riscritta in http://cart.demo.keasoft.it/ e la patch (in attesa di approvazione dai lead del plugin) qui jQueryHelper.php.diff

Buon divertimento

27
giugno
2009
2

Aggiornamento del kernel: tutta colpa di initramfs-tools? No di libmtp

Oggi mi sono deciso ad aggiornare il kernel alla 2.6.30 visto che avevo qualche problema di installazione (postinst) con la versione 2.6.29-2. Lanciando apt-get ricevevo questo messaggio

update-initramfs: Generating /boot/initrd.img-2.6.29-2-686
cpio: ./etc/udev/rules.d/libmtp.rules: Cannot stat: No such file or directory
update-initramfs: failed for /boot/initrd.img-2.6.29-2-686
dpkg: il sottoprocesso installed post-installation script ha restituito un codice di errore 1
E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem.

Stessa cosa con il 2.6.30… sigh!
Spulciando nella rete ho trovato un post tra i Debian bug che riportava esattamente lo stesso errore.
L’errore è dovuto ad una coesistenza difficile tra due versioni di libmtp: io avevo installato sia la libmtp5 che la libmtp8. E’ stato sufficiente eliminare la 5 (obsoleta) e tutto si è risolto automagicamente.
Buon upgrade a tutti!

24
maggio
2009
0

Insegnamenti di Rasmus Lerdorf: verificare gli include con PECL/Inclued

Sono stato la settimana scorsa all’ottimo phpday 2009. Uno dei talk che mi ha colpito maggiormente è stato quello si Rasmus, l’inventore del PHP. Veramente ha tenuto due talk, uno sulla storia del php (Welcome) e l’altro, sconvolgente, sull’ottimizzazione (Simple is Hard). Rasmus era piuttosto infervorato sulla questione ottimizzazione, semplicità del codice e conseguente abbandono dei framework.
Ha spiegato alcune tecniche per la verifica dei colli di bottiglia dei siti, sia con benchmark sia con strumenti di diagnostica. Ho provato siege (si scarica e si lancia) e sto provando inclued che essendo un PECL si installa da riga di comando con:

# pecl install inclued

Ma con mia grande sorpresa non si è installato

running: phpize
sh: phpize: command not found
ERROR: `phpize' failed

Grrrrr. Alla ricerca del comando perduto:

# apt-get install php5-dev

Rilanciando il comando, pecl scarica il pacchetto, lo compila e lo installa. Cerca di modificare la configurazione di php.ini senza successo, quindi procedo con inserire la configurazione in /etc/php5/conf.d/inclued.ini

extension=inclued.so
inclued.enabled=1
inclued.dumpdir=/tmp

Fatto, ora inizia il divertimento… ma solo DOPO aver riavviato apache (altrimenti si perdono decine di minuti a chiedersi perchè nonostante gli sforzi /tmp rimane vuota!).
Ricaricando una qualsiasi pagina vengono creati file /tmp/include.XXXXX.1 e a questo punto si possono graficare:

$ php /usr/share/php/gengraph.php -i inclued.27843.1
Written inclued.out.dot...
$ dot -Tpng -o 1.png inclued.out.dot

Ho testato la home page di un’applicazione che sto scrivendo con Symfony 1.2, se volete vedere la devastazione dei risultati guardate l’immagine.

Albero di include/require di un progetto symfony

Albero di include/require di un progetto symfony

13
novembre
2008
0

IPC 2008 Marble game: the solution!

I’m happy to announce that I’ve found the solution! Marble game (only one level) is solved with 30 steps and the program runs only 173734 iterations!!! :P
You can try to decrease the limit (now 30) and reach the solution quickly… but be aware, you may not find the solution at all.

Donwload: marble_game.zip (1.3KB)

$ php marble_game.php
And wait… ;)

2
ottobre
2008
1

Far convivere Symfony 1.0, 1.1 e 1.2

A volte capita di dover far convivere sulla stessa macchina di sviluppo diverse versioni si Symfony. Ci sono diverse soluzioni per poter realizzare il nostro scopo e qui vi esporrò quella che utilizzo più frequentemente.
Presupposto che la maggior parte delle applicazioni siano scritte per SF 1.0 oppure che questo sia già installato via PEAR e presupposto che vogliamo installare anche la 1.1 e la 1.2 sulla stessa macchina, procediamo come segue:

  • installazione di SF 1.0 via PEAR
  • installazione di SF 1.1 e 1.2 via SVN

L’installazione classica di SF da manuale via PEAR è la seguente (la versione corrente è la 1.0.18):

$ pear channel-discover pear.symfony-project.com
$ pear install symfony/symfony-1.0.18

In questo modo quando lanciamo il comando

$ symfony -V

otterremo la versione appena installata

symfony version 1.0.18

Ora procediamo con l’installazione di Symfony 1.1 da SVN: prendendo spunto dal manuale prendiamo la versione corrente, non quella di sviluppo ma quella stabile (ad oggi la 1.1.3).
Prepariamo la directory che ci servirà come deposito di SF 1.1 e 1.2

$ mkdir ~/symfony_rep
$ cd ~/symfony_rep

Ora prendiamo l’ultima release del ramo 1.1

$ svn co http://svn.symfony-project.com/tags/RELEASE_1_1_3
$ ln -s RELEASE_1_1_3 1.1

Facciamo la stessa cosa per la 1.2 (se ne avete bisogno) ma in questo caso non essendo ancora stata rilasciata la stabile dovremmo prendere la versione di sviluppo come da manuale

$ svn co http://svn.symfony-project.com/branches/1.2

Ottimo, abbiamo tutte e tre le versioni installate, ora non ci resta che aggiungere 2 alias per rendere l’utilizzo della versione 1.1 e 1.2 più semplice.

$ alias sf11='~/symfony_rep/1.1/data/bin/symfony'
$ alias sf12='~/symfony_rep/1.2/data/bin/symfony'

Questi alias per comodità potete inserirli nel vostro ~/.bashrc così che siano sempre disponibili ad ogni riavvio (o apertura di nuove shell).
Se tutto è andato bene, digitando i vari sf11 e sf12 doveste ottenere il seguente risultato:

$ sf11 -V
symfony version 1.1.3 (/home/VOSTROUTENTE/symfony_rep/RELEASE_1_1_3/lib)
$ sf12 -V
symfony version 1.2.0-DEV (/home/VOSTROUTENTE/symfony_rep/1.2/lib)

Buon lavoro!

29
settembre
2008
0

Regali di Natale

Se siete in giro e vi volete togliere il pensiero per il mio prossimo regalo di Natale potete essere i primi a regalarmi questo.
Ok dai… potete fare anche una colletta :P

18
settembre
2008
1

Dominio in vendita

Non il mio… ma volevo comprare qualcosa di più simpatico per il mio blog tipo k3a.net
Sono andato a vedere se era libero (povero illuso) e ho trovato che era in vendita da alcuni simpaticoni che hanno monopolizzato una miriade di domini, praticamente tutti i domini con 3 e 4 caratteri sono stati registrati,
Il costo? 175$ !!!
Mi sa che a meno di una vincita al lotto, per il momento ho altro da acquistare… miii 175$ per un dominio…