de la validarea formularelor web la porcii verzi (utilizarea automatelor in contextul web-ului)

Post on 22-Jun-2015

2.803 Views

Category:

Education

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

A presentation -- prepared for the InfoEducation 2011 summer camp -- regarding the pragmatic uses of automata theory (especially finite state machines) in the Web context, with examples covering XML validation, REST Web services, game development, etc. The content is available in Romanian language, only.

TRANSCRIPT

Dr. Sabin Buragawww.purl.org/net/busaco

validarea formularelor Web

porcii verzi

Cum putem valida dateleintroduse de utilizator?

prenumele & numele vor include doar litere

adresa de email are forma cont@subdomeniu.domeniu, unde domeniu e compus din 2—4 litere

$nume = $_REQUEST['nume'];

$lungime = strlen ($nume);

for ($i = 0; $i < $lungime; $i++) {

if (!este_litera (nume[$i])) {

genereaza_eroare (NUME_ERONAT);

}

}

// aparent, numele a fost introdus corect

echo ('Numele e corect...');

prenumele & numele vor include doar litere(inclusiv caracterele albe + cratima)

primul caracter trebuie scris cu majuscula

Am putea folosi ―ceva‖mai flexibil & ―evoluat‖?

sstart

slitere

seroare

≠ majusculesau ≠ litere

majuscula

litera

≠ litere

scorect

final de cuvânt

sstart

slitere

seroare

≠ majusculesau ≠ litere

majuscula

litera

≠ litere

scorect

final de cuvânt

automat (finit determinist)

sstart

slitere

seroare

≠ majusculesau ≠ litere

majuscula

litera

≠ litere

scorect

final de cuvânt

automat (finit determinist)

Automatele pot fi folositepentru verificarea corectitudinii

din punct de vedere sintactic

Cum putem reprezenta simbolic un automat?

Sstart -> Majusc SlitereSstart -> DiferitDeMajusc SeroareSlitere -> Litera SlitereSlitere -> Final ScorectSlitere -> DiferitDeLitere SeroareScorect ->

Seroare ->

Majusc -> [A-Z]

Litera -> [a-zA-Z]

...gramatica

generalizând, avem:

Neterminal -> Neterminal Terminal

Neterminal -> meta-caractere (simboluri)

Terminal -> caractere “reale”

X -> Y specificând regula de productie

gramatica

Specificarea la nivel de programa unor tipuri particulare de

gramatici se face via expresii regulate(regular expressions – regex)

Expresii regulate

pattern-uri textuale

conform unor reguli precise,li se pot ―potrivi‖ texte

Expresii regulate

caractere ―reale‖ vs. meta-caractere

uzual, meta-caracterelesubstituie operatori ―speciali‖

. orice caracter, exceptând new-line (\n)

[…] enumerare de caractere: [A-Z] [0-9]

| alternativă a mai multe forme: M|F

(…) grupare de caractere

$ final de linie

^ început de linie sau negare: [^A-Z]

? 0 sau maxim 1 apariții: (web)?

* zero sau mai multe apariții: .*

+ minim 1 sau mai multe apariții: [0-9a-z]+

{…} interval de apariții: [a-zA-Z]{2,4}

{1,} ≡ +

{0,} ≡ *

{0,1} ≡ ?

\d o cifră: [0-9]\w un caracter alfanumeric: [0-9_a-zA-Z]\s un spațiu alb: [\t\r\n\ \f]\D orice exceptând cifre: [^0-9]\W caracter ne-alfanumeric: [^0-9_a-zA-Z]\S orice exceptând spații: [^\t\n\r\ \f]\b limitele unui cuvânt\B orice alt context decât limitele

unui cuvânt (interiorul unui cuvânt)\A începutul unui șir\Z sfârșitul unui șir

Expresia desemnând adresa de e-mail:

.+@.+\.(.){2,4}

sstart ssub

seroare

oricealtceva

simbolul @

sdom

.+.+

oricealtceva

simbolul .

scorect

(.){2,4}orice

altceva

Expresia desemnând adresa de e-mail:

.+@.+\.(.){2,4}

Hm… valori ca -@@.74 sunt considerate corecte!

sub validare_email { $testmail = shift; if ($testmail =~ / /) { return 0 }; if ($testmail =~/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/ || $testmail !~

/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/)

{ return 0;

} else { return 1;

}}

expresii regulate – limbajul Perl

test ()

match ()

replace ()

split ()

var expr = new RegExp ("^[A-Z]?[a-z]+$");$('mesaj').className = expr.test (valoare)

? 'corect' : 'eroare';

expresii regulate – limbajul JavaScript

Am putea valida structura documentelor XML?

<!-- arbore genealogic --><arbore>

<persoana id="busaco" gen="M"><prenume>Sabin-Corneliu</prenume><mama>

<persoana id="mama" gen="F"><prenume>Sabina-Elena</prenume>

</persoana></mama><tata>

<persoana id="tata" gen="M"><prenume>Radu-Corneliu</prenume>

</persoana></tata><obs>...</obs>

</persoana></arbore>

Folosind gramatici (automate),putem valida documentele XML:

DTD (Document Type Definition)

RELAX NG

<!-- DTD pentru validarea arborelui genealogic --><!DOCTYPE arbore [

<!ELEMENT arbore (persoana+)><!ELEMENT persoana (prenume,mama?,tata?,obs*)><!ELEMENT prenume (#PCDATA)><!ELEMENT mama (persoana)><!ELEMENT tata (persoana)><!ELEMENT obs (#PCDATA)>

<!ATTLIST persoanaid ID #REQUIREDgen (M|F) #IMPLIED

>]>

<!-- DTD pentru validarea arborelui genealogic --><!DOCTYPE arbore [

<!ELEMENT arbore (persoana+)><!ELEMENT persoana (prenume,mama?,tata?,obs*)><!ELEMENT prenume (#PCDATA)><!ELEMENT mama (persoana)><!ELEMENT tata (persoana)><!ELEMENT obs (#PCDATA)>

<!ATTLIST persoanaid ID #REQUIREDgen (M|F) #IMPLIED

>]> neterminal

terminal

Alte scenarii de utilizarea automatelor?

Transportul datelor prin Internet

sistem de transmisie la nivel fizic:fir, wireless,...

ț ț

interfata (API)

protocol

Stabilirea & eliberarea conexiuniisunt guvernate de un automat

automatul TCP (Transmission Control Protocol)

automatul TCP (Transmission Control Protocol)

(infoiasi)$ netstat -tActive Internet connections (w/o servers)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 0 fenrir:1548 thor:auth TIME_WAITtcp 0 0 fenrir:ssh thor:4008 ESTABLISHEDtcp 0 0 fenrir:ftp-data c409-27.net.infoia:2674 TIME_WAITtcp 0 0 fenrir:ssh c412-6.net.infoias:2508 ESTABLISHEDtcp 0 0 fenrir:pop3s xteam:64688 TIME_WAITtcp 0 1 fenrir:1546 mta-v12.level3.mai:smtp SYN_SENTtcp 0 0 localhost:1544 localhost:smtp TIME_WAITtcp 0 540 fenrir:1541 www.cs.tuiasi.ro:www FIN_WAIT1tcp 0 0 fenrir:ssh c409-20.net.infoia:1124 ESTABLISHEDtcp 0 0 fenrir:pop3s xteam:64682 TIME_WAITtcp 0 0 localhost:8008 localhost:1537 ESTABLISHEDtcp 0 1 fenrir:1533 mta-v12.level3.mai:smtp SYN_SENTtcp 0 0 fenrir:ftp c412-11.net.infoia:1444 FIN_WAIT2tcp 0 0 fenrir:1511 fenrir:1509 TIME_WAIT

comanda netstat permite ―spionarea‖ starilor curente pentru fiecare conexiune TCP

Software bazat pe servicii Web

Software bazat pe servicii Web

paradigma REST(REpresentational State Transfer)

Servicii Web

software oferind o functionalitate anume

Servicii Web

traduceri, curs valutar, meteo, cartografiere, statistici, stocare,…

Servicii Web

utilizate de alte aplicatii/servicii

recurgerea la servicii multiple – mash-up

Rezultatul unei procesari(efectuate de un serviciu Web)

conduce la obtinerea unei reprezentaria unei resurse

Rezultatul unei procesari(efectuate de un serviciu Web)

conduce la obtinerea unei reprezentaria unei resurse

resursa = blog, fotografie, flux de stiri, program etc.

Rezultatul unei procesari(efectuate de un serviciu Web)

conduce la obtinerea unei reprezentaria unei resurse

reprezentare = HTML, JPEG, PNG, RSS, SVG,…

Reprezentarea e specificatavia tipuri MIME

text/html, image/png, application/xhtml+xml

Reprezentarile aceleasi resurse – desemnate de un URI unic –

pot fi multiple

Resursa specificata de http://vremea.la/galaciuc/

poate fi reprezentata de:

un document HTML – accesat de un browser Webun flux Atom – utilizat de alte servicii

un document SVG – pentru listare

Resursa specificata de http://vremea.la/galaciuc/

poate fi reprezentata de:

un document HTML – accesat de un browser Webun flux Atom – utilizat de alte servicii

un document SVG – pentru listare

fiecare reprezentare are asociat un URL

Clientii (navigatoare Web, player-e,…)interactioneaza cu reprezentarile

resurselor via verbe

―acceseaza‖ – GET

―modifica‖ – POST

―sterge‖ – DELETE

Orice accesare a unei reprezentari plaseaza aplicatia – ori clientul Web –intr-o stare ce va fi schimbata in urma

unui transfer de date(accesarea altei reprezentari)

sindex

smesaj

sflux

GET

seditor

GET

POST

Web-ul ca un automat

sindex

smesaj

sflux

GET

seditor

GET

POST

http://blog.info/

http://blog.info/mesaj

http://blog.info/mesaj/edit

http://blog.info/stiri

reprezentare1

(XHTML)

reprezentare2

(XHTML)

reprezentare3

(XHTML)

reprezentare4

(Atom)

Transferul se realizeaza prin protocolul HTTP

Reprezentarea e modelata in HTML, JSON , XML(sau alt format) si indicata prin MIME

Adresabilitatea se rezolva via URI

// invocarea asincronă (Ajax) a unui serviciu Web via jQuery

jQuery.ajax ({

type: "POST", // execută o cerere POST

contentType: "application/json; charset=utf-8",

url: "http://undeva.info/ArboreGenealogic/busaco",

data: "{...}", // date de intrare trimise serviciului

dataType: "json", // așteptăm răspunsul în format JSON

// funcție apelată la transferul cu succes

success: function(data) {

// preluăm datele, convertindu-le în HTML

$('.rezultat').html(data);

}

});

acces (a)sincron la rezultatele oferitede un serviciu Web via API

Bun… Dar porcii verzi?

Am putea modela(pe baza unui automat)

comportamentul personajelor dintr-un joc electronic?

Deciziile din cadrul joculuipot fi luate folosind un automat

Orice joc interactioneazacu minim 1 jucator uman

Orice joc include ―jetoane‖ discrete– numite token-uri –

manipulate (in)direct de jucator(i)

Orice joc include ―jetoane‖ discrete– numite token-uri –

manipulate (in)direct de jucator(i)

aceste token-uri sunt gestionate intern de software

La nivel conceptual, un joc e descris de jucatori + token-uri

Token-urile pot interactionacu alte token-uri ori cu jucatorul

Comportamentul token-urilorpoate fi descris de un automat

automat asociat NPC-ului ―ghost‖

sfericit slovit

sviu

sbolnav

coliziuni

automat descriind comportamentul porcilor verzi

≠lovituri

smort

lovituriletale

lovituri

În ce alte contexte am putea recurge la automate?

Dr. Sabin Buragawww.purl.org/net/busaco

top related