This shows you the differences between two versions of the page.
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> | ||