Javascript Cross Domain API

I moderni browser implementano la cosiddetta same-domain-policy che impedisce a qualsiasi richiesta HTTP fatta con l’oggetto XmlHttpRequest di accedere a risorse su server con un dominio diverso da quello in cui risiede lo script chiamante.

Questo può sembrare una policy molto limitante ma impedisce alle pagine di caricare codice pericoloso e accedere a sessioni non autorizzate.

Questa limitazione peròc risulta fastidiosa quando si sviluppano applicazioni web in localhost che fanno uso di API che non risiedono sulla propria macchina.

Questo è l’errore che compare quando si tenta di accedere da localhost ad un dominio diverso tramite l’oggetto XmlHttpRequest:

image

XMLHttpRequest cannot load http://192.168.0.123/dengenchronicles-backend/api/user/login/test?username=test&password=test. Origin http://127.0.0.1 is not allowed by Access-Control-Allow-Origin.

Per risolvere il problema ci sono due strade, quella più comune è usare JSONP  come data-type delle chiamate AJAX che incapsula le chiamate in dei tag script e non usa l’oggetto XmlHttpRequest. Nella documentazione di jQuery viene spiegato bene… Usare questo metodo ha alcune limitazioni nella gestione delle chiamate, per questo ho preferito la seconda strada.

Un’alternativa  è modificare il file http.conf di apache, abilitare alcuni header e impostare un parametro nella chiamate ajax.

image

http.conf

Header set Access-Control-Allow-Origin “http://localhost”
Header set Access-Control-Allow-Credentials “true”

Ovviamente la stessa configurazione può essere impostata anche sul server di produzione, inserendo i giusti domini o usando wildcards, se si vuole dare la possibilità di utilizzare le proprie API anche ad altri domini.

CanvasSwirl: An animated spirograph experiment in JavaScript and Canvas

CanvasSwirl è un bellissimo esperimento implementato in javascript che unisce ad un sistema di particelle la logica dello spirografo.

Lo spirografo è uno strumento che produce delle curve chiamate ipotrocoidi e epicicloidi. Ve lo ricorderete perché sicuramente lo avete utilizzato a scuola quando eravate piccoli.

Le ipotrocoidi è una rulletta ottenibile come curva tracciata da un punto fissato ad una certa distanza dal centro di un cerchio mobile che ruota all’interno di un altro cerchio immobile. La figura animata chiarirà meglio il concetto 🙂

image

Le epicicloidi invece si basano sullo stesso concetto delle ipotrocoidi ma il cerchio mobile ruota all’esterno del cerchio immobile.

Variando i parametri di queste componenti possiamo ottenere tantissime figure: dal una semplice ellissi a forme molto complesse.

La libreria Canvas Swirl unisce questo concetto ad un sistema di particelle per ottenere effetti come questi:

image

image

La libreria è corredata di un pannello di configurazione dove è possibile cambiare tutti i valori del sistema di particelle e degli elementi che compongono lo spirografo.

Grazie a http://xhva.net/ per il suo lavoro.

HTML5 CanvasSwirl testato su iPhone

CanvasSwirl testato su iphone 3GS (in alto a sinistra), iPhone 4 (in basso a sinistra), iPhone 4S (in alto a destra) e iPhone 5.

La velocità dell’iPhone 5 che monta il nuovissimo chip A6 ovviamente non è paragonabile con i precedenti modelli, ma la cosa che sorprende è la poca differenza di performance tra iPhone 3GS e iPhone 4, nonostante quest’ultimo monti il chip A4, fatto da Apple su misura per la nuova linea di iPhone.