Pagine

21 giugno 2011

Applicazioni web partendo da zero! Parte1

Introduzione
Questo tutorial più che altro è una raccolta di appunti che ho preso studiando le applicazioni web per mio gusto personale partendo completamente a digiuno. Gli unici veri siti che ho sviluppato erano per lo più statici e risalgono a oltre dieci anni fa, quando ancora facevo il liceo.
Probabilmente i più "skillati" (che brutta parola :-/ ) tra di voi leggendolo si faranno al più due risate ma non troveranno nulla di nuovo, anzi... forse mi correggeranno qualche svarione o, ritenendomi poco rigoroso, neanche andranno molto oltre le prime righe. In ogni caso io ho bisogno di scrivere le cose che ho imparato per non dimenticarle e forse in questo modo posso rendere un servizio ad altri che come me partono da zero.

Che cosa è un'applicazione web?
Un'applicazione web è un programma che gira su un server. Bella scoperta... In realtà non è solo questo.
Un'applicazione web è un programma che gira su un web server e svolge dei compiti particolari che il web server da solo non è fatto per svolgere. Il web server comunica con noi secondo il protocollo HTTP e con l'applicazione web con un altro protocollo dedicato. L'applicazione web a sua volta comunica con altre applicazioni web oppure con delle basi di dati.
In pratica che cosa succede quando mettiamo in funzione un'applicazione web?
La risposta a questa domanda è lunga e se cercate in giro troverete molte risposte abbastanza simili ma quello che ho capito io è questo:
Supponiamo che io mi colleghi a www.panino.org, un servizio che vende panini on line. Voi ordinate il panino che preferite sul sito, pagate con carta di credito e all'ora prestabilita il panino vi arriva a casa o a lavoro.
Non appena si apre il sito viene aperta una sessione (ooooh cominciamo con le cose strane): in pratica il sito dice al vostro browser di scrivere un cookie nella mitica cartella "Temporary Internet Files" in cui viene tracciato ciò che può essere utile del percorso che fate per far funzionare l'acquisto del panino.
Ma andiamo avanti che mi sta venendo fame... Apriamo il sito e nel menù scegliamo un panino con prosciutto crudo paesano, caciocavallo silano e melanzane sott'olio. Giusto uno spuntino dietetico prima di pranzo....
A questo punto andate al carrello della spesa e vi viene chiesto di inserire nome utente e password. Supponendo che vi foste già registrati sul sito inserite nome utente e password e appare una pagina col panino che avete ordinato, una casella dove inserire l'ora di consegna e l'indirizzo e un magico bottoncino con scritto "Conferma Ordine".
Cliccate su conferma ordine e a questo punto vi appare una pagina coi loghi delle carte di credito. Scegliete la vostra, inserite il numero e il codice di autorizzazione, dopo di che finalmente si torna alla home con una bella scritta "Il Vostro panino sarà consegnato all'ora xx.xx all'indirizzo scelto. Buon appetito!".
Che cosa è successo nel frattempo?
Quando abbiamo aperto la pagina col menù dei panini il web server ha chiamato l'applicazione web che ha interrogato la base di dati e ha restituito in formato stampabile il menù del giorno. Cliccando su un panino nel nostro cookie viene scritto "Franco ha scelto il panino x". Poi siamo andati al carrello della spesa e abbiamo inserito nome utente e password. Il web server ha passato questa stringa all'applicazione che ha cercato nella tabella degli utenti nella base di dati e ci ha dato il permesso di comprare il panino.
A questo punto il cookie viene letto e l'applicazione sa che avevamo scelto il panino x. Quindi mettiamo i dati mancanti e li mandiamo all'applicazione web premendo conferma ordine. L'applicazione web a questo punto riceve i dati e richiama il servizio web della banca che è un'altra applicazione web che gestisce i pagamenti con la carta di credito. La conferma dell'avvenuto pagamento viene mandata indietro all'applicazione web che finalmente ci restituisce la pagina con scritto buon appetito e aggiunge il nostro panino in coda agli altri nella tabella che probabilmente viene stampata periodicamente nel "laboratorio del paninaro".
Semplice no?
Figura 1: Principio di funzionamento di un'applicazione web



Carino... Ma se volessi scrivere io un'applicazione web?
La prima cosa da fare per scrivere un'applicazione web è mettersi a studiare e definire con una certa precisione la base di partenza e il punto di arrivo dell'applicazione.
Le domande da porsi sono:
1) Che cosa deve fare la mia applicazione?
2) Serve a qualcuno?
3) Sono in grado di svilupparla da solo in tempi ragionevoli?
In ogni caso, una volta deciso "Che cosa deve fare la mia applicazione", siamo già approdati a una cosa importante. L'analisi dei requisite è fondamentale quando si progetta qualcosa, qualsiasi cosa. Ve l'immaginate come sarebbero i mobili dell'ikea se gli ingegneri non avessero requisiti precisi? E l'amplificatore della vostra radio gracchierebbe? E la vostra automobile funzionerebbe altrettanto bene?
La risposta a queste domande la conoscete già, cercate dentro di voi ;-)
La seconda domanda è importante ma è difficile darle risposta. Serve a qualcuno l'hula hop? Probabilmente è una delle invenzioni più inutili della storia ma che ha avuto un successo strepitoso.
La terza domanda è strettamente legata alla vostra onestà intellettuale e la risposta è mediata tra l'intraprendenza del voler fare una cosa nuova e la conoscenza di voi stessi e delle vostre reali capacità.
Purtroppo molto spesso è troppo facile impelagarsi in un progetto che non si porta a termine e ci si scoraggia, si sta male psicologicamente e ci si sente davvero frustrati. Prima di lanciarvi in un'impresa qualunque chiedetevi onestamente se siete davvero in grado di farla. Se la risposta è si dedicateci impegno e dedizione e otterrete sicuramente il risultato sperato.
Una volta deciso cosa fare e stabilito che siamo in grado di farlo bisogna scegliere il linguaggio di programmazione e la tecnologia da adottare.
Questo passaggio è fondamentale perché bisogna far convergere i nostri gusti con le nostre competenze e con quello che offrono i servizi di hosting (soprattutto in base a quanto siamo disposti a spendere per ottenere questo o quel servizio).
I linguaggi al momento più in voga comunque sono:
1) Java
2) PHP
3) ASP/.NET
4) Perl
5) Python
6) Ruby

Java è nato per il web e la fa da padrone nelle applicazioni aziendali di dimensioni medio grosse.
PHP è diffusissimo nei servizi anche a basso costo e a livello amatoriale
ASP/.NET è la piattaforma di Microsoft. Come diffusione non c'è male e anche come costo dei servizi non c'è male.
Perl è forse il sistema più antico per scrivere le applicazioni web ma sta perdendo piede in favore di altre soluzioni più nuove.
Python è il mio linguaggio preferito e ha riscosso un grosso successo in ambito web anche se ho trovato abbastanza difficoltà a trovare host Python friendly, soprattutto a prezzi accettabili.
Ruby anche è in voga ultimamente soprattutto il suo framework Ruby on Rails. Al momento non ho mai studiato ruby e non ho trovato host che ne forniscono il supporto, ma neanche li ho cercati con impegno.
Per stare dietro alle mie conoscenze di programmazione e alle mie reali capacità ho deciso di proseguire il mio studio in Java e Python che sono i due linguaggi che conosco meglio. Inoltre sviluppando la stessa cosa in due linguaggi diversi si hanno a disposizione due scenari diversi che mettono in mostra aspetti diversi dello stesso sviluppo.
Java è nato molto prima di Python e sulla sua piattaforma ci sono un'infinità di framework, librerie, tecnologie e chi ne ha più ne metta. Essendo il linguaggio più diffuso al mondo ha un sacco di cose attorno e molte cose si possono sviluppare in tanti modi differenti.
Python è molto più giovane ma ha tanti framework più o meno evoluti che consentono di sviluppare applicazioni web con poche righe di codice. Usano un sistema diverso rispetto a Java.
L'applicazione Java gira nella sua virtual machine che risiede in modo permanente nella memoria del server. Sulla virtual machine gira un application server (ad esempio Tomcat o WebSphere) e su questo gira l'applicazione web. Python invece viene richiamato in mille modi diversi. Può appoggiarsi al vecchi CGI, a Fast CGI, a mod_python o a WSGI.
Le differenze tra questi sistemi sono parecchie e possono avere un impatto più o meno rilevante a seconda dell'applicazione e del numero di utenti che deve servire.
A questo punto io mi fermerei e rinvierei il discorso alla seconda parte.
La prossima volta si ricomincia con una panoramica delle tecnologie di accesso alle applicazioni web, le differenze che intercorrono tra Python e Java e una panoramica sui framework per creare applicazioni web.
Saluti!

Nessun commento:

Posta un commento