SlideShare une entreprise Scribd logo
1  sur  74
Télécharger pour lire hors ligne
Dr. Sabin Buraga
www.purl.org/net/busaco
validarea formularelor Web




                             porcii verzi
Cum putem valida datele
 introduse 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‖?
litera

                 majuscula
                                    slitere
        sstart
                                              final de cuvânt

                              ≠ litere

≠ majuscule
sau ≠ litere
                                                   scorect
                    seroare
litera

                   majuscula
                                      slitere
        sstart
                                                final de cuvânt

                                ≠ litere

≠ majuscule
sau ≠ litere
                                                     scorect
                      seroare

                 automat (finit determinist)
litera

                   majuscula
                                      slitere
        sstart
                                                final de cuvânt

                                ≠ litere

≠ majuscule
sau ≠ litere
                                                     scorect
                      seroare

                 automat (finit determinist)
Automatele pot fi folosite
pentru verificarea corectitudinii
  din punct de vedere sintactic
Cum putem reprezenta
simbolic un automat?
Sstart    ->   Majusc Slitere
Sstart    ->   DiferitDeMajusc Seroare
Slitere   ->   Litera Slitere
Slitere   ->   Final Scorect
Slitere   ->   DiferitDeLitere Seroare
Scorect   ->   
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 program
     a 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-caracterele
    substituie 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: [trn f]
D   orice exceptând cifre: [^0-9]
W   caracter ne-alfanumeric: [^0-9_a-zA-Z]
S   orice exceptând spații: [^tnr 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}
.+
                                        .+
               simbolul @
  sstart                    ssub

                                                sdom
                                   simbolul .

                       orice
 orice                altceva                     (.){2,4}
                                    orice
altceva                            altceva


                  seroare                          scorect
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 persoana
            id ID       #REQUIRED
            gen (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 persoana                terminal
            id ID       #REQUIRED
            gen (M|F)   #IMPLIED
     >
]>
       neterminal
Alte scenarii de utilizare
    a automatelor?
Transportul datelor prin Internet
protocol
          ț                                    ț
interfata (API)




        sistem de transmisie la nivel fizic:
                   fir, wireless,...
Stabilirea & eliberarea conexiunii
 sunt guvernate de un automat
automatul TCP (Transmission Control Protocol)
automatul TCP (Transmission Control Protocol)
(infoiasi)$ netstat -t
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address           State
tcp        0      0 fenrir:1548             thor:auth                 TIME_WAIT
tcp        0      0 fenrir:ssh              thor:4008                 ESTABLISHED
tcp        0      0 fenrir:ftp-data         c409-27.net.infoia:2674   TIME_WAIT
tcp        0      0 fenrir:ssh              c412-6.net.infoias:2508   ESTABLISHED
tcp        0      0 fenrir:pop3s            xteam:64688               TIME_WAIT
tcp        0      1 fenrir:1546             mta-v12.level3.mai:smtp   SYN_SENT
tcp        0      0 localhost:1544          localhost:smtp            TIME_WAIT
tcp        0    540 fenrir:1541             www.cs.tuiasi.ro:www      FIN_WAIT1
tcp        0      0 fenrir:ssh              c409-20.net.infoia:1124   ESTABLISHED
tcp        0      0 fenrir:pop3s            xteam:64682               TIME_WAIT
tcp        0      0 localhost:8008          localhost:1537            ESTABLISHED
tcp        0      1 fenrir:1533             mta-v12.level3.mai:smtp   SYN_SENT
tcp        0      0 fenrir:ftp              c412-11.net.infoia:1444   FIN_WAIT2
tcp        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 reprezentari
            a unei resurse
Rezultatul unei procesari
   (efectuate de un serviciu Web)
conduce la obtinerea unei reprezentari
            a unei resurse


 resursa = blog, fotografie, flux de stiri, program etc.
Rezultatul unei procesari
   (efectuate de un serviciu Web)
conduce la obtinerea unei reprezentari
            a unei resurse


  reprezentare = HTML, JPEG, PNG, RSS, SVG,…
Reprezentarea e specificata
          via 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 Web
    un 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 Web
    un 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)
GET       smesaj
sindex

                                 POST


GET
                                seditor
          sflux


         Web-ul ca un automat
http://blog.info/mesaj

http://blog.info/
                                    GET                 smesaj
          sindex                                                  reprezentare2
                                                                    (XHTML)
                    reprezentare1
                      (XHTML)
                                                                                      POST


         GET                                                      http://blog.info/mesaj/edit

                           http://blog.info/stiri                                  seditor
                                    sflux                                                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 oferite
     de 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 jocului
pot fi luate folosind un automat
Orice joc interactioneaza
cu 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 interactiona
cu alte token-uri ori cu jucatorul
Comportamentul token-urilor
poate fi descris de un automat
automat asociat NPC-ului ―ghost‖
sfericit                                ≠lovituri

              coliziuni
                           slovit

                                    lovituri


                                       lovituri
                          sbolnav       letale

           sviu                                   smort

automat descriind comportamentul porcilor verzi
În ce alte contexte am putea
    recurge la automate?
Dr. Sabin Buraga
www.purl.org/net/busaco

Contenu connexe

Plus de Sabin Buraga

Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie WebWeb 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie WebSabin Buraga
 
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP Sabin Buraga
 
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...Sabin Buraga
 
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object ModelWeb 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object ModelSabin Buraga
 
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...Sabin Buraga
 
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...Sabin Buraga
 
Web 2020 09/12: Servicii Web. Paradigma REST
Web 2020 09/12: Servicii Web. Paradigma RESTWeb 2020 09/12: Servicii Web. Paradigma REST
Web 2020 09/12: Servicii Web. Paradigma RESTSabin Buraga
 
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...Sabin Buraga
 
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...Sabin Buraga
 
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţialeWeb 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţialeSabin Buraga
 
STAW 01/12: Arhitectura aplicaţiilor Web
STAW 01/12: Arhitectura aplicaţiilor WebSTAW 01/12: Arhitectura aplicaţiilor Web
STAW 01/12: Arhitectura aplicaţiilor WebSabin Buraga
 
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţialeSTAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţialeSabin Buraga
 
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.Sabin Buraga
 
STAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.jsSTAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.jsSabin Buraga
 
STAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului WebSTAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului WebSabin Buraga
 
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uriSTAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uriSabin Buraga
 
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScriptSTAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScriptSabin Buraga
 
STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5Sabin Buraga
 
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)Sabin Buraga
 
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)Sabin Buraga
 

Plus de Sabin Buraga (20)

Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie WebWeb 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
Web 2020 03/12: Programare Web – Arhitectura aplicaţiilor Web. Inginerie Web
 
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
Web 2020 04/12: Programare Web – Dezvoltarea aplicaţiilor Web în PHP
 
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
Web 2020 05/12: Modelarea datelor. Familia XML. Extragerea datelor cu XPath. ...
 
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object ModelWeb 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
Web 2020 06/12: Procesarea datelor XML & HTML. Document Object Model
 
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
Web 2020 07/12: Procesarea datelor XML & HTML – Simple API for XML. Procesări...
 
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
Web 2020 08/12: Servicii Web. De la arhitecturi orientate spre servicii la SO...
 
Web 2020 09/12: Servicii Web. Paradigma REST
Web 2020 09/12: Servicii Web. Paradigma RESTWeb 2020 09/12: Servicii Web. Paradigma REST
Web 2020 09/12: Servicii Web. Paradigma REST
 
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
Web 2020 10/12: Servicii Web. Micro-servicii. Serverless. Specificarea API-ur...
 
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
Web 2020 11/12: Interacţiune Web asincronă. Aplicaţii Web de tip mash-up. JAM...
 
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţialeWeb 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
Web 2020 12/12: Securitatea aplicaţiilor Web. Aspecte esenţiale
 
STAW 01/12: Arhitectura aplicaţiilor Web
STAW 01/12: Arhitectura aplicaţiilor WebSTAW 01/12: Arhitectura aplicaţiilor Web
STAW 01/12: Arhitectura aplicaţiilor Web
 
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţialeSTAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
STAW 02/12: Programare Web: Limbajul JavaScript. Aspecte esenţiale
 
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
STAW 03/12: Programare Web: Limbajul JavaScript. Aspecte moderne: ES6 et al.
 
STAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.jsSTAW 04/12: Programare Web: Node.js
STAW 04/12: Programare Web: Node.js
 
STAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului WebSTAW 05/12: Arhitectura navigatorului Web
STAW 05/12: Arhitectura navigatorului Web
 
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uriSTAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
STAW 06/12: JavaScript în navigatorul Web. De la DOM la Ajax şi mash-up-uri
 
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScriptSTAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
STAW 07/12: Ingineria dezvoltării aplicaţiilor JavaScript
 
STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5STAW 08/12: Programare Web. Suita de tehnologii HTML5
STAW 08/12: Programare Web. Suita de tehnologii HTML5
 
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
STAW 09/12: Programare Web. API-uri JavaScript în contextul HTML5 (I)
 
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
STAW 10/12: Programare Web. API-uri JavaScript în contextul HTML5 (II)
 

De la validarea formularelor Web la porcii verzi (utilizarea automatelor in contextul Web-ului)

  • 3. Cum putem valida datele introduse de utilizator?
  • 4.
  • 5. prenumele & numele vor include doar litere adresa de email are forma cont@subdomeniu.domeniu, unde domeniu e compus din 2—4 litere
  • 6. $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...');
  • 7. prenumele & numele vor include doar litere (inclusiv caracterele albe + cratima) primul caracter trebuie scris cu majuscula
  • 8. Am putea folosi ―ceva‖ mai flexibil & ―evoluat‖?
  • 9. litera majuscula slitere sstart final de cuvânt ≠ litere ≠ majuscule sau ≠ litere scorect seroare
  • 10. litera majuscula slitere sstart final de cuvânt ≠ litere ≠ majuscule sau ≠ litere scorect seroare automat (finit determinist)
  • 11. litera majuscula slitere sstart final de cuvânt ≠ litere ≠ majuscule sau ≠ litere scorect seroare automat (finit determinist)
  • 12. Automatele pot fi folosite pentru verificarea corectitudinii din punct de vedere sintactic
  • 14. Sstart -> Majusc Slitere Sstart -> DiferitDeMajusc Seroare Slitere -> Litera Slitere Slitere -> Final Scorect Slitere -> DiferitDeLitere Seroare Scorect ->  Seroare ->  Majusc -> [A-Z] Litera -> [a-zA-Z] ... gramatica
  • 15. generalizând, avem: Neterminal -> Neterminal Terminal Neterminal -> meta-caractere (simboluri) Terminal -> caractere “reale” X -> Y specificând regula de productie gramatica
  • 16. Specificarea la nivel de program a unor tipuri particulare de gramatici se face via expresii regulate (regular expressions – regex)
  • 17. Expresii regulate pattern-uri textuale conform unor reguli precise, li se pot ―potrivi‖ texte
  • 18. Expresii regulate caractere ―reale‖ vs. meta-caractere uzual, meta-caracterele substituie operatori ―speciali‖
  • 19. . 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]
  • 20. ? 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} ≡ ?
  • 21. d o cifră: [0-9] w un caracter alfanumeric: [0-9_a-zA-Z] s un spațiu alb: [trn f] D orice exceptând cifre: [^0-9] W caracter ne-alfanumeric: [^0-9_a-zA-Z] S orice exceptând spații: [^tnr 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
  • 22. Expresia desemnând adresa de e-mail: .+@.+.(.){2,4}
  • 23. .+ .+ simbolul @ sstart ssub sdom simbolul . orice orice altceva (.){2,4} orice altceva altceva seroare scorect
  • 24. Expresia desemnând adresa de e-mail: .+@.+.(.){2,4} Hm… valori ca -@@.74 sunt considerate corecte!
  • 25. 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
  • 26. test () match () replace () split ()
  • 27. var expr = new RegExp ("^[A-Z]?[a-z]+$"); $('mesaj').className = expr.test (valoare) ? 'corect' : 'eroare'; expresii regulate – limbajul JavaScript
  • 28. Am putea valida structura documentelor XML?
  • 29. <!-- 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>
  • 30. Folosind gramatici (automate), putem valida documentele XML: DTD (Document Type Definition) RELAX NG
  • 31. <!-- 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 persoana id ID #REQUIRED gen (M|F) #IMPLIED > ]>
  • 32. <!-- 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 persoana terminal id ID #REQUIRED gen (M|F) #IMPLIED > ]> neterminal
  • 33.
  • 34. Alte scenarii de utilizare a automatelor?
  • 36. protocol ț ț interfata (API) sistem de transmisie la nivel fizic: fir, wireless,...
  • 37. Stabilirea & eliberarea conexiunii sunt guvernate de un automat
  • 38. automatul TCP (Transmission Control Protocol)
  • 39. automatul TCP (Transmission Control Protocol)
  • 40. (infoiasi)$ netstat -t Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 fenrir:1548 thor:auth TIME_WAIT tcp 0 0 fenrir:ssh thor:4008 ESTABLISHED tcp 0 0 fenrir:ftp-data c409-27.net.infoia:2674 TIME_WAIT tcp 0 0 fenrir:ssh c412-6.net.infoias:2508 ESTABLISHED tcp 0 0 fenrir:pop3s xteam:64688 TIME_WAIT tcp 0 1 fenrir:1546 mta-v12.level3.mai:smtp SYN_SENT tcp 0 0 localhost:1544 localhost:smtp TIME_WAIT tcp 0 540 fenrir:1541 www.cs.tuiasi.ro:www FIN_WAIT1 tcp 0 0 fenrir:ssh c409-20.net.infoia:1124 ESTABLISHED tcp 0 0 fenrir:pop3s xteam:64682 TIME_WAIT tcp 0 0 localhost:8008 localhost:1537 ESTABLISHED tcp 0 1 fenrir:1533 mta-v12.level3.mai:smtp SYN_SENT tcp 0 0 fenrir:ftp c412-11.net.infoia:1444 FIN_WAIT2 tcp 0 0 fenrir:1511 fenrir:1509 TIME_WAIT comanda netstat permite ―spionarea‖ starilor curente pentru fiecare conexiune TCP
  • 41. Software bazat pe servicii Web
  • 42. Software bazat pe servicii Web paradigma REST (REpresentational State Transfer)
  • 43. Servicii Web software oferind o functionalitate anume
  • 44. Servicii Web traduceri, curs valutar, meteo, cartografiere, statistici, stocare,…
  • 45. Servicii Web utilizate de alte aplicatii/servicii
  • 46. recurgerea la servicii multiple – mash-up
  • 47. Rezultatul unei procesari (efectuate de un serviciu Web) conduce la obtinerea unei reprezentari a unei resurse
  • 48. Rezultatul unei procesari (efectuate de un serviciu Web) conduce la obtinerea unei reprezentari a unei resurse resursa = blog, fotografie, flux de stiri, program etc.
  • 49. Rezultatul unei procesari (efectuate de un serviciu Web) conduce la obtinerea unei reprezentari a unei resurse reprezentare = HTML, JPEG, PNG, RSS, SVG,…
  • 50. Reprezentarea e specificata via tipuri MIME text/html, image/png, application/xhtml+xml
  • 51. Reprezentarile aceleasi resurse – desemnate de un URI unic – pot fi multiple
  • 52. Resursa specificata de http://vremea.la/galaciuc/ poate fi reprezentata de: un document HTML – accesat de un browser Web un flux Atom – utilizat de alte servicii un document SVG – pentru listare
  • 53. Resursa specificata de http://vremea.la/galaciuc/ poate fi reprezentata de: un document HTML – accesat de un browser Web un flux Atom – utilizat de alte servicii un document SVG – pentru listare fiecare reprezentare are asociat un URL
  • 54. Clientii (navigatoare Web, player-e,…) interactioneaza cu reprezentarile resurselor via verbe ―acceseaza‖ – GET ―modifica‖ – POST ―sterge‖ – DELETE …
  • 55. 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)
  • 56. GET smesaj sindex POST GET seditor sflux Web-ul ca un automat
  • 57. http://blog.info/mesaj http://blog.info/ GET smesaj sindex reprezentare2 (XHTML) reprezentare1 (XHTML) POST GET http://blog.info/mesaj/edit http://blog.info/stiri seditor sflux reprezentare3 (XHTML) reprezentare4 (Atom)
  • 58. 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
  • 59. // 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); } });
  • 60. acces (a)sincron la rezultatele oferite de un serviciu Web via API
  • 62. Am putea modela (pe baza unui automat) comportamentul personajelor dintr-un joc electronic?
  • 63. Deciziile din cadrul jocului pot fi luate folosind un automat
  • 64. Orice joc interactioneaza cu minim 1 jucator uman
  • 65. Orice joc include ―jetoane‖ discrete – numite token-uri – manipulate (in)direct de jucator(i)
  • 66. Orice joc include ―jetoane‖ discrete – numite token-uri – manipulate (in)direct de jucator(i) aceste token-uri sunt gestionate intern de software
  • 67. La nivel conceptual, un joc e descris de jucatori + token-uri
  • 68. Token-urile pot interactiona cu alte token-uri ori cu jucatorul
  • 69.
  • 70. Comportamentul token-urilor poate fi descris de un automat
  • 72. sfericit ≠lovituri coliziuni slovit lovituri lovituri sbolnav letale sviu smort automat descriind comportamentul porcilor verzi
  • 73. În ce alte contexte am putea recurge la automate?