Upload
sabin-buraga
View
2.809
Download
0
Embed Size (px)
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.
Citation preview
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