Linguaggi ed Applicazioni
Multimediali
A.A. 2002/2003
Diego Alicata
SERVIZI MULTIMEDIALI AVANZATI
CON
1
L’evoluzione tecnologica alla quale assistiamo ormai da anni, ha
permesso, e permette sempre più, la diffusione di informazioni
multimediali sia su personal computer che su altri devices (es: PDA,
cellulari di ultima generazione, ecc…)
Per capire quanto il modo di interagire con la rete sia cambiato, basti
ricordare quanto la prima Internet pubblica fosse caratterizzata nelle
pagine web, dalla grande abbondanza di testi e dalla quasi totale
assenza di immagini, audio e video.
L’evoluzione tecnologica, la riduzione dei costi di connessione,
l’aumento di utenza a banda larga, la diffusione di dispositivi per
l’input/output di dati multimediali sta cambiando il modo stesso di
interagire col web sempre più caratterizzato da una vera e propria
esperienza multimediale.
2
Fino a ieri il multimedia era relegato all’offline, oggi e sempre più in
futuro, il multimedia sarà online.
Offrire dati multimediali online significa potere gestire
dinamicamente i contenuti e potere offrire all’utente ciò che
desidera in tempo reale.
NASCE IL BISOGNO DI NUOVI SERVIZI MULTIMEDIALI
DINAMICI
3
Per modificare il contenuto di pagine web basate su HTML in modo
classico è necessario:
-Scaricare il file HTML da modificare
-Modificarlo
-Fare l’upload del file modificato sul server
Tutto questo comporta quindi la necessità di un intervento umano per
l’aggiornamento dei contenuti ed ovviamente l’aggiornamento
richiederà del tempo.
E’ per questo motivo che sono nati linguaggi di programmazione
orientati al web che creano in tempo reale la pagina HTML
corrispondente generandola dinamicamente.
Tra questi linguaggi ricordiamo PHP (per server Linux) ed ASP (Active
Server Pages, per server Windows).
4
Se quindi con le normali pagine HTML avviene che:
RICHIEDE index.html
BROWSER
Trasmette il file index.html
SERVER
Con ASP e PHP avviene che:
RICHIEDE index.asp
BROWSER
Trasmette il codice HTML
SERVER
-Il server legge index.asp
-Lo interpreta
-Genera un codice HTML
Nasce quindi la possibilità concreta di realizzare servizi
multimediali on-demand per il web
5
Per fornire un servizio via web in Tempo Reale, o comunque cercando
di avvicinarsi a questo traguardo, uno dei problemi principali da
superare è quello di diminuire il tempo di risposta del server.
Interpretare codice ASP o PHP richiede grande occupazione di risorse e
soprattutto molto tempo di CPU. Inoltre maggiori sono le richieste
nell’unità di tempo tanto più tali risorse possono saturarsi ed il server
rallentarsi o addirittura bloccarsi.
Con Microsoft .NET la richiesta di risorse ed il tempo di CPU è di
molto ridotto, questo perché .NET produce codice compilato che
quindi sarà direttamente eseguito (non interpretato).
Microsoft .Net è una piattaforma di sviluppo dotata di un
FRAMEWORK che:
-Si occupa della compilazione dei codici
-Si occupa dello scheduling delle richieste alle risorse
-Gestisce le transazioni e gli eventuali overload
6
Per quanto riguarda la programmazione web .Net mette a disposizione
dei programmatori ASP.Net: l’evoluzione .Net di ASP.
I campi di applicazione di ASP.Net sono i più disparati ed in particolare,
limitandoci ad i casi che affronteremo, vedremo come:
1. Manipolare delle immagini dinamicamente (ridimensionare, comprimere, e
salvare in diversi formati).
2. Utilizzare un GATEWAY per spedire SMS via web
3. Implementare il GATEWAY per offrire servizi PUSH via WAP e WML
7
PARTE 1:
Manipolare le immagini dinamicamente
8
CENNI INIZIALI: Familiarizziamo prima con il codice ASP.NET (1)
.Net ed ASP.Net supportano la sintassi di 21 linguaggi tra i quali i più
importanti Visual Basic e C# (una sorta di C).
In realtà prendendo due qualsiasi linguaggi in .Net ci accorgiamo che
la sintassi è davvero molto simile.
Noi comunque ci riferiremo alla sintassi del linguaggio di default ossia
Visual Basic.
9
CENNI INIZIALI: Familiarizziamo prima con il codice ASP.NET (2)
.Net mette a disposizione una sorta di librerie chiamate
NAMESPACES. Come nel C, se utilizziamo funzioni di tali librerie
dovremo prima dichiararle.
Il codice ASP.Net è racchiuso tra <% e %>, tutto ciò che è fuori viene
trattato come normale codice HTML.
10
CENNI INIZIALI: Familiarizziamo prima con il codice ASP.NET (3)
PER LA LETTURA DI UN FILE PER ESEMPIO AVREMO:
<%@ import namespace="system.io" %>
<%
dim s as Stream = File.Open("E:\daleggere.txt", FileMode.Open,
FileAccess.Read)
dim r as New BinaryReader(s)
Dim output as String
Do While r.PeekChar()
output &= r.ReadChar()
Loop
r.Close()
s.Close()
%>
11
MANIPOLARE IMMAGINI: Leggere un immagine
Il namespace che .Net mette a disposizione per la gestione delle
immagini è system.drawing.
VEDIAMO ORA COME LEGGERE UN IMMAGINE:
<%@ import namespace="system.drawing" %>
<%
Dim image As New system.drawing.bitmap(“immagine.gif”)
%>
L’immagine è ora caricata in memoria ed attribuita all’oggetto image.
L’immagine, in questo caso gif, quindi a scala di colori, è stata
convertita in RGB True Color a 24 bit.
12
MANIPOLARE IMMAGINI: Ridimensionare un immagine
Come fare a ridimensionare l’immagine che abbiamo caricato?
Se per esempio vogliamo renderla del 50% più piccola
ECCO COME FAREMO:
…
Dim larghezza, altezza as Integer
larghezza = Int(image.width/2)
altezza = Int(image.height/2)
Dim nuova As New Bitmap(larghezza, altezza)
Dim g As Graphics = Graphics.FromImage(nuova)
g.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
g.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
Dim rect As New Rectangle(0, 0, larghezza, altezza)
g.DrawImage(image, rect, 0, 0, altezza, larghezza, GraphicsUnit.Pixel)
13
…
MANIPOLARE IMMAGINI: Restituire l’immagine compressa
Vogliamo ora restituire al browser l’immagine così creata come jpeg
con qualità 90 (in qualità da 0 a 100)
ECCO COME FAREMO:
…
Dim myEncoderParameters As New EncoderParameters(1)
Dim myEncoderParameter As New
System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality,
90)
myEncoderParameters.Param(0) = myEncoderParameter
Dim objImageCodecInfo() As ImageCodecInfo
objImageCodecInfo = ImageCodecInfo.GetImageEncoders
response.contenttype="image/jpeg"
nuova.Save(Response.OutputStream, objImageCodecInfo(1), myEncoderParameters)
nuova.dispose()
image.dispose()
%>
14
ECCO IL RISULTATO:
ASP.NET restituisce al browser
image.gif
15
MANIPOLARE IMMAGINI: Applicazioni
Le applicazioni di quello che abbiamo visto possono essere tantissime,
immaginiamo di volere inviare ad un cellulare una immagine presa da
un giornale web, o pensiamo ad un’applicazione che sotto il controllo
dell’utente effettua il fotoritocco di un immagine.
16
PARTE 2:
Utilizzare un GATEWAY per spedire
SMS
17
Spedire SMS: COSA SONO I GATEWAY (1)
Supponiamo di volere creare una applicazione che via web dovrà
spedire degli sms, magari per inviare le ultime notizie, oppure per
spedire informazioni sui cinema o, se creiamo una applicazione per
l’università, un’applicazione che spedisca sms indicando le date degli
appelli di esame.
Per fare ciò è prima di tutto necessario un GATEWAY Internet ->
Cellulari, ossia un particolare hardware che faccia da tramite e che
codifichi i dati provenienti da internet in normali SMS per la telefonia
mobile.
Si tratterà quindi di un hardware che dovrà gestire le informazioni su
vari protocolli.
Questi GATEWAY esistono e sono a disposizione dei programmatori
(sotto pagamento di un canone).
18
Spedire SMS: COSA SONO I GATEWAY (2)
Ecco quindi cosa avverà:
RICHIEDE sms.asp
BROWSER
Inviando i dati per la
spedizione dell’sms
L’applicazione ASP restituisce al browser
una pagina HTML specificando che l’sms
è stato inviato
Invia una richiesta al Gateway
SERVER
Inviando i dati per la
spedizione dell’sms
GATEWAY
Informa il server, e l’applicazione ASP, che l’sms è stato inviato
Invia l’SMS

19
Spedire SMS: l’implementazione (1)
Vediamo ora il codice per spedire un sms con testo ‘Ciao’ ad un
cellulare.
ECCO COME FAREMO:
<%@ import namespace="system.io" %>
<%@ import namespace="system.net" %>
<%
Dim st As Stream
Dim sr As StreamReader
Dim risposta As String
Dim stringa As String
Stringa =
“ACCOUNT=xxxx&PASSWORD=xxxx&COUNTRYCODE=+39&GSMCODE=347&PHONENUMBER=1072548&TEXTM
ESSAGE=Ciao”
…
Dove ad xxxx sostituiremo il nome account e la password per il
gateway
20
Spedire SMS: l’implementazione (2)
Continuando:
…
Dim req As WebRequest =
WebRequest.Create("http://gateway.smsitaly.com/gate/check.asp?“ & stringa)
Dim resp As WebResponse = req.GetResponse
st = resp.GetResponseStream
sr = New StreamReader(st)
Risposta = sr.ReadToEnd()
If Risposta = “01” then
Response.Write(“SMS inviato correttamente”)
Else
Response.Write(“Impossibile spedire l’SMS”)
End if
sr.Close()
st.Close()
%>
21
PARTE 3:
Servizi PUSH via WAP
22
Servizi PUSH via WAP: Introduzione
Ci occuperemo ora di sfruttare le potenzialità di ASP.net e della
creazione dinamica di contenuti per creare dei servizi PUSH
accessibili via cellulari WAP.
Nel caso particolare la nostra applicazione dovrà rendere possibile
che:
-l’utente si colleghi al sito wap dinamico e possa scegliere una materia
di esame di Informatica Applicata
-l’applicazione spedirà un SMS indicando le date degli appelli per la
materia scelta.
23
Servizi PUSH via WAP: WML
Se il linguaggio di markup di pagine web è l’HTML, lo standard per le
pagine WAP è il WML.
Il WML è un particolare XML, ossia un XML definito da un
particolare DTD che definisce la sintassi di WML.
Per questo nel prologo di un file WML dovremo avere sempre:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD wml 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
Dopo il prologo avremo il tag <wml> che dichiara l’inizio di codice
WML, avremo il tag </wml> alla fine di tutto il codice.
24
Servizi PUSH via WAP: Il codice (1)
Semplificando, le pagine visualizzate verranno chiamate CARDS,
avremo quindi tra <wml> e </wml> i tag <card> e </card>
La sintassi è molto semplice, quindi vediamo come dovrà essere il file
wml che intendiamo creare:
… (prologo)
<wml>
<card title="PROVA ASP.NET">
<p>Per ricevere informazioni sugli appelli di Informatica Applicata compila i seguenti
campi.<br/><br/><br/>
Materia di Appello:
<select name="materia">
<option value="01">Ling. Appl. Mult.</option>
<option value="02">Basi Dati</option>
<option value="03">Economia d'Impresa</option>
</select><br/>
Numero Cellulare
: <input name="cell" size="15"/><br/><br/>
<anchor title="Invia">Clicca qui per Inviare i Dati<br/>
<go href="spedisci_wap.aspx" method="post"><postfield name="MateriaI" value="$materia"
/><postfield name="Cellulare" value="$cell" /></go>
</anchor></p></card></wml>
25
Servizi PUSH via WAP: Il codice (2)
Il file spedisci_wap.aspx riceverà quindi il valore della materia sotto la
variabile MateriaI e il numero di cellulare sotto la variabile Cellulare.
Vediamo quindi il codice di spedisci_wap.aspx
<%@ import namespace="system.io" %>
<%@ import namespace="system.net" %>
<%
Dim st As Stream
Dim sr As StreamReader
Dim risposta, stringa, Numero, MateriaN, Materia(3), GSMCode, PhoneNumber, Sender, TextMessage
As String
Materia(1)="Linguaggi e Applicazioni Multimediali: 1 appello 13/06 ore 14.30 - 2
appello 23/06 ore 09.30 - post appello 30/06 ore 9.30"
Materia(2)="Basi Dati e Sistemi Informativi: 1 appello 09/06 ore 10.30 (PRESSO
S.T.I.) - 2 appello 16/06 ore 10.30 (PRESSO S.T.I.) - post appello 09/07 ore
10.30"
Materia(3)="Economia e Gestione dell'Impresa: 1 appello 03/06 ore 14.30 (PRESSO
S.T.I.) - 2 appello 25/06 ore 09.00 (PRESSO S.T.I.) - post appello 10/07 ore
14.00 (PRESSO S.T.I.)"
Numero=Request("Cellulare")
MateriaN=Request("MateriaI")
…
26
Servizi PUSH via WAP: Il codice (3)
Continuando:
…
GsmCode
= left(Numero,3)
PhoneNumber = right(Numero,len(Numero)-3)
Sender
= "PROVA"
TextMessage = Materia(int(MateriaN))
Stringa = "Account=xxxx&Password=xxxx&CountryCode=+39&GsmCode=" & GsmCode &
"&PhoneNumber=" & PhoneNumber & "&Sender=" & Sender & "&TextMessage=" &
TextMessage
Dim req As WebRequest =
WebRequest.Create("http://gateway.smsitaly.com/gate/check.asp?“ & stringa)
Dim resp As WebResponse = req.GetResponse
st = resp.GetResponseStream
sr = New StreamReader(st)
Risposta = sr.ReadToEnd()
…
27
Servizi PUSH via WAP: Il codice (4)
Continuando:
If Risposta = “01” then
MessaggioOUT=“SMS contenente le informazioni sulla materia specificata
inviato.”
Else
MessaggioOUT=“Impossibile spedire l’SMS”
End if
sr.Close()
st.Close()
%>
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card title="PROVA ASP.NET">
<p><%=MessaggioOUT%></p>
</card>
28
</wml>
Servizi PUSH via WAP: Il codice (5)
Vedremo ora il servizio all’opera.
Ricordiamoci che questo è solo un piccolo esempio di servizio PUSH che è
possibile realizzare. E’ per esempio possibile anche realizzare servizi che
accedono a determinate informazioni contenute in database od in siti internet e
le restituiscono a chi le chiede (es: notizie aggiornate dal mondo, carriera
lavorativa, ferie prese, ferie spettanti, ecc.)
29
Servizi PUSH via WAP: Il servizio all’opera (1)
Vediamo ora come funzionerà il servizio PUSH da noi creato.
Per prima cosa ci connetteremo via WAP alla pagina iniziale:
30
Servizi PUSH via WAP: Il servizio all’opera (2)
Apparirà così la pagina iniziale dalla quale sceglieremo la materia di
cui ci interessa conoscere gli appelli (supponiamo Linguaggi e
Applicazioni Multimediali):
31
Servizi PUSH via WAP: Il servizio all’opera (3)
Sceglieremo poi il numero di cellulare al quale spedire l’SMS, magari
possiamo spedirlo ad un amico a cui interessava quell’esame:
Clicchiamo poi su ‘Clicca qui per Inviare i dati’
32
Servizi PUSH via WAP: Il servizio all’opera (4)
A questo punto il servizio ci informerà che l’sms è stato spedito
correttamente:
Potremo così leggere l’SMS ricevuto e, se lo vorremo, mantenerlo
memorizzato come promemoria:
33
CONCLUSIONI
34
CONCLUSIONI:
Abbiamo visto come è possibile struttare ASP.net ed i gateway per creare
dei servizi molto potenti.
Allo stesso modo, con codice molto simile, sarà presto possibile creare
anche applicazioni avanzate per UMTS.
Già oggi è possibile creare dinamicamente codice SMIL che può essere
direttamente interpretato per esempio da alcuni PDA per creare
applicazioni quali: karaoke, animazioni, guide interattive e tanto altro…
35
Scarica

Linguaggi ed Applicazioni Multimediali