Articoli con Tag ‘Framework’


WPDK: Javascript pattern

Proseguendo il nostro tour sul WPDK, oggi voglio illustrarvi il pattern Javascript utilizzato nel framework.
Javascript possiede molti pattern, quello che abbiamo scelto (una variante del Module Pattern) credo mantenga una buona similitudine con PHP, garantendo comunque ottimi vantaggi a livello di script. La similitudine l’ho ricercata in quanto alcune classi Javascript possiedono una loro controparte in PHP, o viceversa.

Continua...

WPDK: how I did it

Durante lo sviluppo del sistema wpXtreme e in particolare del KIT di sviluppo WPDK (WordPress Development Kit), ho imparato moltissime cose! Soprattutto ho iniziato ad apprezzare tecniche che in passato usavo di rado.

Voglio quindi iniziare con questo post a raccontarvi tutte le cose meravigliose che ho imparato ad amare e mettere in pratica, in relazione allo sviluppo del framework WPDK dedicato allo sviluppo su WordPress.

Continua...

WPDK WordPress Development Kit

Il WPDK (WordPress Development Kit) è un framework proprietario sviluppato per velocizzare lo sviluppo della suite wpXtreme. L’uso di un framework, oltre a rendere la creazione di plugin per WordPress più rapida, permette di concentrare in un unico luogo numerose funzioni comuni a molti plugin. Il WPDK rappresenta quindi un vero eproprio SDK per lo sviluppo di plugin (e non solo), fornendo API e servizi che possono essere aggiornati e migliorati nel tempo.

Continua...

Video multipli con AVQueuePlayer

La classe MPMoviePlayerController ha il grosso difetto di non gestire adeguatamente più video contemporanei, oltre a rendere difficile creare una sequenza di video uno dopo l’altro. La classe AVPlayer (o AVQueuePlayer che è una sottoclasse di AVPlayer), appartenente al framework più a basso livello AVFoundation, è invece estremamente più versatile, nonostante mantenga egualmente una semplicità nell’implementazione.

Frameworks Block Diagram

Continua...

Come ottenere Latitudine e Longitudine in Objective-C

Il MapKit framework fornisce moltissime funzionalità utili, tranne quella di restituire Longitudine e Latitudine a partire da un indirizzo. In Javascript, ad esempio, è possibile utilizzare il servizio di Geocoding fornito da Google e discusso in Google Maps: come ottenere Latitudine e Longitudine da un indirizzo. Su Apple iPhone, o iPad, è possibile tuttavia superare l’ostacolo utilizzando in modo diverso i servizi di Google. Nello specifico è possibile chiamare direttamente l’url:

1
http://maps.google.com/maps/geo?q=[indirizzo]&output=csv

Dove è [indirizzo] inserire la stringa con l’indirizzo che vogliamo trasformare in coordinate. L’output restituito è del tipo:

1
200,8,41.9128300,12.2241172

Il primo valore, 200, indica che tutto è andato bene (200 OK). Il secondo, 8, è il Google accuracy parameter (1-10). Gli ultimi due valori sono, finalmente, latitudine e longitudine. Vediamo adesso un possibile prototipo di un metodo da inserire nelle nostre applicazioni:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
- (CLLocationCoordinate2D)getLocationFromAddress:(NSString*)address {
    NSString *urlString = [NSString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@&output=csv",
          [address stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];
    NSString *locationString = [[[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:urlString]] autorelease];
    NSArray *listItems = [locationString componentsSeparatedByString:@","];
 
    //int zoom       = 0;
    double latitude  = 0.0;
    double longitude = 0.0;
 
    if([listItems count] >= 4 && [[listItems objectAtIndex:0] isEqualToString:@"200"]) {
        //zoom    = [[listItems objectAtIndex:1] intValue];
        latitude  = [[listItems objectAtIndex:2] doubleValue];
        longitude = [[listItems objectAtIndex:3] doubleValue];
    } else {
        // Errore
    }
    CLLocationCoordinate2D location;
    location.latitude  = latitude;
    location.longitude = longitude;
 
    return location; 
}

Note interessanti

La stringa restituita in locationString viene “splittata” tramite il metodo componentsSeparatedByString, alla stregua della funzione explode() del PHP per intenderci. Nell’esempio da me proposto ho inserito – ma commentato – il codice per recuperare anche il Google accuracy parameter, o fattore di scala di precisione, indicato con zoom.

Sorgente esempio

Per completezza ho realizzato un piccolo applicativo di esempio con il quale è possibile provare il metodo sopra proposto; inserite un qualsiasi indirizzo e iPhone lo mostrerà sulla mappa.


Scarica Sorgente

Ringrazio il team di devAPP per l’ispirazione di questo articolo.

Continua...

10 utili trucchi e snippet per Apple iPhone e Xcode

1. Stringhe su più righe

In Xcode è possibile “spezzare” un stringa su più righe inserendo a alla fine un backslash “\”. Questa caratteristica può risultare utilissima quando, ad esempio, vogliamo inserire del testo HTML in un controllo UIWebView:

Continua...

Xcode shortcut

Xcode è davvero un ottimo ambiente di sviluppo, curato e denso di dettagli che rendono la scrittura di codice efficiente e piacevole. Tra questi c’è sicuramente la comodità del completamento automatico durante la digitazione, soprattutto quando si scrivono applicazioni per Apple iPhone, dove i framework sono tanti e ricordarsi sintassi e nomenclatura è impresa da pochi.

Continua...

Camelize, CamelCase

Come già visto nel post Varietà di coding e di coding gli approcci che uno sviluppatore può avere alla risoluzione di un problema sono diversi e molteplici a parità del linguaggio di programmazione usato. Ecco come alcuni dei più noti framework Javascript hanno risolto una semplice funzione di CamelCase:

Prototype.js

Prototype.js, nella versione 1.6.0.3, propone esplicitamente un metodo camelize() per effettuare il camelcase su una stringa. L’approccio dell’autore è abbastanza semplice e il codice risulta auto-esplicativo. In questo caso non è stato fatto nessun uso delle Regular Expression!

1
2
3
4
5
6
7
8
9
10
11
12
13
camelize: function() {
    var parts = this.split('-'), len = parts.length;
    if (len == 1) return parts[0];

    var camelized = this.charAt(0) == '-'
      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
      : parts[0];

    for (var i = 1; i < len; i++)
      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);

    return camelized;
  }

Continua...

jQuery contro tutti: un benchmark con 5 browser

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:

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

e com’è adesso con jQuery:

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

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

Continua...

N3TV Interactive Platform

Cos’è?

N3TV Interactive Platform è la piattaforma interattivita di N3TV.it, nata da un’idea di Tommaso Tessarolo, “Blogger d’azione” che se discute di Net TV non rimane certo vincolato alle sole parole, ma agisce concretamente provando in prima persona che cosa vuol dire “fare Net TV”, proponendo strumenti software in grado di fornire un’interazione online di nuova generazione.
La piattaforma N3TV Interactive Platform ha quindi l’obiettivo di fornire interattività durante le numerose dirette televisive proposte su N3TV.it.

N3TV Interactive Platform
N3TV.it: una diretta con la N3TV Interactive Platform

Continua...