De la validarea formularelor Web la porcii verzi (utilizarea automatelor in contextul Web-ului)
-
Upload
sabin-buraga -
Category
Education
-
view
2.809 -
download
0
description
Transcript of De la validarea formularelor Web la porcii verzi (utilizarea automatelor in contextul Web-ului)
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 [email protected], 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