Differences

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

Link to this comparison view

si:teme2022:tema2 [2022/12/11 16:48]
florin.stancu
si:teme2022:tema2 [2023/12/12 12:00] (current)
florin.stancu old revision restored (2023/01/13 22:44)
Line 2: Line 2:
  
 * **Publicare**:​ * **Publicare**:​
-  * **11 Decembrie 2022 //17:30//**+  * **11 Decembrie 2022 //17:50//**
  
 * **Termen de predare**: * **Termen de predare**:
-  * <color red>**14 Ianuarie 2023 23:55** - deadline HARD</​color>​+  * <color red>**15 Ianuarie 2023 23:55** - deadline HARD</​color>​
  
 * **Changelog:​** * **Changelog:​**
-  * //nothing, yet//+  * //**14 Ianuarie 2023 22:30**// - mărit deadline-ul până duminica ;) 
 +  * //**13 Ianuarie 2023 11:15**// - corectat numele fișierelor:​ ''​url.txt''​ + ''​checksum.txt''​ (CU extensie). 
 +  * //**05 Ianuarie 2023 13:40**// - reparat RESTful endpoints din text să fie ca în scriptul de Python de demo.
  
 <​note>​ <​note>​
Line 24: Line 26:
 <note important>​ <note important>​
 Pentru a rezolva tema, este recomandat să folosiți [[https://​github.com/​cs-pub-ro/​SI-Lab-VM/​releases/​|mașina virtuală Yocto 2022 (~22GB)]] cu distribuția Yocto gata compilată și cache-uită,​ altfel timpul de compilare pe un laptop modest poate fi chiar și de 10 ore! Pentru a rezolva tema, este recomandat să folosiți [[https://​github.com/​cs-pub-ro/​SI-Lab-VM/​releases/​|mașina virtuală Yocto 2022 (~22GB)]] cu distribuția Yocto gata compilată și cache-uită,​ altfel timpul de compilare pe un laptop modest poate fi chiar și de 10 ore!
-Puteți lucra în paralel cu laboratorul pe aceiași mașină (veți folosi descriptori de ''​kas (yml)''​ din fișiere diferite + layere separate). +Puteți lucra în paralel cu laboratorul pe aceiași mașină (veți folosi descriptori de ''​kas'' ​(în format ''​yml''​din fișiere diferite + layere separate).
-</​note>​ +
- +
-<note important>​ +
-Work in progress: enunțul / materialele temei sunt în curs de redactare ;)+
 </​note>​ </​note>​
  
 <ifauth @si> <ifauth @si>
- +<color red>CINE VEDE ASTA E ASISTENT ​;) </color
-<color red>CINE VEDE ASTA MAI JOS E ASISTENT:</​color>​+</ifauth>
  
 ===== Storyline / Enunț ===== ===== Storyline / Enunț =====
Line 50: Line 48:
 <a href="​https://​asciinema.org/​a/​YIEhjwqJlYsYrWdD2nsIn4OX7"​ target="​_blank"><​img style="​max-width:​ 300px;"​ src="​https://​asciinema.org/​a/​YIEhjwqJlYsYrWdD2nsIn4OX7.svg"​ /></​a>​ <a href="​https://​asciinema.org/​a/​YIEhjwqJlYsYrWdD2nsIn4OX7"​ target="​_blank"><​img style="​max-width:​ 300px;"​ src="​https://​asciinema.org/​a/​YIEhjwqJlYsYrWdD2nsIn4OX7.svg"​ /></​a>​
 </​html>​ </​html>​
- 
  
 ===== Cerințe ===== ===== Cerințe =====
Line 93: Line 90:
   * Puteți face comunicarea între cele 2 procese (program TUI + server HTTP) prin orice mecanism vă pune Linux / limbajul la dispoziție (unix pipes, sockeți, RPC framework al limbajului, sistem de fișiere -- însă aici veți avea de furcă la notificarea schimbărilor :P);   * Puteți face comunicarea între cele 2 procese (program TUI + server HTTP) prin orice mecanism vă pune Linux / limbajul la dispoziție (unix pipes, sockeți, RPC framework al limbajului, sistem de fișiere -- însă aici veți avea de furcă la notificarea schimbărilor :P);
   * Acest program trebuie **OBLIGATORIU** să se numească ''​christmas-tree''​ și să fie în ''​PATH''​ (rulabil direct prin acest nume într-un terminal)! Acesta va fi pornit automat, prin ''​ssh'',​ pentru testare facilă!   * Acest program trebuie **OBLIGATORIU** să se numească ''​christmas-tree''​ și să fie în ''​PATH''​ (rulabil direct prin acest nume într-un terminal)! Acesta va fi pornit automat, prin ''​ssh'',​ pentru testare facilă!
-  * Cât despre design-ul pomului / elementelor afișate, aveți libertate deplină (cât timp se înțelege ce este și luminițele ​are câteva ​culori :D);+  * Cât despre design-ul pomului / elementelor afișate, aveți libertate deplină (cât timp se înțelege ce este și luminițele ​au culori :D);
  
  
Line 126: Line 123:
 Astfel, se definesc următoarele endpointuri RESTful HTTP (atenție: API-ul este strict!): Astfel, se definesc următoarele endpointuri RESTful HTTP (atenție: API-ul este strict!):
   * ''​GET /​api/​groups'':​ va întoarce un obiect JSON cu proprietatea ''​NG''​ (numărul de grupuri disponibile),​ e.g.: ''​{"​NG":​ 3}'';​   * ''​GET /​api/​groups'':​ va întoarce un obiect JSON cu proprietatea ''​NG''​ (numărul de grupuri disponibile),​ e.g.: ''​{"​NG":​ 3}'';​
-  * ''​GET /​api/​group/<​G>/​leds'':​ va întoarce un obiect JSON cu cheila ''​NL'':​ numărul de leduri din grupul curent, și ''​LC'':​ lista actuală de culori ale LED-urilor grupului ''<​G>''​ (fără caracterele ''<>'',​ sunt doar pentru a denota o variabilă),​ e.g., ''​{"​NL":​ 8, "​LC":​ [0, 0, 0, 1, 4, 2, 0, 0]}'';​ +  * ''​GET /​api/​group/<​G>/​state'':​ va întoarce un obiect JSON cu cheila ''​NL'':​ numărul de leduri din grupul curent, și ''​LC'':​ lista actuală de culori ale LED-urilor grupului ''<​G>''​ (fără caracterele ''<>'',​ sunt doar pentru a denota o variabilă),​ e.g., ''​{"​NL":​ 8, "​LC":​ [0, 0, 0, 1, 4, 2, 0, 0]}'';​ 
-  * ''​POST /​api/​group/<​G>/​static'':​ va primi un obiect JSON cu o singură cheie: ''​SC''​ cu valoarea: o listă (JSON Array) de culori pentru fiecare LED din grupul ''<​G>'',​ și va întoarce OK (HTTP 200); desigur, aceste noi setări trebuiesc propagate către aplicația de terminal ce redă ASCII Art-ul;+  * ''​POST /​api/​group/<​G>/​static'':​ va primi un obiect JSON cu o singură cheie: ''​LC''​ cu valoarea: o listă (JSON Array) de culori pentru fiecare LED din grupul ''<​G>'',​ și va întoarce OK (HTTP 200); desigur, aceste noi setări trebuiesc propagate către aplicația de terminal ce redă ASCII Art-ul;
   * ''​POST /​api/​group/<​G>/​animate''​ [**BONUS**]:​ va primi un obiect cu o cheie, ''​MC''​ care conține o matrice de culori pentru fiecare pas al animației, apoi pentru fiecare LED din grupul ''<​G>''​ și va întoarce OK (HTTP 200); tranzițiile vor fi făcute la fiecare secundă și va fi repetată automat până la revenirea la cazul simplu (cererea de mai sus); exemplu de mutare a culorilor asupra tuturor pozițiilor dintr-un grup: <​code>​   * ''​POST /​api/​group/<​G>/​animate''​ [**BONUS**]:​ va primi un obiect cu o cheie, ''​MC''​ care conține o matrice de culori pentru fiecare pas al animației, apoi pentru fiecare LED din grupul ''<​G>''​ și va întoarce OK (HTTP 200); tranzițiile vor fi făcute la fiecare secundă și va fi repetată automat până la revenirea la cazul simplu (cererea de mai sus); exemplu de mutare a culorilor asupra tuturor pozițiilor dintr-un grup: <​code>​
 [ [
Line 152: Line 149:
 ===== Helpers + Mașină virtuală ===== ===== Helpers + Mașină virtuală =====
  
-Ca și punct de pornire, puteți descărca un {{si:​teme2022:​si-tema2-skel-TODO.tar.gz|schelet inițial cu scripturi + structură recomandată}} (**v0.1**).+Ca și punct de pornire, puteți descărca un {{si:​teme2022:​si-tema2-skel-2022-0-1.tar.gz|schelet inițial cu scripturi + structură recomandată}} (**v0.1**).
 Aceasta conține: Aceasta conține:
-  * script de make pentru generarea arhivelor cerute;+  * Makefile ​pentru generarea arhivelor cerute ​(înlocuiți-l pe cel de acum din VM, este inutil :D);
   * script de rulare qemu pe host (folosit pentru rularea directă a imaginii de distribuit, fără Yocto);   * script de rulare qemu pe host (folosit pentru rularea directă a imaginii de distribuit, fără Yocto);
   * un fișier descriptor pentru //kas// diferit de cel din laborator (numit ''​tema2.yml''​);​   * un fișier descriptor pentru //kas// diferit de cel din laborator (numit ''​tema2.yml''​);​
   * un script de testat endpointul RESTful (+ exemplu utilizare API) folosind python (''​test.py''​);​   * un script de testat endpointul RESTful (+ exemplu utilizare API) folosind python (''​test.py''​);​
-  * un README.skel pe care ar fi util să-l citiți ;)+  * un README.skel.txt pe care ar fi util să-l citiți ;)
   * **Important:​** citiți codul sursă al scripturilor și verificați (e.g., căile) să fie adecvate setup-ului vostru!   * **Important:​** citiți codul sursă al scripturilor și verificați (e.g., căile) să fie adecvate setup-ului vostru!
  
 Recomandarea de co-existență pentru tema2 + laborator folosind același VM cu Yocto: fișierele kas cu denumiri diferite (''​tema2.yml''​ vs ''​kas.yml''​) ce vor importa seturi diferite de layere (desigur, cele de bază vor rămâne, însă se recomandă crearea unui layer numit ''​meta-tema2''​ și să creați în interiorul lui configurațiile / pachetele necesare tuturor task-urilor). Recomandarea de co-existență pentru tema2 + laborator folosind același VM cu Yocto: fișierele kas cu denumiri diferite (''​tema2.yml''​ vs ''​kas.yml''​) ce vor importa seturi diferite de layere (desigur, cele de bază vor rămâne, însă se recomandă crearea unui layer numit ''​meta-tema2''​ și să creați în interiorul lui configurațiile / pachetele necesare tuturor task-urilor).
- 
-<​note>​ 
- 
-</​note>​ 
  
 <​note>​ <​note>​
Line 175: Line 168:
  
 Soluția temei va fi trimisă în două moduri (vă rugăm să respectați convențiile de denumire cu exactitate!):​ Soluția temei va fi trimisă în două moduri (vă rugăm să respectați convențiile de denumire cu exactitate!):​
-  * **arhivă cu codul sursă** + Readme + hash și alte metainformații (vedeți mai jos) -> pe Moodle+  * **arhivă cu codul sursă** + Readme + hash și alte metainformații (vedeți mai jos) -> [[https://​curs.upb.ro/​2022/​mod/​assign/​view.php?​id=102647|pe Moodle]]
   * **arhivă cu binarele / imaginea rulabilă** -> le urcați pe [[https://​ctipub-my.sharepoint.com|OneDrive / Sharepoint-ul UPB]] și dați share prin Link Public (pe care ni-l trimiteți doar nouă în fișierul ''​url.txt''​).   * **arhivă cu binarele / imaginea rulabilă** -> le urcați pe [[https://​ctipub-my.sharepoint.com|OneDrive / Sharepoint-ul UPB]] și dați share prin Link Public (pe care ni-l trimiteți doar nouă în fișierul ''​url.txt''​).
  
 **Arhiva cu binarele** (''​.tar.gz''​ pls) trebuie să conțină (de preferat să folosiți strict aceste denumiri de fișiere): **Arhiva cu binarele** (''​.tar.gz''​ pls) trebuie să conțină (de preferat să folosiți strict aceste denumiri de fișiere):
   * ''​rootfs.img'':​ imaginea partiției rootfs în format RAW utilizabil de qemu (ori partiția ext4, ori disk image);   * ''​rootfs.img'':​ imaginea partiției rootfs în format RAW utilizabil de qemu (ori partiția ext4, ori disk image);
-  * ''​kernel-*'':​ binarul kernel-ului compatibil cu QEMU (scheletul îl copiază automat din cache-ul Yocto); +  * ''​kernel'':​ binarul kernel-ului compatibil cu QEMU (scheletul îl copiază automat din cache-ul Yocto); 
-  * ''​versatile-pb.dtb''​ sau orice alt device tree blob (dacă sunt necesare pentru rulare în Qemu); +  * ''​launch_bin.sh'':​ script de pornire QEMU (vedeți scheletul dat);
-  * ''​launch.sh'':​ script de pornire QEMU (vedeți scheletul dat);+
   * Dacă doriți să ne prezentați alt scenariu demonstrativ (decât cel inclus în schelet), includeți un script numit ''​test.py''​.   * Dacă doriți să ne prezentați alt scenariu demonstrativ (decât cel inclus în schelet), includeți un script numit ''​test.py''​.
   * **NU INCLUDEȚI**:​ directorul build cache al yocto (yep, acela de > 20GB!);   * **NU INCLUDEȚI**:​ directorul build cache al yocto (yep, acela de > 20GB!);
Line 190: Line 182:
   * scripturile proprii de Yocto (layer, rețete, fișier ''​yml''​ pentru ''​kas''​) + sursele aplicației (în orice limbaje ați ales);   * scripturile proprii de Yocto (layer, rețete, fișier ''​yml''​ pentru ''​kas''​) + sursele aplicației (în orice limbaje ați ales);
   * fișier ''​README.txt''​ cu explicații referitoare la funcționarea soluției, configurații speciale de optimizare folosite etc.   * fișier ''​README.txt''​ cu explicații referitoare la funcționarea soluției, configurații speciale de optimizare folosite etc.
-  * fișier ''​url.txt'' ​(fără extensie!) ​cu URL către arhiva **.tar.gz** a binarelor;​ +  * fișier ''​url.txt''​ cu URL către arhiva **.tar.gz** a binarelor;​ 
-  * fișier ''​checksum.txt'' ​(fără extensie!) ​care să conțină hash-ul SHA256 al arhivei cu binarele (obținut cu ''​sha256sum''​);​ **ATENȚIE**:​ verificați și re-verificați (de încă 2 ori) conținutul fișierului la încărcare pe Moodle cu hash-ul real deoarece tema nu va fi punctată dacă diferă!+  * fișier ''​checksum.txt''​ care să conțină hash-ul SHA256 al arhivei cu binarele (obținut cu ''​sha256sum''​);​ **ATENȚIE**:​ verificați și re-verificați (de încă 2 ori) conținutul fișierului la încărcare pe Moodle cu hash-ul real deoarece tema nu va fi punctată dacă diferă!
   * **NU INCLUDEȚI**:​ fișiere sursă ale Poky / alte layere Yocto / biblioteci / frameworkuri descărcabile de pe Internet (menționați în Readme ce ați folosit); puteți include bblayers.conf și local.conf dacă le-ați modificat manual (în afara ''​kas''​).   * **NU INCLUDEȚI**:​ fișiere sursă ale Poky / alte layere Yocto / biblioteci / frameworkuri descărcabile de pe Internet (menționați în Readme ce ați folosit); puteți include bblayers.conf și local.conf dacă le-ați modificat manual (în afara ''​kas''​).
 +  * **Hint**: pentru a include un fișier la crearea automată a arhivei prin ''​make source_archive'',​ pur și simplu copiați-l pe rădăcină (sau într-un director care nu este ignorat -- verificați Makefile-ul din schelet)!
   * Această arhivă nu ar trebui să depășească ''​1MB''​ (aveți restricție pe Moodle).   * Această arhivă nu ar trebui să depășească ''​1MB''​ (aveți restricție pe Moodle).
  
Line 223: Line 216:
   * Tema are deadline **HARD** (nu mai sunt admise soluții după expirare), așadar se recomandă să vă apucați din timp de rezolvarea acesteia!   * Tema are deadline **HARD** (nu mai sunt admise soluții după expirare), așadar se recomandă să vă apucați din timp de rezolvarea acesteia!
   * :!: **ATENȚIE**:​ orice formă de plagiat nu va fi permisă și va duce la depunctare totală / restanță / //that which must not be named, the E-word//!   * :!: **ATENȚIE**:​ orice formă de plagiat nu va fi permisă și va duce la depunctare totală / restanță / //that which must not be named, the E-word//!
-  * Pe Moodle găsiți și [[TODO|un forum]] ;) La fel pe Teams, avem un canal de discuții.+  * Pe Moodle găsiți și [[https://​curs.upb.ro/​2022/​mod/​forum/​view.php?​id=102648|un forum]] ;) La fel pe Teams, avem un canal de discuții.
  
 ===== Resurse ===== ===== Resurse =====
Line 230: Line 223:
   * [[:​si:​laboratoare:​07]]   * [[:​si:​laboratoare:​07]]
   * [[https://​asciinema.org/​a/​YIEhjwqJlYsYrWdD2nsIn4OX7|Exemplu de pom ASCII]]   * [[https://​asciinema.org/​a/​YIEhjwqJlYsYrWdD2nsIn4OX7|Exemplu de pom ASCII]]
- 
-</​ifauth>​ 
  
  
si/teme2022/tema2.1670770083.txt.gz · Last modified: 2022/12/11 16:48 by florin.stancu
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