Very short trick: avoid error message in PHP

Mercoledì 8 Ottobre, 2008

Se non vogliamo che una funzione PHP emetta un qualsiasi errore o warning, basta inserire prima della chiamata alla funzione il carattere chiocciola - o at - (@):

PHP:
  1. // invece di usare la forma canonica
  2. $res = miaFunc();
  3. // è possibile usare
  4. $res = @miaFunc();

Post correlati

Very short trick: PHP auto echo

Giovedì 2 Ottobre, 2008

In PHP è possibile usare una forma abbreviata, o contratta, per visualizzare variabili o ritorni di funzioni:

PHP:
  1. // al posto di
  2. <?php echo $miavar ?>
  3. // è possibile scrivere
  4. <?=$miavar?>
  5. // al posto di
  6. <?php echo miaFunc() ?>
  7. // è possibile scrivere
  8. <?=miaFunc()?>

Post correlati

Skypemote versione Adobe AIR

Martedì 30 Settembre, 2008

Download Install Skypemote Adobe AIR Version

Questa è la prima release, la 0.8 (allineata con la versione online), di Skype Emotions Editor - Skypemote - in versione Adobe AIR. Per adesso le funzionalità sono le medisime della versione online, con il vantaggio di essere un'applicazione desktop, installabile quindi su Windows, Mac e Linux.
Prima dell'installazione ricordatevi di aggiornare e/o installare per la prima volta le runtime di Adobe AIR, se non l'avete già fatto in precedenza.

Download

Potete scaricare Air Skypemote da Google Code.

Post correlati

Actionscript 3.0 for beginners: lesson #3

Domenica 28 Settembre, 2008

Continuiamo l'analisi dell'esempio del gioco Tic Tac Toe, presentato in Actionscript 3.0 for beginners: lesson #2. Eravamo arrivati alla funzione che crea la griglia di gioco:

Actionscript:
  1. /**
  2. * Disegno graficamente la griglia (3x3) a video
  3. *
  4. * @param        void
  5. * @return       void
  6. * @private
  7. */
  8. private function createGrid():void {
  9.     // puntatore temporaneo ad uno oggetto MovieClip
  10.     // nota: qui si sarebbe potuto usare anche un oggetto Sprite
  11.     // ma in questo caso mi serve di poter estendere l'oggetto
  12.     // aggiungendo alcune proproetà personali. L'oggetto Sprite
  13.     // è una classe chiusa e quindi non estendibile runtime, mentre
  14.     // la classe MovieClip è una classe dinamica e quindi rende
  15.     // possibile l'aggiunta di proprietà runtime
  16.     var tm:MovieClip, i:uint = 0;
  17.     // aggiungo in uno schema 3x3 i MovieClip
  18.     for(; i <9; i++) {
  19.         tm                    = new MovieClip();
  20.         addChild( tm );
  21.         tm.x                  = OFFSETX+( (i%3)*(PLAYER_WIDTH+PLAYER_OFFSET) )
  22.         tm.y                  = OFFSETY+Math.floor(i/3)*(PLAYER_HEIGHT+PLAYER_OFFSET)
  23.         tm._index             = i;
  24.         drawPlayer( tm, 0 );
  25.     }
  26.     // disegno le 2 linee veriticali e le 2 orizzontali
  27.     with( this.graphics ) {
  28.         lineStyle(6,0x666666);
  29.         moveTo(OFFSETX,OFFSETY+(PLAYER_HEIGHT+15));
  30.         lineTo(OFFSETX+( (PLAYER_WIDTH+20)*3 ),OFFSETY+(PLAYER_HEIGHT+15));
  31.         moveTo(OFFSETX,OFFSETY+(PLAYER_HEIGHT+20)*2);
  32.         lineTo(OFFSETX+( (PLAYER_WIDTH+20)*3 ),OFFSETY+(PLAYER_HEIGHT+20)*2);
  33.         moveTo(OFFSETX+(PLAYER_WIDTH+15),OFFSETY);
  34.         lineTo(OFFSETX+(PLAYER_WIDTH+15),OFFSETY+( (PLAYER_HEIGHT+20)*3 ));
  35.         moveTo(OFFSETX+(PLAYER_WIDTH+20)*2,OFFSETY);
  36.         lineTo(OFFSETX+(PLAYER_WIDTH+20)*2,OFFSETY+( (PLAYER_HEIGHT+20)*3 ));
  37.     }
  38. }

Continua a leggere... »

Post correlati

jQuery: come costruire un’estensione Plugin

Martedì 23 Settembre, 2008

Come tutte le librerie di questo tipo anche jQuery permette di estendere le sue funzionalità base tramite dei veri e propri plugin. Rispettando le regole del suo funzionamento, cioè restituiendo sempre un puntatore all'elemento selezionato o a jQuery stessa, è possibile scrivere un plugin con poche righe di codice. Prendiamo come esempio il codice proposto in jQuery contro tutti: un benchmark con 5 browser che era (dopo la correzione segnalata da Luca):

JavaScript:
  1. $('h2.dropdown').css('cursor','pointer').click(
  2.     function() {
  3.         if( $(this).next().is(':hidden') ) $(this).next().slideDown(); else $(this).next().slideUp();
  4.     }
  5. );

Continua a leggere... »

Post correlati

Very short snippet: PHP word cut

Domenica 21 Settembre, 2008

Delimita una porzione di testo per il numero di "parole":

PHP:
  1. /**
  2. * String word cut
  3. *
  4. * @private
  5. */
  6. function wordCut($c, $l){
  7.     $c= explode(' ',$c);
  8.     for($i=0; $i<$l; $i++) $r[$i] = $c[$i];
  9.     $r= implode(' ', $r).'...';
  10.     return $r;
  11. }

Post correlati

jQuery contro tutti: un benchmark con 5 browser

Mercoledì 17 Settembre, 2008

image Un buon sviluppatore non ha problemi a passare da un linguaggio di programmazione ad un altro. La scelta di concentrarsi su un particolare linguaggio, framework o ambiente di sviluppo, è dettata più dalla disponibilità di tempo e dal tipo di lavoro che si svolge. Tuttavia, un fattore importante che può influire sulla scelta di "framework" simili, è la simpatia o l'affezione che può maturare con il tempo.
Nello specifico, ho voluto analizzare alcuni - non certo tutti - framework Javascript disponibili oggi, anche perchè "consigliato" a dare un'occhiata soprattutto a jQuery.
I creatori di mootools (uno dei più noti framework Javascript) hanno reso disponibile uno strumento per eseguire un test di velocità e validità su cinque noti framework Javascript: Slickspeed. Questo test, dagli esiti non affatto scontati, è importante in quanto i framework Javascript operano lato client, cioè vengono eseguiti dal nostro browser. È proprio per questo motivo che alcuni trovano Safari più rapido di Internet Explorer o Google Chrome più rapido di FireFox. Tuttavia ciò spesso dipende anche dal tipo di pagina che si sta visualizzando. Infatti può benissimo capitare che un particolare sito sia davvero più "veloce" se visualizzato in Safari, ma questo non significa che "tutti i siti" saranno più veloci con Safari! Ovviamente questo discorso è valido per qualsiasi altro browser.

Il benchmark

Nel test che ho effettuato con Slickspeed ho messo a confronto i browser disponibili sulla mia macchina (Windows Vista Utilmate 64bit - Intel core 2 quad a 2.4GHz con 8Gb RAM).
Purtroppo il test non sono riuscito ad eseguirlo con Internet Explorer 7, in quanto bloccava la macchina, andando anche fuori scala con i risultati! Ancora una volta complimenti Microsoft.
Ho crercato di mantenere identico lo stato del PC durante l'esecuzione dei test, aprendo singolarmente i browser e non mandando nessun altro processo in esecuzione.

Nota: se avete voglia di eseguire anche voi uno o più di questi test, potete commentare questo post in caso di "curiosi" e diversi risultati.

image

Google Chrome è risultato davvero veloce, con un valore di 68 (media) nell'esecuzione dei test con jQuery. Il più lento, invece, è risultato Flock, nonostante provenga dalla stessa "madre" Mozilla. Questo pessimo risultato di Flock è davvero curioso visto il suo taglio Social Network; perchè sono proprio i Social Network Web 2.0 a sfruttare molti dei framework Javascript disponibili, così da fornire un'esperienza di navigazione ed interazione davvero innovativa.
A sorpresa Opera batte FireFox e anche di un bel po', ottenendo addirittura un 74 nell'esecuzione di Dojo! FireFox e Safari, tutto sommato, si assomigliano, con Safari più rapido nei test con Mootools e jQuery.

Quale framework scegliere?

Se non badiamo ai test sulla velocità di esecuzione e non ci preoccupiamo della dimesione in Kbytes dei framework stessi, la risposta potrebbe essere "quello che più vi piace" o, se preferite, "quello che conoscete meglio o vi risulta più armonico con il vostro stile di programmazione".
In ultima analisi questi framework si assomigliano un po' tutti (vedi l'uso del $ ad esempio), nonostante alcune importanti e sostanziali differenze che possono saltare agli occhi di un esperto o nell'uso davvero spinto di una particolare libreria. In linea di massima, infatti, tutto quello che si può realizzare con jQuery, ad esempio, lo si può fare benissimo con mootools o prototype! Se jQuery vanta una sintassi estremamente compatta, in quanto tutti i metodi restituiscono sempre l'oggetto base jQuery, creando così file interminabili di oggetto.metodo().metodo().metodo()... non è detto che questo sia a tutti i costi un punto di forza, soprattutto per chi dovrà fare il debug!
Librerie come prototype.js peccano forse in assenza di effetti grafici, anche semplici, costringendo lo sviluppatore ad implementare spinoff come scriptaculous.js, pesanti e distanti dalla libreria inizialmente scelta.

Un esempio

Proprio quest'ultimo motivo, ad esempio, mi ha portato a sostituire l'accoppiata prototype/scriptaculous con jQuery per realizzare i pannelli interattivi/animati qui nella sidebar di undolog.com. In effetti, usando anche Google API per importare le librerie, è uno spreco caricare tutta la libreria scriptaculous per uno slideDown e slideUp. A titolo informativo e di esempio, ecco com'era il codice Javascript con l'accoppiata prototype/scriptaculous:

JavaScript:
  1. // prototype/scriptaculous
  2. $$('h2.dropdown').each(
  3.     function(element) {
  4.         element.style.cursor="pointer";
  5.         element.observe('click',
  6.             function(event) {
  7.                 if( this.next().style.display == "" ) new Effect.BlindUp(this.next(),{duration:.5});
  8.                 else new Effect.BlindDown(this.next(),{duration:.3});
  9.                 Event.stop(event);
  10.             }
  11.         )
  12.     }
  13. );

e com'è adesso con jQuery:

JavaScript:
  1. // jQuery
  2. $('h2.dropdown').each(
  3.     function(i) {
  4.         $(this).css('cursor','pointer').click(
  5.             function() {
  6.                 if( $(this).next().is(':hidden') ) $(this).next().slideDown(); else $(this).next().slideUp();
  7.             }
  8.         );
  9.     }
  10. );

Tutto sommato, a ben guardare, non mi sembra ci sia moltissima differenza! Ma come dicevo prima... è questione "anche" di gusto personale.

Post correlati

Undolibrary MatrixArray: un’estensione della classe Array

Lunedì 15 Settembre, 2008

MatrixArray è un'estensione della classe Array di Actionscript 3.0, con lo scopo di semplificare la manipolazione di Array lineari usati come matrice n x m. Questa classe fa parte della libreria Undolibrary (nel package undolibrary.utils.MatrixArray) che potete scaricaricare liberamente da Google code tramite un qualsiasi client SVN (Subversion) all'indirizzo:
svn checkout http://undolibrary.googlecode.com/svn/trunk/
In alternativa potete scaricare il solo file MatrixArray.as. Un'esempio dell'uso di matrici lineari è stato dato in Actionscript 3.0 for beginners: lesson #2 dove abbiamo visto un suo semplice uso nella realizzazione del classico game Tic Tac Toe. Una matrice di questo tipo è paragonabile ad un'area rettangolare (wxh), proprio come una scacchiera. Con questa classe è possibile trattare una matrice di questo tipo proprio come un reticolo con delle sue coordinate x ed y. La MatrixArray l'ho usata, ad esempio, nello sviluppo di tutta la logica dell'editor di Emotions Icons per Skype: Skypemote.

Continua a leggere... »

Post correlati

ActionScript 3.0: lo sapevate che…

Mercoledì 10 Settembre, 2008

Alcune curiosità su Actionscript 3.0 non sempre note...

trace()

L'istruzione trace(), usata per il debug, ora supporta più parametri:

Actionscript:
  1. trace( a, b, c );

eval()

L'istruzione eval() è stata eliminata in Actionscript 3.0. Tuttavia visto che è possibile accedere a proprietà e metodi di un oggetto anche con la sintassi usata per accedere agli elementi di un array, si può in alcune circostanze "simulare" - in qualche modo - l'istruzione eval():

Actionscript:
  1. var coo:String = (muoviX)?'x':'y';
  2. myMovieClip[coo] = 20;

super()

La chiamata alla superclasse, tramite super(), non è più vincolata alla prima istruzione nel costruttore di una sottoclasse. Ora si può chiamare super() in qualsiasi punto del costruttore:

Actionscript:
  1. public function MiaClasse() {
  2.    initOne();
  3.    super();
  4.    initTwo();
  5. }

Post correlati

Actionscript 3.0 for beginners: lesson #2

Mercoledì 3 Settembre, 2008

Come promesso ecco la seconda lezione su ActionScript 3.0! Oggi inizieremo l'analisi di un semplice progetto che riproduce il giochino del Tris o Tic Tac Toe. Ho cercato di inserire in questo esempio alcune caratteristiche particolari di ActionScript 3.0, cercando di dare spazio alla comprensione e non allo stile. Ne segue che se avessi dovuto scrivere il "gioco" davvero, probabilmente l'avrei strutturato in modo assai diverso, ma in questo caso ho cercato di mediare tra una classica programmazione compatta ed ermetica con una maggiormente comprensibile per i neofiti. Ho realizzato un'unica classe documento, procedura non necessaria ma utile per rimanere in linea con la precedente lezione.

Tic Tac Toe

Loading Flash Player...

Continua a leggere... »

Post correlati