Vous êtes sur la page 1sur 303

001-Cop Ioprog 109 libro 2-11-2006 17:34 Pagina 1

ioProgrammo

ANTEPRIMA: VISUAL BASIC 9.0


TUTTE LE NOVITÀ DEL LINGUAGGIO CHE VERRÀ.
FATTI TROVARE PREPARATO A MIGRARE...
VERSIONE PLUS VERSIONE STANDARD
Rivista + “Le grandi guide di ioProgrammo” n°8 a € 12,90 in più RIVISTA+LIBRO+CD €9,90 RIVISTA+CD €6,90
Anno X - N°12 (109)

PER ESPERTI E PRINCIPIANTI Poste Italiane S.p.A Spedizione in A.P. • D.L. 353/2003 (conv.in L.27/02/2004 n.46) art.1 comma 2 DCB ROMA Periodicità mensile • DICEMBRE 2006 • ANNO X, N.12 (109)
FATE IL VOSTRO
C#
CREA UN GENIO
MICROSOFT XNA GAME STUDIO • GESTIONE DELLA MEMORIA IN C++ • JAVA ECHO2 • BORLAND INTERBASE 2007• ECOMMERCE CON PAYPAL
PER GLI UTENTI
Impara a programmare
VIDEOGIOCO
i Wizard: le procedure guidate
che aiutano ad usare il software
VB.NET
ESPRESSIONI
REGOLARI
CON IL NUOVO XNA GAME STUDIO DI MICROSOFT Ecco il trovatutto che scova
programmare il tuo sparatutto personale diventa le stringhe nascoste
nel testo in un battibaleno
veramente esageratamente semplice! ASP.NET
STRUMENTI JAVASCRIPT E .NET
Non sono la coppia più
Installiamo il software necessario bella del mondo, ma noi
li mettiamo d’accordo
e integriamolo con Visual Studio
ECOMMERCE
TEORIA CON PAYPAL
Sviluppa un intero sistema
Struttura di un’applicazione. di commercio elettronico
Ecco le classi fondamentali spendendo poco o niente
ed il loro funzionamento
TO JAVA
TUTD E
IL CO IC IL CODICE DEL
PRATICA nel CD
La guida passo passo per GIOCO IN BORSA
Prendi le informazioni
realizzare il primo game 2D. dalla rete, mettile in un DB
e il gioco è fatto
Le basi per iniziare a muoversi
nella terza dimensione VISUAL BASIC
PERSONALIZZA
IL TUO AMBIENTE
SOFTWARE “SICURO”? Migliora l’IDE e automatizzalo
con le funzioni che servono a te
ESTENDI SQL SERVER
FACCIAMOLO CON C++
10 “linee guida” per gestire bene la memoria ed evitare
Usa Visual Basic 6 con il tuo
database preferito e inoltre
rendilo più potente
bug che possono dare origini a Exploit e Virus
OVERVIEW
ASP.NET JAVA Borland
GESTIAMO LE REPORT AJAX? WEB 2.0 INTERBASE
MAILING LIST NO PROBLEM SÌ FATICA NO 2007 veloce, più
Più sicuro, piùmai. Ti diciamo
Dall’iscrizione all’invio della Svincoliamoci dai programmi Arriva Echo2 il framework moderno che va versione
tutto sulla nuofatto la storia
posta. Creiamo una web commerciali. Ecco il codice che ti porta nella nuova rete del DB che ha
application che fa tutto che azzera le spese senza farti impazzire

EDIZIONI MASTER
SOLUZIONI: PROGRAMMA CON GLI ALGORITMI GENETICI
UN ROBOT INTELLIGENTE CHE SVILUPPA AL POSTO TUO www.edmaster.it
058-063 31/10/06 11:14 Pagina 58

ioProgrammo Web  Soluzioni per il commercio elettronico

PAGAMENTI ONLINE:
FACILE CON PAYPAL
IN UN SITO DI E-COMMERCE L’IMPLEMENTAZIONE DI UN MECCANISMO DI PAGAMENTO
È UNO DEI PASSI CRUCIALI. TRA LE TANTE SOLUZIONI OFFERTE DAGLI ISTITUTI DI CREDITO
ESAMINIAMO PAYPAL. VEDREMO COME SVILUPPARE UNA SOLUZIONE CON .NET

D
a una parte ci siamo noi, per usare il bisogna interagire con la soluzione offerta da
termine tecnico il merchant, ovvero la un istituto di credito che, in linea di massima,
nostra applicazione di E-Commerce ripete lo schema appena esposto.
dall’altra c’è un’applicazione residente nell’i- Scendendo nei dettagli, programmare una
stituto di credito che contabilizza il pagamen- soluzione di Payment Gateway significa pro-
to della merce venduta nel nostro sito; sono grammare i messaggi che intercorrono tra la
due scenari paralleli che entrano in relazione nostra applicazione e quella residente nell’isti-
attraverso un sistema di Payment Gateway. tuto di credito che, internamente, per quanto
J CD J WEB Tutto quanto riguarda il passaggio e l’accredito ci riguarda, rimane una sorta di scatola nera; In
Paypal SDK.net Reloaded.rar di contante non può risiedere nel database questo articolo svisceriamo il Payment
cdrom.ioprogrammo.it
della nostra applicazione ma deve, necessaria- Gateway offerto da Paypal nell’inedito porting
mente, essere collocato altrove, ovvero in verso .net 2.
un’applicazione parallela sviluppato ad hoc
nell’ambito di un istituto di credito; Il nome in
codice di questo software è Payment Gateway
e, per intenderci, funziona come esposto nella PAYPAL VISTO DA VICINO
Fig.1. Abbiamo chiarito, in linea di massima, il funziona-
mento di un sistema di Payment Gateway;
La Fig. 2 illustra specificatamente quello implemen-
tato in Paypal

Fig. 1: Schema del funzionamento di di un sistema


di pagamento
REQUISITI
Banca Sella, PaschiInCommerce, TELEPay
Conoscenze richieste Light, OmniPay, Bank Pass, il nostro Paypal ed Fig. 2: Architettura del sistema di payment di Paypal
piattaforma asp.NET
altri ancora offrono soluzioni di Payment
Software
Gateway che, per formalizzare il pagamento, Analizzando la la figura scopriamo che i messag-
Visual Web Developer rimandano ad una serie di Form collocati nel gi che intercorrono tra la nostra applicazione e
Express o Visual Studio 2005
server dell’istituto di credito oppure, più rara- Paypal viaggiano sul canale cifrato del protocollo
Impegno
mente, inviano gli estremi del pagamento da HTTPS e sono descritti utilizzando Web Services
¥ un Form residente nella nostra applicazione. ed i relativi messaggi SOAP;
Tempo di realizzazione
Ogni volta quindi che si tratta di implementare Per familiarizzare con la programmazione delle
un meccanismo di pagamento elettronico API che sottendono a questi messaggi SOAP

h t t p : / / w w w. i o p r o g r a m m o . i t
G 58 /Dicembre 2006
058-063 31/10/06 11:14 Pagina 59

Soluzioni per il commercio elettronico  ioProgrammo Web

Paypal mette a disposizione Kit di sviluppo dedi- FACCIAMOLO CON


cati alle tecnologie PHP, Java, Classic ASP, ed EXPRESSCHECKOUT
appunto .NET. Ufficialmente non è ancora La transazione effettuata con ExpressCheckout parte
implementata una soluzione .NET 2 e quella dalla nostra applicazione, viene perfezionata nel
offerta per la “vecchia”’ release è disponibile solo server di Paypal e termina tornando nel nostro sito;
per C#; Nella ‘scatola degli attrezzi’ allegata In breve:
all’articolo, sono disponibili i porting per VB.net
e .NET 2, anzi sarà proprio su quest’ultima che ci 1. il nostro cliente, già iscritto a Paypal, nell’ambito
rifaremo per gli esempi dell’articolo; nella prima della nostra applicazione, dopo aver scelto i suoi
pagina del SDK dobbiamo specificare se utilizze- acquisti, va in una pagina che riassume l’ammon-
remo il certificato allegato oppure se desideria- tare della spesa e preme il bottone “Express
mo usarne uno di nostra creazione. Dopo la sele- Checkout”
zione saremo inviati ad una pagina i cui collega- 2. viene reindirizzato al sito Paypal nel quale, dopo
menti ipertestuali riassumono tutte le possibilità essersi autenticato, rivede l’indirizzo al quale spe-
di programmazione delle API, ovvero tutti i pos- dire la merce e seleziona il metodo di pagamento,
sibili scenari di pagamento elettronico disponi- al termine, viene diretto ancora al nostro sito
bili in Paypal; Scopriamole insieme attraverso la pressione del pulsante “Continue
Checkout”
3. nella nostra applicazione controlla l’ordine e lo
conferma utilizzando il bottone “Place order”
USIAMO L’API
DODIRECTPAYMENT I tre passi che abbiamo descritto sopra prendono il
Come allude il nome stesso questa API si occupa nome di Integration Point. Nel primo Integration
di gestire il pagamento della merce direttamente Point quando il cliente, preme il bottone ‘Express
da una pagina collocata nel nostro sito; CheckOut’ dietro le quinte viene innescato il mes-
La API mette in gioco il metodo DoDirect saggio SOAP SetExpressCheckout Request verso
PaymentRequestType per inviare i dati relativi Paypal, con i parametri OrderTotal, ReturnURL,
all’acquisto (carta di credito, IP dell’acquirente, CancelURL ed altri opzionali come il MaxAmount;
tipologia della merce, etc) e gestisce la risposta Paypal risponde con SetExpressCheckoutResponse
attraverso DoDirectPaymentResponseType che ci che aggiunge sotto forma di coppia nome/valore il
fornisce dati sull’esito della transazione, ID PayerId ed un token, ovvero una codice identificati-
Paypal della stessa, verifica della carta di credito vo alfanumerico. A questo punto il browser del
etc Questa API è disponibile solo per il mercato cliente viene reindirizzato al server Paypal passando
statunitense, ed è anche quella di più facile sotto forma di stringa d’interrogazione il token rice-
implementazione. Dando una occhiata al codice vuto
della pagina DoDirectPayment non possiamo
non notare https://www.paypal.com/cgi-bin/webscr?cmd=_express-
checkout&token=ValoreDelToken
Imports com.paypal.soap.api
nel server Paypal, dopo il login, è necessario specifi-
ovvero l’esplicito riferimento alla libreria Paypal care l’indirizzo al quale inviare la merce e le moda-
E, all’interno della Sub relativa al pulsante di paga- lità di pagamento, nel medesimo tempo dal client
mento parte il messaggio SOAP GetExpressCheckout
DetailsRequest che richiede al server Paypal le infor-
Protected Sub PayButton_Click(ByVal sender As mazioni relative all’indirizzo ed alla carta di credito
Object, ByVal e As EventArgs) gestite dal messaggio SOAP GetExpressCheckout
DetailsResponse con i relativi parametri PayerID,
Dim api As PayPalAPI = New PayPalAPI() email address, shipping address specificati in prece-
denza dall’utente. Se il cliente preme il bottone
Me.PayPalResponse = api.DoDirectPayment(parametri “Continue Checkout” viene rimandato alla nostra
ricevuti dai campi del Form) applicazione all’indirizzo specificato nel parametro
ReturnURL che abbiamo visto precedentemente-
End Sub A questo punto incontriamo il secondo Integration
Point. Questa pagina, nome in codice ‘Order
Gli altri mercati, compreso quello italiano, pos- Review’, elenca al cliente i dati del suo acquisto e,
sono comunque utilizzare le API per Express una volta premuto il bottone ‘Confirm Order’, invia il
Checkout e per l'interrogazione dello storico messaggio SOAP DoExpressCheckoutPayment
delle transazioni. Request con i parametri Token, OrderTotal,

h t t p : / / w w w. i o p r o g r a m m o . i t
Dicembre 2006/ 59 G
058-063 31/10/06 11:14 Pagina 60

ioProgrammo Web  Soluzioni per il commercio elettronico

PaymentAction e PayerID che provengono dal pre- verso acquirenti malintenzionati che, dopo aver
cedente GetExpress CheckoutDetailsResponse. effettuato un acquisto, bloccano il trasferimento di
Il server Paypal risponde con GetExpressCheckout fondi dalla loro carta di credito o altro. Esiste anche
DetailsResponse che include il TransactionID ed altri la possibilità di annullare o rimborsare il pagamen-
elementi. Il cliente, finalmente, riceve una mail con to. Concretamente, tutto questo viene implementa-
i dati di conferma dell’acquisto; Quest’ultimo passo to nelle pagine omonime del SDK
costituisce il terzo Integration Poin.
Per quanto riguarda il codice della relativa pagina DoAuthorization
ExpressCheckout nel SDK DoCapture
DoVoid
Protected Sub CheckoutButton_Click(ByVal sender As
Object, ByVal e As EventArgs) Nel dettaglio, se guardiamo il Code Behind della
pagina DoAuthorization, ovvero della pagina nella
Me.PaymentAction = codice che controlla il tipo quale il cliente opziona una merce
di pagamento a seconda del
parametro passato dalla query string Imports com.paypal.soap.api

End Sub Public Sub SubmitButton_Click(ByVal sender As


Object, ByVal e As EventArgs)
È necessario mettere a fuoco il metodo
PaymentAction che innescherà il processo di paga- Dim api As PayPalAPI = New PayPalAPI()
mento ExpressCheckout appena descritto, ma con Me.PayPalResponse = api.DoAuthorization(parametri
significative differenze se il parametro passato dalla ricevuti dai campi delWebForm)
stringa di interrogazione sia Sale, Authorization
oppure Order; Sale indica che il pagamento viene
concluso immediatamente, mentre viene differito End Sub
se il parametro è Authorization oppure Order;
ritroviamo la linea di codice che importa la libreria
delle API Paypal, la creazione di una nuova API
Paypal ed il metodo DoAuthorization() che innesca
AUTHORIZATION il tipo di pagamento flessibile appena esposto;
& CAPTURE Se diamo un’occhiata al relativo messaggio SOAP
Paypal prevede anche uno scenario di pagamento trasmesso scopriamo l’elemento
maggiormente flessibile, per intenderci immaginia- L’esito di questa transazione è gestito, in maniera
mo di realizzare un sito di E-Commerce con merci non molto intuitiva, nella pagina Authorization
da esportare in un altro paese. Response dal metodo DoAuthorizationResponse
Esistono fattori variabili, come il cambio della valu- Type
ta, le spese di trasporto, l’eventuale indisponibilità
del prodotto venduto ed altri ancora che “svalute- Protected ReadOnly Property Result() As
rebbero”, dopo un breve periodo di tempo, il prezzo DoAuthorizationResponseType
fissato per l’acquisto. Get
Per ovviare a tutto questo Paypal ha previsto una Return CType(Me.PayPalResponse,
tipologia di pagamento in cui il cliente ha la possibi- DoAuthorizationResponseType)
lità di ordinare la merce ed il venditore, in un secon- End Get
do tempo, ha la facoltà di formalizzare l’acquisto End Property
ordinando il pagamento;
‘Authorization Period’ e' l'arco di tempo, fissato in Public Overrides Sub DataBind()
29 giorni, nel quale il venditore ha la facoltà di If Me.IsTransactionSuccessful
riscuotere il prezzo pattuito per l’acquisto (o parte Then
dello stesso) dal conto PayPal o dalla carta di credi- MyBase.DataBind ()
to del cliente. Per “Honor Period” si intende il rinno- End If
vo dell’Authorization Period’ nel quale PayPal End Sub
garantisce al venditore che la somma stabilita per
una transazione potrà ancora essere "catturato"; Il codice essenziale della pagina nella quale il mer-
L’’Honor Period’ e' fissato in 3 giorni, scaduti i quali chant gestisce la riscossione del prezzo è
PayPal non garantisce, pur facendo tutto il possibi-
le, che recupererà il danaro dal cliente. Imports com.paypal.soap.api
Quest< eventualità è stata prevista per cautelarsi

h t t p : / / w w w. i o p r o g r a m m o . i t
G 60 /Dicembre 2006
058-063 31/10/06 11:14 Pagina 61

Soluzioni per il commercio elettronico  ioProgrammo Web

Public Sub SubmitButton_Click(ByVal sender As Me.Session(Constants.TRANSACTION_SEARCH_


Object, ByVal e As EventArgs) SESSION_KEY) = api.
TransactionSearch(startDate, endDate)
Dim api As PayPalAPI = New
PayPalAPI() End Sub
Me.PayPalResponse =
api.DoCapture() che, con il metodo TransactionSearch(), effettua la
ricerca nello spazio circoscritto di due date;
End Sub viene innescato poi un redirect nella pagina
TransactionSearchResults:
ed, ormai, dovrebbe essere facilmente comprensi- se leggiamo il Code Behind di questa pagina sco-
bile; per quanto riguarda l’annullamento dell’ordi- priamo che viene creata una proprietà:
ne scopriamo il metodo DoVoid PaypalResponse dalla API TransactionSearch
ResponseType referenziata dalla session ripresa
Public Sub SubmitButton_Click(ByVal sender As dalla pagina TransactionSearch vista prima
Object, ByVal e As EventArgs)
Dim api As PayPalAPI = New PayPalAPI() Protected ReadOnly Property PayPalResponse() As
Me.PayPalResponse = TransactionSearchResponseType Get
api.DoVoid(parametri ricevuti dai campi del Return
WebForm) CType(Me.Session(Constants.TRANSACTION_SEARCH
_SESSION_KEY), TransactionSearchResponseType)
End Sub End Get

il cui esito viene gestito nella pagina End Property


DoVoidResponse attraverso le proprietà di
AckCodeType nel codice della Webform scopriamo un repeater
che viene popolato dalle varie proprietà di PayPal
Private Sub Page_Load(ByVal sender As Object, Response: PaymentTransactions, TransactionID,
ByVal e As EventArgs Timestamp, Status, etc.

Me.VoidSuccessfulLiteral.Visible =
Me.PayPalResponse.Ack = AckCodeType.Success
OrElse Me.PayPalResponse.Ack = UN CASO CONCRETO
AckCodeType.SuccessWithWarning Chiarendo il funzionamento del SDK abbiamo
compreso le funzionalità di base che caratterizzano
End Sub di Paypal. Ora è venuto il momento di mettere a
fuoco l’attenzione su casi concreti.
Nota che anche la pagina dedicata al Nel paragrafo precedente abbiamo visto degli
DoDirectPayment Authorization si riferisce al tipo esempi a ‘basso livello’, dedicati alla program-
di pagamento differito Authorization & Capture mazione delle API, ma le soluzioni migliori che
Paypal offre sono semplici pezzi di codice
HTML, creati al volo raccogliendo i dati che
immettiamo in Form dedicati, pronti per essere
CONSULTARE LO STORICO ‘copiati & incollati’ nella nostra applicazione;
DELLE TRANSAZIONI per intendersi i tipici pulsanti:‘Paga adesso’,
Per finire è possibile effettuare una ricerca tra le ‘Carrello PayPal’, ‘Donazione’ed altri sono realiz-
transazioni effettuate con Paypal partendo dalla zati proprio in questo modo: tra queste soluzio-
pagina TransactionSearch ni ve ne una che è discretamente diffusa ma che
non viene mai trattata adeguatamente…
Protected Sub SearchButton_Click(ByVal sender As Immaginate un sito web nel quale è possibile
Object, ByVal e As EventArgs) prendere visione, dietro pagamento, di alcune
sezioni private del sito, ma solo per un determi-
Dim api As PayPalAPI = New PayPalAPI() nato periodo di tempo; si tratta di uno scenario
Dim startDate As DateTime = (parametri ricevuti dai tipico che Paypal risolve con una tecnica deno-
campi del WebForm) minata di “Subscriptions and Recurring
Dim endDate As DateTime =(parametri ricevuti dai Payments”. Per implementarla è appunto suffi-
campi del WebForm) ciente copiare ed incollare il codice HTML gene-
rato dal sito Paypal;

h t t p : / / w w w. i o p r o g r a m m o . i t
Dicembre 2006/ 61 G
058-063 31/10/06 11:14 Pagina 62

ioProgrammo Web  Soluzioni per il commercio elettronico

Mentre vi rimando alla documentazione uffi- Business o Premier nel sito Paypal e, nel pro-
ciale per una informazione più dettagliata è prio profilo, selezionare ‘Modifica’ dalla sezio-
comunque utile dare un’occhiata a questo ne ‘Preferenze per Notifica immediata del
codice pagamento’ specificando poi l’indirizzo della
pagina nella nostra applicazione al quale
<form action=”https://www.paypal.com/cgi- Paypal invierà il messaggio IPN ( nota che il
bin/webscr” method=”post”> nome in codice di questo url è ‘URL di notifi-
<input type=”hidden” name=”cmd” value=”_xclick- ca’).
subscriptions”> In alternativa, per i più smanettoni, è possibile
<input type=”hidden” name=”business” value=”mail aggiungere manualmente il campo notify_url
dell’account Paypal del Merchant“> nel codice HTML del nostro bottone specifi-
<input type=”hidden” name=”item_name” cando l’ url dello script che gestisce IPN.
value=”Nome della sottoscrizione”> Una volta ricevuto il messaggio IPN la nostra
<input type=”hidden” name=”item_number” applicazione, per evitare tentativi di truffa,
value=”Identificativo numerico deve inviare una risposta al server Paypal;
della sottoscrizione”> Il nome in codice di questa risposta è ‘convali-
<input type=”hidden” name=”image_url” da della notifica’ e può venire realizzata
value=”URL del proprio logo da conservarsi in un
server https per evitare il messaggio “La pagina • attraverso l’invio di una ‘password condivisa’
contiene oggetti protetti e non protetti” “> utilizzando una query string in un server SSL
<input type=”hidden” name=”no_shipping” (ad esempio
value=”1”> https://www.miosito.com/UrlDiNotifica.
<input type=”hidden” name=”return” aspx?password=pippo)
value=”URL della pagina del proprio sito alla quale • inviando un post
andare dopo la conclusione positiva
dell’abbonamento“> per motivi di brevità, ed anche di comodità,
<input type=”hidden” name=”cancel_return” considerando la relatività difficoltà ed i costi
value=”URL della pagina del proprio sito alla quale nell’utilizzare un server SSL, analizziamo solo
andare qualora venga interrotta la procedura di l’opzione che richiede l’invio del post.
abbonamento da parte dell’utente”> In breve se volessimo creare un sito che offre
<!-- Parametri omessi relativi alla durata contenuti a pagamento per i propri utenti uti-
dell’abbonamento, alla rateizzazione, lizzando Paypal dovremmo
al rinnovo, etc.
--> 1. installare nella nostra applicazione il codice
<input type=”hidden” name=”custom” value=”è del bottone che innesca la procedura di
possible impostare parametri personalizzati”> “Subscriptions”, copiato & incollato da
Paypal
</form> 2. Creare una pagina che registri i nostri uten-
ti nel database una volta che l’IPN ricevuto
Naturalmente, durante la procedura di genera- da Paypal e la successiva ‘convalida della
zione del codice HTML, è possibile cifrare tutti notifica’ abbiano avuto un esito positivo;Nel
questi parametri utilizzando il formato PKCS7 dettaglio una pagina del genere potrebbe
che è, tipicamente, quello utilizzato per la crit- essere
tografia della posta elettronica.
Per gestire la risposta che Paypal invia verso la
nostra applicazione al termine della procedura Imports System.Net
di “Subscriptions and Recurring Payments”, Imports System.IO
ovvero l’esito positivo dell’abbonamento, la Imports System.Text
scadenza, la revoca e quant’altro, è possibile Imports System.Web.Mail
utilizzare Istant Payment Notification (IPN); Imports System.Collections.Specialized
per intendersi IPN è una risposta che il server Public Class SB_IPN
Paypal invia ad una pagina dedicata nella Inherits System.Web.UI.Page
nostra applicazione allo scopo di innescare le Private Sub Page_Load(ByVal sender As
opportune operazioni di Back End, ovvero nel System.Object, ByVal e As System.EventArgs)
caso preso in esame, l’iscrizione dell’utente Handles MyBase.Load
che ha pagato nel nostro database. 'Put user code to initialize the page here
Scendendo nel dettaglio per implementare IPN Dim strFormValues As String =
è sufficiente accedere al proprio account Request.Form.ToString()

h t t p : / / w w w. i o p r o g r a m m o . i t
G 62 /Dicembre 2006
058-063 31/10/06 11:14 Pagina 63

Soluzioni per il commercio elettronico  ioProgrammo Web

Dim strNewValue AggiornaDatabase()

Else’ INVALID qualcosa


' Crea la NOTIFICA DELLA CONVALIDA ' non ha funzionato…
Dim req As HttpWebRequest = ' Gestisci il problema
CType(WebRequest.Create("https://www.
sandbox.paypal.com/cgi-bin/webscr"), _ TroubleShooting()
HttpWebRequest)
End Sub
' imposta i valori per la
' NOTIFICA DELLA CONVALIDA Sub AggiornamentoDatabase()
req.Method = "POST"
req.ContentType = "application/x-www-form- ‘codice per l’inserimento del database
urlencoded"
strNewValue = strFormValues + End Sub
"&cmd=_notify-validate"
req.ContentLength = strNewValue.Length Sub TroubleShooting()

Dim stOut As StreamWriter = New ‘codice per la gestione dell’errore


StreamWriter(req.GetRequestStream(), _
Encoding.ASCII) End Sub
stOut.Write(strNewValue) End Class
stOut.Close()
nota che questo codice, che opportunamente
'Inviata la notifica di convalida, adattato, è stato generato da un sito web pay-
'leggi il risultato paltech.com che offre soluzioni per la maggior
parte delle funzionalità di Paypal.
Dim strResponse As HttpWebResponse = Per concludere questo paragrafo dedicato
CType(req.GetResponse(), HttpWebResponse) all’analisi dei casi concreti vi ricordo che per
Dim IPNResponseStream As Stream = .NET 2 esiste uno Starter Kit con funzionalità di
strResponse.GetResponseStream sito di E-Commerce al quale vi rimando
Dim encode As Encoding = senz’altro se volete vedere in azione un carrel-
System.Text.Encoding.GetEncoding("utf-8") lo pronto da ‘copiare & incollare’ nelle vostre
Dim readStream As New applicazioni;
StreamReader(IPNResponseStream, encode) Non solo nel codice allegato all’articolo trove-
rete uno Starter Kit rilasciato proprio da Paypal
nel quale rivedere ancora le funzionalità
Dim read(256) As [Char] descritte.
' Reads 256 characters at a time.

Dim count As Integer =


readStream.Read(read, 0, 256) CONCLUSIONI
Le basi di Paypal che abbiamo analizzato in
While count > 0 questo lungo articolo sono disperse nella
' Dumps the 256 characters monumentale documentazione fornita nel sito
' to a string and displays the Paypal in tanti file .pdf che richiedono anche
' string to the console. un non banale sforzo di traduzione; il mio
Dim IPNResponse As New [String](read, 0, lavoro deve essere inteso come un colpo d’oc-
count) chio per iniziare a lavorare con questa utilissi-
count = readStream.Read(read, 0, 256) ma piattaforma. Tuttavia le API esposte da
paypal restano eccezionalmente semplici. Il
' Se la risposta alla 3 sistema di ssicurezza esposto da paypal inol-
' di convalida è VERIFIED tre è uno dei più affidabili attualmente sul
' tutto OK mercato. Se non volete spendere denaro in
' effettua l’aggiornamento del Database sistemi di POS elettronico Paypal è un’ottima
soluzione
If IPNResponse = "VERIFIED" Then
Luigi Corrias

h t t p : / / w w w. i o p r o g r a m m o . i t
Dicembre 2006/ 63 G
SPECIALE MACCHINE VIRTUALI
ioProgrammo

ECCO COME RISPARMIARE SULL'HARDWARE ED AVERE SEMPRE


A DISPOSIZIONE MOLTI PC SU CUI EFFETTUARE I TEST
VERSIONE PLUS VERSIONE STANDARD
RIVISTA+LIBRO+CD 9,90 RIVISTA+CD 6,90
Anno XI - N°10 (119)

PER ESPERTI E PRINCIPIANTI Poste Italiane S.p.A Spedizione in A.P. • D.L. 353/2003 (conv.in L.27/02/2004 n.46) art.1 comma 2 DCB ROMA Periodicità mensile • OTTOBRE
APRILE 2007 • ANNO
2007 • ANNO
XI XI,
• N.4
N.10
(113)
(119)
IL TUO CODICE SU SECOND LIFE • PROGRAMMA IL TUO ROBOT • TRACCE ISO DAI NOSTRI PROGRAMMI • EFFETTI SPECIALI NELLE APPLICAZIONI
Il tuo codice su XPS
ICROSOFT
L'ALTERNATIVA MF
AL PD
ificare
Ecco come mod ni affinché
le tue applicaozioil nuovo
supportin
formato!
.NET
DAI UNA CACHE
AL TUO SOFTWARE
Crea, sviluppa e vendi Quando i dati sono tanti,
ecco le tecniche per ottenere
gli oggetti che popolano comunque prestazioni elevate
GRANDE FRATELLO
l'universo digitale CON IL GPS
Ricevi le coordinate e mostra
LE BASI usa subito il Linden la posizione dell'apparecchio
Scripting Language e l'ambiente su una mappa di Google
di sviluppo JAVASCRIPT
HELLO WORLD disegna il tuo FRAME NASCOSTI
primo oggetto e fallo parlare QUASI COME AJAX
Sfrutta gli Hidden frame. Ottimizza
quando lo tocchi con il mouse il caricamento delle pagine ed aggira
il problema del reload
IL MOVIMENTO fai spostare
le tue creazioni, seguendo
fedelmente le leggi della fisica CORSI BASE
EFFETTI COMPOSTI metti insieme • WxWidgets
Il posizionamento
più oggetti e animali in sincronia dei controlli
• PocketPC
PROGRAMMA IL TUO ROBOT
Con Microsoft Studio Robotics bastano pochi click di mouse per progettare
Programmazione
degli Smartphone
un sistema completo e simularne il comportamento prima di assemblare i pezzi • Java Server Faces
Gestione dei dati
.NET JAVA JAVASCRIPT attraverso JDBC
TRACCE ISO DAI EFFETTI SPECIALI TRASFORMAZIONI • UML Cosa sono
NOSTRI PROGRAMMI PER LE APPLICAZIONI XSLT LATO SERVER e come funzionano
Leggi e crea i dati in formato CD Crea interfacce grafiche Stessi dati, output diverso. i diagrammi di stato
o DVD direttamente dal tuo software sofisticate con le Swing Bug Basta cambiare pochi parametri

EDIZIONI MASTER
SOLUZIONI ALGORITMI DI SCHEDULING: QUANDO VUOI
PROGRAMMARE UNA SERIE DI ATTIVITÀ CI SONO MOLTE POSSIBILI
SOLUZIONI, ECCO QUELLE PIÙ EFFICACI www.edmaster.it
001-iop119.indd 1 3-09-2007 18:29:26
024-029:072-080 31-08-2007 15:52 Pagina 24

SISTEMA  Introduzione a Visual Robotics Studio

CREA IL TUO ROBOT


A COLPI DI CLICK
MICROSOFT HA APPENA PRESENTATO IL SUO “VISUAL STUDIO ROBOTICS”, IL PRIMO
AMBIENTE RAD E VISUALE PER LO SVILUPPO RAPIDO DI APPLICAZIONI DESTINATE
ALL’AUTOMAZIONE ROBOTICA. ECCO COME INSTALLARLO E USARLO FACILMENTE

T
utto nasce da un articolo di Bill Gates sul-
l’autorevole rivista americana Science inti-
tolato “A robot in every home”…
Il Chief Architect di Microsoft racconta che, negli ul-
timi anni, in occasione di visite alle principali Uni-
versità americane, tra i progetti che gli venivano
presentati, ve ne era costantemente almeno uno
dedicato all’automazione ed alla robotica…
J CD J WEB Bill Gates ha riflettuto su tutto questo e con un au-
VisualRoboticsStudio.rar
dace volo di fantasia ha ritrovato delle somiglian-
ze tra l’attuale scenario della cibernetica e quello del-
cdrom.ioprogrammo.it l’informatica, all’epoca in cui lui e Steve Allen muo-
vevano i primi passi…
Per essere protagonista anche di questa rivoluzio- Figura 1: L’ambiente di programmazione di Visual
ne prossima ventura ha promosso il rilascio una Studio Robotics
serie di software adeguati alla programmazione
dei Robot;
Visual Robotics Studio è appunto l’ambiente di
programmazione che Microsoft dedica alla ciber- SERVICES
netica; Evidenziata in rosso troviamo la finestra Services;
Il colosso di Redmond ha seguito una filosofia di è un elenco di ‘pezzi di Robot’:
sviluppo analoga a quella già implementata con scorrendoli scopriamo oggetti come i mattoncini
l’XBox, assemblando in maniera originale tecnologie LEGO MindStorm e Fishertechnics, joystick per vi-
che Microsoft conosce bene; deogiochi, ma anche hardware semi professiona-
il risultato è una specie di Visual Basic che al po- le come il MobileRobot Pioneer fabbricato da Mo-
sto della tipica toolbox riunisce, come in una ca- bileRobots od i componentistica della Parallax;
tena di montaggio, pezzi di robot mettendo in gio- questi ‘pezzi di Robot’, o per essere tecnici ‘Services’,
co anche i web services, uno dei cavalli di batta- rappresentano l’hardware ai quali fanno riferi-
glia della prima release di .net, e XNA il Kit di svi- mento, ne avvolgono la complessità e la astraggo-
REQUISITI
luppo dedicato ai videogiochi della XBox 360°, etc no, rendendola trasparente allo sviluppatore;
Vediamo nel dettaglio come lavora questo All Star per iniziare a lavorare con i Services non abbiamo
Conoscenze richieste
Conoscenza degli Team che da clickarvi sopra e trascinarli nella finestra
ambienti di centrale Diagram, evidenziata in blu;
programmazione
Microsoft .net è inevitabile notare le somiglianze con i tipici am-
Software
bienti di sviluppo di Microsoft:
Microsoft Robotics VISUAL PROGRAMMING clickare sopra un servizio e trascinarlo nella fine-
Studio 1, .NET
Framework 3, Visual LANGUAGE stra Diagrams è una procedura analoga alla crea-
Studio 2005 o Kit Il primo Tool che prendiamo in esame si chiama zione di pulsanti, Textbox, eccetera, nelle WebForm
Visual Express C# o
VB.net ad libitum Visual Programming Language; e WindowsForm, ovvero un paradigma di pro-
attraverso una interfaccia grafica, che funziona co- grammazione presente sin dalla primissima re-
Impegno
me una lavagna, disegniamo una sorta di catena lease di Visual Basic!
¥ di montaggio che collega e fa funzionare i diversi com- Non solo…
Tempo di realizzazione
ponenti di una automazione; Le specifiche dei “Pezzi di Robot” sono descritte
L’ambiente grafico è raffigurato in Fig 1: in file Manifest, ovvero in file di configurazione in

h t t p : / / w w w. i o p r o g r a m m o . i t
G 24 /Ottobre 2007
024-029:072-080 31-08-2007 15:52 Pagina 25

Introduzione a Visual Robotics Studio  SISTEMA

formato XML; di automazione descritto in un diagramma i una


i file Manifest sono forniti principalmente dai fab- ‘Activity’; l’Activity viene compilata selezionan-
bricanti di Robot e, con l’andare del tempo, Mi- do la voce Run dai menù a tendina (cfr. Fig. 2 e di-
crosoft conta di coprire ogni tipo di Hardware di- dascalia)
sponibile; I Services, con i relativi file Manifest, for- G Comment Inserisce un commento esplicativo
niti dai fabbricanti di hardware ci ricordano senza al flusso di automazione; non influenza il pro-
dubbio i vari componenti sviluppati da terze par- gramma ma lo chiarisce ai nostri occhi
ti disponibili per Visual Studio.
Per finire, a sinistra del tool VPL troviamo le finestre

Project
BASIC ACTIVITIES che, in maniera analoga alla finestra Project di Vi-
Una volta disposti i ‘pezzi di robot’, o per usare il sual Studio, ci consente di impostare il nome del
termine tecnico i Services, è necessario fornirgli Diagramma, di aggiungere oppure o cancellare un
delle istruzioni e farli dialogare tra loro; diagramma
le istruzioni vengono allocate e manipolate attra-
verso una serie di oggetti denominati “Basic Acti- Properties
vities” disponibili nella finestra evidenziata in ver- che consente, in maniera analoga alla finestra Pro-
de. Le Basic Activities sono rappresentate grafica- perties di Visual Studio, di impostare le proprietà del-
mente attraverso ‘quadratini’ con segmenti verdi sui l’oggetto Services oppure Activity selezionato.
lati sinistro e destro; il nome in codice di questi
segmenti verdi è ‘pin activities’; nel diagramma
della nostra automazione i dati che ‘rendono elet- IL PROGETTO D’ESEMPIO
trici’ i vari Services entrano nel pin posto a sini-
stra del ‘quadratino’ ed escono, dopo essere stati Questo è il diagramma, basato su negativo Le ruote sono fissate ad
elaborati ed instradati, dal pin posto a destra; quelli allegati all’articolo che un asse e ruotano a sinistra ed a
ogni finestra “Basic Activities” possiede Wizard di implementa l’automazione di un destra se una è spinta verso un
configurazione per impostare semplicemente le robot comandato da un Joystick; valore positivo e l'altra è spinta
sono messe in gioco tutte le Basic verso un valore negativo equiva-
sue proprietà; Vediamo le varie ‘Basic Activities’ Activities di cui abbiamo parlato e lente o viceversa.
nel dettaglio diversi Services i cui file Manifest Nota il Services di tipo Activity
supportano il Simulatore; In breve che incapsula tutto il flusso di
G Variabile Crea una variabile e la tipizza; le va- l’automazione funziona in questo Automazione del nostro
riabili sono tipizzate attraverso i medesimi tipi pre- modo: durante la simulazione, se Diagramma ed i vari commenti
premi il bottone Stop, le ruote esplicativi. Il disegno, o per usare
visti in C# (cfr. Box dedicato) non ricevono dati e si fermano se il termine tecnico, il diagramma
G Data Alloca i dati della nostra automazione in spingi la leva avanti le ruote sono che creiamo ricorda concettual-
variabili (ad esempio inserisce “Hello World” in spinte in avanti grazie a dati di mente un diagramma UML oppu-
una variabile di tipo String ) valore positivose spingi la leva re anche ad tipico diagramma di
G List Crea e tipizza una serie di dati (nota che è indietro le ruote sono spinte flusso ma non coincide affatto
indietro grazie a dati di valore con questi formalismi
possibile creare una lista di dati anche con ‘Va-
riable’)
G List Functions Consente di modificare un List
pre esistente
G Calcolate Consente di sommare, sottrarre divi-
dere o moltiplicare variabili numeriche oppure
di concatenare stringhe
G If Questa Activity, in maniera analoga ad un tipico
ciclo condizionale If/ Else, sposta il flusso del-
l’automazione verificando se una condizione è
vera oppure è falsa
G Switch In maniera analoga all’Activity sposta il flus-
so dell’automazione ma a differenza di questo
smista il flusso confrontando il messaggio in in-
gresso con un valore impostato dallo sviluppatore
G Merge ‘Fonde’ semplicemente tra loro due o più
flussi di automazione
G Join Unisce due o più flussi di automazione dan-
do ad ognuno di questi uno specifico nome
G Activity È possibile racchiudere l’intero flusso

h t t p : / / w w w. i o p r o g r a m m o . i t
Ottobre 2007/ 25 G
024-029:072-080 31-08-2007 15:52 Pagina 26

SISTEMA  Introduzione a Visual Robotics Studio

Visual Studio Programming viene fornito con una comunicano e richiedono la connessione con un Ro-
serie di diagrammi esemplificativi; bot vero e proprio (cfr. Fig. 3 e relativa didascalia);
ho preso il quarto di questi esempi e l’ho modificato Nel nostro caso, poiché non disponiamo di alcun Ro-
per renderlo più calzante ai nostri scopi “didatti- bot, è necessario lanciare il simulatore grafico, nome
ci”. in codice Microsoft Visual Simulation Environment

ROBOT & MICROSOFT VISUAL


REALTÀ VIRTUALE SIMULATION
Questo paragrafo risponde alla domanda: “Come ENVIRONMENT
i diagrammi di VPL riescono a diventare un’auto- Se, testando le vostre applicazioni con il simula-
mazione?” tore, avete l’impressione di giocare con un video-
Una volta assemblata l’automazione, clickando games non siete poi così lontani dalla realtà…
sull’icona Play, anch’essa tipica degli ambienti di svi- La tecnologia impiegata per il Visual Simulation
luppo Microsoft, è possibile telecomandare un ro- Environment è appunto quella del Game Engine
bot, oppure avviare una animazione che simula PhisX della software House Ageia.
l’automazione, quasi fosse un videogioco. ricordo brevemente che un Game Engine è un
Sono i files Manifest dei diversi Services che im- software “a basso livello”, utilizzato nella pro-
postano il simulatore grafico piuttosto che l’hardwa- grammazione dei videogiochi, che si occupa della
re; per intendersi, il simulatore viene avviato quan- grafica, delle leggi fisiche, delle animazioni e del-
do l’automazione utilizza Services le cui caratte- l’intelligenza artificiale, etc fornendo un modello
ristiche sono descritte in file Manifest che richiedono coerente sul quale lo sviluppatore può lavorare.
il simulatore grafico mentre automazioni assemblate Questo Game Engine è programmato utilizzando
con Services i cui Manifest richiedono hardware un ambiente di sviluppo che dovrebbe essere no-
to ai lettori di IoProgrammo: XNA Game Studio di
Microsoft, che viene utilizzato principalmente nel-
L’AMBIENTE DI SIMULAZIONE la programmazione della console XBOX 360°…
Lo spazio di un articolo è sempre troppo breve e
Dalla Finestra Diagram del VPL è dedicato ad una Hardware simula- non mi è possibile sviscerare tutte le funzionalità
possibile selezionare quale File to viene lanciato automaticamen- del simulatore che sono comunque piuttosto in-
Manifest intendiamo utilizzare per te il Visual Simulation tuitive;
i nostri Services: Se utilizziamo un Environment ( un robot Lego vale la pena però spiegare brevemente come è pos-
File Manifest dedicato ad Mindostorm inizia la sua esplora-
Hardware reale il Framework cer- zione nel mondo virtuale realizza-
sibile personalizzare lo scenario delle nostre si-
cherà i pezzi restituendo un mes- to con il game engine di AGEIA e mulazioni..
saggio di errore se non li trova XNA ); Nota bene che se avessimo È possibile aggiungere, posizionare o eliminare le
(non ho il mattoncino Lego il file Manifest relativo potremmo figure geometriche che popolano lo scenario del-
Mindstorm e non viene intercetta- pilotare, dal nostro computer, i la simulazione entrando nella modalità Edit attra-
ta alcuna connessione Bluetooth) robot Spirit ed Opportunity che
Se utilizziamo invece un Manifest hanno esplorato Marte
verso la pressione del tasto funzione F5;

Figura 4: Nota bene che è possibile creare nuove entità


per popolare lo scenario importandole da un ambiente di
modellazione grafica evoluto quale 3d studio max!

confrontando la Fig. 4 scopriamo che a sinistra del-


la tipica finestra del simulatore si va ad aggiunge-
re un’area che

h t t p : / / w w w. i o p r o g r a m m o . i t
G 26 /Ottobre 2007
024-029:072-080 31-08-2007 15:52 Pagina 27

Introduzione a Visual Robotics Studio  SISTEMA

G Enumera tutti gli elementi che popolano la si- del Pool di software che compongono questo ori-
mulazione (evidenziata in rosso) ginalissimo Framework:
G Consente di posizionare un elemento selezio- Concurrency and Coordination Runtime (CCR)
nato secondo i tre piani cartesiani ed anche di che tenta di risolverla rendendola invisibile ai no-
ruotarlo (evidenziata in blu) stri occhi, ovvero gestendola dietro le quinte.
È possibile modificare gli elementi geometrici del- Nota che Bill Gates nel sopraccitato articolo sulla
la simulazione seguendo questa procedura: rivista Science nomina esplicitamente il CCR, ad
a. Selezionandoli nell’area evidenziata in rosso un pubblico non specializzato, spiegando appun-
b. Dopo, attraverso il menù a tendina Entity, con le to che risolve (sic…) il problema del MultiTasking
tipiche operazioni di Copia & Incolla è possibi- di diversi processi paralleli
le cancellarli, raddoppiarli oppure eliminarli.

Dal menù a tendina File è possibile salvare uno


scenario (selezionando Open Scene…) e caricarne IL CCR VISTO DA VICINO
uno (selezionando Save Scene as…); Prima di addentrarci nei dettagli di questo com-
negli esempi allegati all’articolo troverete anche ponente software è necessario capire bene che co-
uno scenario dedicato all’automazione di esem- sa fa: immaginate di dovere creare una intranet per
pio che vi consentirà di guidare il robot fatto con i una LAN composta da 100 computer e dover veri-
Lego in un percorso a zig a zag attraverso una se- ficare se tutti sono online: probabilmente scrivereste
quenza di coni stradali. un componente che lancia un ping verso ogni sin-
Nota, per concludere, che è anche possibile mo- golo computer e ne attendi la risposta, gestendo-
dificare la gravità del nostro scenario, un’opzione la poi per i vostri scopi.
che si può rivelare utile qualora dovessimo pro- Utilizzando la libreria CCR non avreste che da dir-
gettare l’automazione per un robot esploratore su gli che cosa fare (lanciare un ping ) e come gestire
Marte o sulla Luna. le risposte; ogni singolo ping viene gestito dal CCR
creando per ogni IP un thread che utilizzerà la sche-
da di rete in più richieste parallele.
Enunciato in questi termini la libreria pare essere
PROGRAMMAZIONE proprio essere una cosa notevole.
DEI SERVICES la realtà però non è così rosea.. Il CCR, visto da vi-
Discutendo con l’Ing. Manfrin sul Kit di sviluppo l’at- cino ha un aspetto piuttosto ostile..
tenzione è stato soprattutto focalizzata sul con-
cetto di Orchestration: Port <I> Port <I>
con “Orchestration” intendiamo la perfetta sin- (Data Item Queue) (Data Item Queue)
cronia, dall’inizio alla fine, di tutti i Services che
compongono la nostra automazione;
per intendersi: nella nostra simulazione non suc-
recelverTax recelverTax
cede nulla se il nostro robot, fatto con i Lego vir-
tuali, urta un ostacolo per una disattenzione, men- Arbiter
tre nella realtà gli errori casuali o le imprecisioni
di una macchina utensile possono causare danni DispatcherQueue DispatcherQueue
incalcolabili, pensate alla catena di montaggio di
(Work Items) (Work Items)
una fabbrica di automobili i cui robots, scoordi-
Dispatcher
nati, smaltano, saldano, assemblano pezzi che non (Thread Pool)
sono ancora arrivati o sono sistemati male.
Created at App Initialization
L’Orchestration è un problema assimilabile ai pro-
blemi classici di sincronizzazione dei Threads nei Figura 5: Lo schema della CCR
Sistemi operativi, esemplificati con celebri rom-
picapo quali la “Torre di Hanoi” piuttosto che la La libreria CCR (cfr. Fig. 5) è scritta in C# e sfrutta
“Cena dei Filosofi; alcune caratteristiche della nuova release del Fra-
problemi molto complessi, infernali che sono par- mework.net;
te degli incubi degli informatici quasi da sempre…
Programmare un’applicazione con Microsoft Ro-
botics significa dunque gestire la difficile Orche-
stration tra gli input e gli output che si scambiano LA CLASSE PORT
i Services; Il CCR innanzitutto definisce una classe di tipo
L’Orchestration viene gestita da una nuova libre- Port che riceve in ingresso i parametri che do-
ria software che è probabilmente la punta di diamante vranno essere elaborati tipizzandoli;

h t t p : / / w w w. i o p r o g r a m m o . i t
Ottobre 2007/ 27 G
024-029:072-080 31-08-2007 15:52 Pagina 28

SISTEMA  Introduzione a Visual Robotics Studio

Ad esempio questo pezzo di codice funzione specifica, e poi li invia alla classe Di-
spatcherqueue che li smista. Brevemente i meto-
Port<float> pF = new Port<float>() ; di della classe Arbiter, ordinati dai più semplici
significa che abbiamo istanziato una classe Port verso i più complessi
di nome pF che riceve in ingresso un parametro di
tipo Float (nota le parentesi angolari); public static class Arbiter {
è possibile ingressare 16 parametri di tipo diver- public static ITask FromHandler(Handler
so; handler);
con questa sintassi, ad esempio
è un metodo che specifica che un valore può es-
PortSet<int,string> pIS = new PortSet<int,string>(); sere accodato verso una classe DispatcherQueue
(che vedremo più avanti).
passiamo due parametri di tipo integer e string. Questo semplice membro della classe Arbiter non
La classe di tipo Port comprende una struttura di è associato ad alcun membro della classe Port
dati FIFO ( il dato che entra per primo (First In) è
il primo dato che viene elaborato e restituito (Fir- public static ITask FromIteratorHandler(Handler
st Out) ); i dati accodati nella porta vengono poi "af- handler);
fidati" ad un arbitro che a sua volta chiama,
facendo uso di delegate e metodi anonimi, una è un metodo che enumera diversi valori che pos-
funzione da eseguire su questi dati; per la preci- sono essere accodati verso una classe Dispat-
sione i dati sono elaborati chiamando un delega- cherQueue che vedremo più avanti.
te (un costrutto tipico di .net, simile alle chiama- Non è associato ad alcun membro della classe
te a funzioni del C), che viene associato ad un me- Port
todo denominato oppure, ed è questa la novità,
un metodo anonimo; i metodi anonimi sono una public static Receiver<T> Receive<T>(
novità di C# e, in maniera elegante consentono Boolean persist, Port<T> port, Handler<T>
di passare un blocco di codice come parametro handler);
del delegate. Ad esempio:
è un metodo che può essere chiamato per passa-
// Crea un gestore per un evento Click re il risultato di una elaborazione verso una singola
button1.Click += delegate(System.Object o, porta. Deve essere specificato sia il delegate che chia-
System.EventArgs e) merà l’evento sia la porta.
{
System.Windows.Forms.MessageBox.Show("Click!"); public static JoinSinglePortReceiver
}; MultipleItemReceive<T>(
Boolean persist, Port<T> port, Int32
I metodi supportati dalla classe Port sono itemCount,
Post che invia un messaggio ad una porta VariableArgumentHandler<T> handler);

Port<int> pi = new Port<int>() ; è un metodo che può essere chiamato per invia-
pi.Post (42) ; re diversi risultati dell’elaborazione verso una sin-
gola porta.
Test che verifica, attraverso un valore Booleano Il parametro inviato al delegate VariableArgu-
di ritorno, se la porta è occupata mentHandler consiste in un array di oggetti Port

int iv ; public static JoinReceiver MultiplePortReceive<T>(


if (pi.Test (out iv)) Boolean persist, Port<T>[] ports,
Console.WriteLine ("Read " + iv) ; VariableArgumentHandler<T> handler);
else
Console.WriteLine ("Port empty.") ; è un metodo che può essere chiamato per invia-
re un singolo risultato dell’elaborazione verso
molteplici porte. Gli item devono essere del me-
desimo tipo delle porte. Il parametro inviato al
LA CLASSE ARBITER delegate VariableArgumentHandler consiste in
Una volta che i messaggi sono passati attraverso un array di oggetti Port
la classe Port e necessario elaborarli e smistarli;
questo compito è svolto dalla classe Arbiter che ... // ed altri membri omessi per brevità
li elabora utilizzando un delegate, che chiama la }

h t t p : / / w w w. i o p r o g r a m m o . i t
G 28 /Ottobre 2007
024-029:072-080 31-08-2007 15:52 Pagina 29

Introduzione a Visual Robotics Studio  SISTEMA

LA CLASSE ri Services sarebbe ben più difficile che non co-


DISPATCHERQUEUE struire a mano il proprio Robot… Ebbene le buo-
il termine queue significa coda ed identifica la co- ne notizie sono che grazie a Microsoft Robotica
da delle richieste dell’elaborazione che la classe Studio, non avrete da scrivere una sola riga di co-
Arbiter desidera siano smistati dalla classe Di- dice; l’intera implementazione del CCR viene ge-
spatcher; stita attraverso il VPL che genera tutto il codice del
I threads gestiti nella classe del Dispatcher sono quale abbiamo bisogno senza doverci mettere le
in attesa degli input accodati nella classe Dispat- mani; La documentazione del CCR per ora è vera-
cherQueue mente scarsa ma le potenzialità di questo compo-
nente sono tali che, dovrebbe entrare a fare parte NOTA
public sealed class DispatcherQueue : IDisposable { integrante delle prossime release di .net
/* Usa il pool di thread gestito dal CLR non quello RINGRAZIAMENTI
del Dispatcher più Per la preziosa colla-
flessibile */ borazione si ringrazia
public DispatcherQueue(string name); CONCLUSIONI l’ing. Federico Manfrin
public DispatcherQueue(String name, Dispatcher Microsoft, ogni volta che si trova ad affrontare una http://federicoman-
dispatcher); sfida in un settore tecnologico differente dal suo frin.googlepages.com
che si è prestato con
public void Dispose(); ‘Core Business’, non parte dal nulla ma riprende,
la sua esperienza ad
... // altri membri omessi per brevità rielaborandoli, diversi suoi cavalli di battaglia; la
aggiungere note
} cosa è evidente in XBox è soprattutto in questo importanti a questo
Robotic Development Kit che ci presenta sotto una articolo.
luce nuova non poche vecchie conoscenze… Tra
queste la vera novità e la libreria CCR che molti
LA CLASSE DISPATCHER sviluppatori vorrebbero ripreso nella Release
Il compito di sincronizzare i vari thread dell’ela- ufficiale del .NET Framework; Abbiamo parlato di
borazione viene affidato alla classe Dispatcher. robots e posto l’accento sulle comunità di
La classe Arbiter ha accodato alla dispatcherqueue appassionati che li smanettano ma il VRS non è un
delle funzioni da eseguire. La classe Dispatcher curioso Gadget quanto piuttosto lo strumento che
trova nella queue che funzioni ci sono e le esegue programma le macchine utensili e le catene di
attraverso il Multithreading, cioè in parallelo. montaggio; è appena uscito dalle officine Microsoft
ed a non poche carenze, quantomeno nella
public sealed class Dispatcher : IDisposable { documentazione, ma ha caratteristiche davvero
public Dispatcher(); interessanti che certamente ritroveremo nel nostri
public Dispatcher(Int32 threadCount, String programmi anche, nel bene o nel male, ci
threadPoolName); occupiamo tutto altro che di costruzioni Lego.
public Dispatcher(Int32 threadCount,
ThreadPriority priority, Luigi Corrias
String threadPoolName);
public ICollection<DispatcherQueue>
DispatcherQueues { get; }
... // altri membri omessi per brevità COME SI AVVIANO I SERVIZI?
}
I Services sono creati, avviati dssnewservice /s:NomeServizio

Per default ogni thread viene indirizzato ad ogni monitorati e distrutti grazie ad /l:Linguaggio
un componente software il cui
singola CPU presente nel computer ( nota che in e generare, nella cartella di
nome in codice è Decentralized
questo modo sono ottimizzati i moderni proces- Software Services Node; installazione del Kit, un vero e
sori Multi Core) ed esternamente è possibile iden- Il nodo DSSN si occupa anche di proprio progetto di Visual Studio
farli comunicare attraverso un 2005, completo di certificato,
tificare ogni singolo thread attraverso una strin-
protocollo basato su SOAP: DSSP; pronto per essere lanciato e
ga e settarne il livello di priorità (per default, il programmato(cfr. Fig. 6)!
( nota che la l’idea della
Framework assegna ad ogni thread un nome che Per comodità io ho scelto di
comunicazione tramite SOAP è
viene poi utilizzato nel Visual Studio® debugger's ripresa da uno dei pilastri di .NET, utilizzare VB.net e di gestire il
Threads). È possibile creare molteplici classi Di- i Web Services che si scambiano progetto con Visual Studio 2005
dati appunto su protocollo SOAP ma, nota bene, questo ambiente,
spatcher, ognuno con il suo pool di threads am-
e WSDL) se non è utilizzato a scopi
plificando indefinitamente le possibilità di ela- commerciali, è completamente
Per creare un Services utilizzando
borazione dello stesso. Per concludere avrete cer- gratuito e può essere
DDS non abbiamo che da lanciare
tamente compreso che Il CCR è un componete l’Interfaccia a linea di comando programmato altrettanto bene
ostico da programmare e probabilmente vi sare- del Kit di sviluppo e scrivere: con i vari Visual Studio Express;
te resi conto che gestire l’orchestrazione tra i va-

h t t p : / / w w w. i o p r o g r a m m o . i t
Ottobre 2007/ 29 G

Vous aimerez peut-être aussi