SlideShare una empresa de Scribd logo
1 de 74
Descargar para leer sin conexión
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

Más contenido relacionado

Más 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
 

Más 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)
 

Último

Sistemul excretor la om, biologie clasa 11
Sistemul excretor la om, biologie clasa 11Sistemul excretor la om, biologie clasa 11
Sistemul excretor la om, biologie clasa 11CMB
 
Literatura polonă pentru copii tradusă în limba română
Literatura polonă pentru copii tradusă în limba românăLiteratura polonă pentru copii tradusă în limba română
Literatura polonă pentru copii tradusă în limba românăBibliotecaMickiewicz
 
Agricultura- lectie predare -invatare geografie cls 10
Agricultura- lectie predare -invatare geografie cls 10Agricultura- lectie predare -invatare geografie cls 10
Agricultura- lectie predare -invatare geografie cls 10CrciunAndreeaMaria
 
Catalogul firmei de exercițiu Ancolex 2024.pptx
Catalogul firmei de exercițiu Ancolex 2024.pptxCatalogul firmei de exercițiu Ancolex 2024.pptx
Catalogul firmei de exercițiu Ancolex 2024.pptxCori Rus
 
ziua pamantului ziua pamantului ziua pamantului
ziua pamantului ziua pamantului ziua pamantuluiziua pamantului ziua pamantului ziua pamantului
ziua pamantului ziua pamantului ziua pamantuluiAndr808555
 
Fisa de lucru Glandele Endocrine clasa a 7 a
Fisa de lucru Glandele Endocrine clasa a 7 aFisa de lucru Glandele Endocrine clasa a 7 a
Fisa de lucru Glandele Endocrine clasa a 7 aRoxana334871
 

Último (6)

Sistemul excretor la om, biologie clasa 11
Sistemul excretor la om, biologie clasa 11Sistemul excretor la om, biologie clasa 11
Sistemul excretor la om, biologie clasa 11
 
Literatura polonă pentru copii tradusă în limba română
Literatura polonă pentru copii tradusă în limba românăLiteratura polonă pentru copii tradusă în limba română
Literatura polonă pentru copii tradusă în limba română
 
Agricultura- lectie predare -invatare geografie cls 10
Agricultura- lectie predare -invatare geografie cls 10Agricultura- lectie predare -invatare geografie cls 10
Agricultura- lectie predare -invatare geografie cls 10
 
Catalogul firmei de exercițiu Ancolex 2024.pptx
Catalogul firmei de exercițiu Ancolex 2024.pptxCatalogul firmei de exercițiu Ancolex 2024.pptx
Catalogul firmei de exercițiu Ancolex 2024.pptx
 
ziua pamantului ziua pamantului ziua pamantului
ziua pamantului ziua pamantului ziua pamantuluiziua pamantului ziua pamantului ziua pamantului
ziua pamantului ziua pamantului ziua pamantului
 
Fisa de lucru Glandele Endocrine clasa a 7 a
Fisa de lucru Glandele Endocrine clasa a 7 aFisa de lucru Glandele Endocrine clasa a 7 a
Fisa de lucru Glandele Endocrine clasa a 7 a
 

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?