This shows you the differences between two versions of the page.
si:teme2022:tema2 [2022/12/11 17:49] florin.stancu |
si:teme2022:tema2 [2023/12/12 12:00] (current) florin.stancu old revision restored (2023/01/13 22:44) |
||
---|---|---|---|
Line 5: | Line 5: | ||
* **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> | ||
<ifauth @si> | <ifauth @si> | ||
- | <color red>CINE VEDE ASTA MAI JOS E ASISTENT:</color> | + | <color red>CINE VEDE ASTA E ASISTENT ;) </color> |
</ifauth> | </ifauth> | ||
Line 46: | 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 89: | 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 122: | 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 167: | 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''). | ||
Line 173: | Line 174: | ||
* ''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_bin.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''. | ||
Line 182: | 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 215: | 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 ===== |