Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sd-ca:teme:teme-03 [2015/04/20 18:25]
razvan_madalin.matei
sd-ca:teme:teme-03 [2015/05/08 12:37] (current)
razvan_madalin.matei
Line 8: Line 8:
 Depunctare întârziere după depășirea deadline-ului soft: ** -10p/zi ** Depunctare întârziere după depășirea deadline-ului soft: ** -10p/zi **
  
-** Deadline soft: XX mai, ora 23:55 **+** Deadline soft: 11 mai, ora 23:55 **
  
-** Deadline hard: XX mai, ora 23:55 **+** Deadline hard: 14 mai, ora 23:55 **
  
 +
 +
 +==== Modificari si actualizari ====
 +    * **27 aprilie**: a fost modificat example.json si exemplul de input/​output
 +    * **27 aprilie**: au fost publicate testele
 +    * **28 aprilie**: a fost uploadat checkerul
 +    * **3 mai**: s-au adaugat explicatii ale mesajelor de eroare
 +    * **3 mai**: a fost uploadata o noua versiune de teste
 +    * **8 mai**: amanare deadline
  
  
Line 21: Line 30:
   * va folosi structurile de date pentru a implementa o posibilia aplicatie reala   * va folosi structurile de date pentru a implementa o posibilia aplicatie reala
  
 +Odata cu explozia internetului din ziua de azi a crescut, inevitabil, si gradul de risc la care un utilizator este expus in activitatea de zi cu zi. Pentru o detectie cat mai completa a numeroaselor tipuri de atacuri cibernetice,​ compania la care tocmai ati fost angajati va pune la dispozitie un set de date (in format JSON) ce contine statistici despre pagini web posibil"​suspecte"​ (de exemplu: cu fisiere executabile infectate, cunoscute pentru fishing, continut ilegal sau potential daunator, etc.) 
  
 +Generic numite "​event-uri",​ aceste date sunt stocate de catre Bitdefender intr-un depozit propriu, numit Event Correlation (EC). Pentru ca aceste inregistrari sa cuprinda o gama cat mai variata si actualizata de activitati ilegale (in vederea detectiei si preventiei) compania dispune de niste masini virtuale, numite HoneyPots (vulnerabile intentionat la atacuri) si raspandinte in diverse puncte geografice pe glob, care sa atraga in capcana hackeri si sa culeaga date despre activitatea lor: ce pagini acceseaza de pe honeypot-ul pe care tocmai (cred ca) l-au compromis, ce tipuri de atacuri initiaza, ce fisiere folosesc pentru aceasta, etc. 
  
 ===== Cerinta ===== ===== Cerinta =====
  
-Se cere implementarea unei structuri de date care sa eficientizeze manipularea obiectelor de tip JSON.+Se cere implementarea unei structuri de date care sa eficientizeze ​interogarea si manipularea obiectelor de tip JSON.
  
-JSON este un acronim în limba engleză ​pentru JavaScript Object Notation, ​și este un format de reprezentare ​și interschimb de date între aplicații ​informatice. Este un format text, inteligibil pentru oameni, utilizat pentru reprezentarea obiectelor ​și a altor structuri de date și este folosit ​în special pentru a transmite date structurate prin rețea, procesul ​purtând ​numele de serializare. JSON este alternativa mai simplă, mai facilă decât ​limbajul XML. Eleganța ​formatului JSON provine din faptul ​că este un subset al limbajului JavaScript (ECMA-262 3rd Edition), fiind utilizat ​alături ​de acest limbaj. Formatul JSON a fost creat de Douglas Crockford ​și standardizat prin RFC 4627.+JSON este un acronim în limba engleza ​pentru JavaScript Object Notation, ​si este un format de reprezentare ​si interschimb de date intre aplicatii ​informatice. Este un format text, inteligibil pentru oameni, utilizat pentru reprezentarea obiectelor ​si a altor structuri de date si este folosit ​in special pentru a transmite date structurate prin retea, procesul ​purtand ​numele de serializare. JSON este alternativa mai simpla, mai facila decat limbajul XML. Eleganta ​formatului JSON provine din faptul ​ca este un subset al limbajului JavaScript (ECMA-262 3rd Edition), fiind utilizat ​alaturi ​de acest limbaj. Formatul JSON a fost creat de Douglas Crockford ​si standardizat prin RFC 4627.
  
 Exemplu de obiect JSON: Exemplu de obiect JSON:
  
 <code cpp example.json>​ <code cpp example.json>​
-{ +[ 
-  "​firstName":​ "​John",​ +  ​
-  "​lastName":​ "​Smith",​ +    ​"​firstName":​ "​John",​ 
-  "​isAlive":​ true, +    "​lastName":​ "​Smith",​ 
-  "​age":​ 25, +    "​isAlive":​ true, 
-  "​address":​ { +    "​age":​ 25, 
-    "​streetAddress":​ "21 2nd Street",​ +    "​address":​ { 
-    "​city":​ "New York",​ +      "​streetAddress":​ "21 2nd Street",​ 
-    "​state":​ "​NY",​ +      "​city":​ "New York",​ 
-    "​postalCode":​ "​10021-3100+      "​state":​ "​NY",​ 
-  }, +      "​postalCode":​ "​10021-3100"​
-  "​phoneNumbers":​ [ +
-    { +
-      "​type":​ "​home",​ +
-      "​number":​ "212 555-1234"+
     },     },
-    { +    ​"​phoneNumbers":​ [ 
-      "​type":​ "​office",​ +      ​{ 
-      "​number":​ "646 555-4567"​ +        "​type":​ "​home",​ 
-    +        "​number":​ "212 555-1234"​ 
-  ], +      ​}, 
-  "​children":​ [ +      { 
-  ​], +        ​"​type":​ "​office",​ 
-  "​spouse":​ null +        "​number":​ "646 555-4567"​ 
-}+      
 +    ], 
 +    "​children":​ [ ], 
 +    "​spouse":​ null 
 +  } 
 +]
 </​code>​ </​code>​
  
 Tipurile de baza pentru obiectele JSON sunt: Tipurile de baza pentru obiectele JSON sunt:
-  * **lista**: lista cu 0 sau mai multe obiecte de oricare tip (ex: phoneNumbers,​ children) +  * **JSON_ARRAY**: vector ​cu 0 sau mai multe objects 
-  * **obiect**: colectie de perechi cheie:​valoare unde cheia este de tip string (unica in cadrul ​obiectului) iar valoarea poate fi de orice tip +  * **JSON_OBJECT**: colectie de perechi cheie:​valoare unde cheia este de tip string (unica in cadrul ​object-ului) iar valoarea poate fi de orice tip 
-  * **string**: secventa de 0 sau mai multe caractere ​ASCI +  * **JSON_STRING**: secventa de 0 sau mai multe caractere ​ASCII 
-  * **boolean**: true sau false +  * **JSON_BOOL**: //true// sau //false// 
-  * **number**: intreg +  * **JSON_NUMBER**: intreg 
-  * **null**: valoare nula, reprezentata de cuvantul null +  * **JSON_NULL**: valoare nula, reprezentata de cuvantul ​//null//
- +
-Cerinta pentru voi este sa stocati obiecte de tip JSON intr-o structura de date care sa optimizeze operatiile de modificare a obiectelor JSON.+
  
  
Line 73: Line 83:
 ===== Operatii ===== ===== Operatii =====
 Operatiile pe care structura voastra de date trebuie sa le efectueze sunt: Operatiile pe care structura voastra de date trebuie sa le efectueze sunt:
-  * **load(fisier)**:​ incarca in memorie un obiect JSON dintr-un fisier 
   * **get(succesiune_chei)**:​ afiseaza valoarea ultimei chei din succesiunea de chei   * **get(succesiune_chei)**:​ afiseaza valoarea ultimei chei din succesiunea de chei
   * **put(succesiune_chei,​ valoare)**: adauga/​modifica perechea ultima_cheie:​valoare   * **put(succesiune_chei,​ valoare)**: adauga/​modifica perechea ultima_cheie:​valoare
-  * **dump(fisier)**: printeaza obiectul JSON incarcat in memorie intr-un fisier (daca vrem dump tre sa le zicem cum sa stocheze obiectele si isi pierde tema tot farmecul) +  * **del(succesiune_chei)**: sterge perechea ultima_cheie:​valoare 
-  * poate si altele+ 
 +Operatiile pot esua cu urmatoarele mesaje de eroare, urmate de valoarea cheii la care au esuat: 
 +  * **ERROR_NOT_ARRAY**:​ se cere un index de la o cheie care nu reprezinta un JSON_ARRAY 
 +  * **ERROR_NOT_OBJECT**:​ se cere o cheie de la o cheie care nu reprezinta un JSON_OBJECT 
 +  * **ERROR_INDEX_OUT_OF_RANGE**:​ se cere un index de la o cheie care reprezinta un JSON_ARRAY cu un numar mai mic de intrari decat index-ul cerut 
 +  * **KEY_NOT_FOUND**:​ cheia cautata nu a fost gasita
  
 +Fiecare mesaj de eroare este precedat de numele operatiei la care a aparut eroarea.
  
 +Pentru a observa comportamentul operatiilor de mai sus, urmariti exemplul de input/​output.
  
 ===== Exemplu input/​output ===== ===== Exemplu input/​output =====
-Inca nu sunt batute in cuie, maine (21 aprilie) seara le batem.+Operatiile de mai jos sunt efectuate asupra JSON-ului din //example.json//
  
-<code input> +<columns 100% 50% -> 
-LOAD example.json +<​code ​cpp input> 
-GET isAlive +GET 
-GET spouse +GET 
-GET firstname +GET 0 "​firstName"​ 
-GET address ​state +GET 0 "​age"​ 
-GET phoneNumbers 0 type +GET 0 "isAlive" 
-GET middleName +GET 0 "spouse" 
-PUT middleName Samuel +GET 0 "​notAKey"​ 
-GET middleName +GET 0 "address" "​city"​ 
-GET age +GET 0 "​address"​ "​notAKey"​ 
-PUT age 30 +GET 0 "​notAKey1"​ "​notAKey2"​ 
-GET age +GET 0 "​spouse"​ 0 
-GET address ​building +GET 0 "​phoneNumbers"​ 0 
-PUT address building 7 +GET 0 "phoneNumbers" ​"type" 
-GET address building +GET 0 "​children"​ 
-GET phoneNumber ​number +GET 0 "​children"​ 0 
-PUT phoneNumber ​0 number ​212 555-5678 +PUT "​aKey"​ "​aValue"​ 
-GET phoneNumber ​0 number+PUT 0 "​aKey"​ "​aValue"​ 
 +GET 0 "​aKey"​ 
 +PUT 0 "​address"​ null 
 +GET 0 "​address"​ "​city"​ 
 +GET 0 "address" 
 +PUT 0 "​spouse"​ "​Jessica"​ 
 +GET 0 "​spouse"​ 
 +PUT 0 "​phoneNumbers"​ 1 "​type"​ "​mobile"​ 
 +GET 0 "​phoneNumbers"​ 1 "​type"​ 
 +PUT 0 "​children"​ 0 "​name"​ "John Snow"​ 
 +DEL 0 "​firstName"​ 
 +GET 0 "​firstName"​ 
 +DEL 0 "​notAkey"​ 
 +DEL 1 "​firstName"​ 
 +GET 0 "​phoneNumbers"​ 0 "number
 +DEL 0 "​phoneNumbers"​ 0 
 +GET 0 "​phoneNumbers"​ 0 "number
 +DEL 0 "​spouse"​ 
 +DEL 0 "​address"​ 
 +GET 0 "​address"​ "​city"​
 </​code>​ </​code>​
 +   
 +<​newcolumn>​
  
-<code output>+<​code ​cpp output> 
 +JSON_ARRAY 
 +JSON_OBJECT 
 +"​John"​ 
 +25
 true true
 null null
-John +GET_KEY_NOT_FOUND "​notAKey"​ 
-NY +"New York" 
-home +GET_KEY_NOT_FOUND "​notAKey"​ 
-UNEXISTENT +GET_KEY_NOT_FOUND "​notAKey1"​ 
-SAMUEL +GET_ERROR_NOT_ARRAY "​spouse"​ 
-25 +JSON_OBJECT 
-30 +"home" 
-UNEXISTENT +JSON_ARRAY 
-7 +GET_ERROR_INDEX_OUT_OF_RANGE "​children"​ 
-212 555-1234 +PUT_ERROR_NOT_OBJECT root 
-212 555-5678 +"​aValue"​ 
-</​code>​+GET_ERROR_NOT_OBJECT "​address"​ 
 +null 
 +"​Jessica"​ 
 +"​mobile"​ 
 +PUT_ERROR_INDEX_OUT_OF_RANGE "​children"​ 
 +GET_KEY_NOT_FOUND "​firstName"​ 
 +DEL_INDEX_OUT_OF_RANGE root 
 +"212 555-1234" 
 +"​646 ​555-4567" 
 +GET_KEY_NOT_FOUND "​address"​
  
 +</​code>​
 +</​columns>​
  
  
 ===== Precizari ===== ===== Precizari =====
-Fisierele de test cu obiectele JSON sunt valide.+Fisierele de test cu obiectele JSON sunt valide, nu este nevoie sa faceti verificari suplimentare.
  
  
  
-==== Indicatii de implementare ==== +===== Indicatii de implementare ​===== 
-Maine seara (21 aprilie) vedem ce indicatii dam.+Executabilul vostru se va numi **tema3** si va primi exact 3 parametri: fisierul ​ce contine obiectul JSON, fisierul de input si fisierul de output.
  
  
  
-==== Teste publice ==== +===== Teste publice ​===== 
-TODO+[[http://​ocw.cs.pub.ro/​courses/​_media/​sd-ca/​teme/​sd2015_tema3_checker_v2.zip|Checker]]
  
  
Line 145: Line 197:
 Arhiva trebuie să conțină: Arhiva trebuie să conțină:
   * sursele voastre   * sursele voastre
 +  * Makefile
   * fisier **README** care să conțină detalii despre implementarea temei   * fisier **README** care să conțină detalii despre implementarea temei
 ===== Punctaj ===== ===== Punctaj =====
Line 175: Line 228:
  
 **A:** Se poate folosi clasa string din STL. Folosirea oricărei alte clase din STL **nu este permisă** **A:** Se poate folosi clasa string din STL. Folosirea oricărei alte clase din STL **nu este permisă**
- 
sd-ca/teme/teme-03.1429543510.txt.gz · Last modified: 2015/04/20 18:25 by razvan_madalin.matei
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0