Narzędzia użytkownika

Narzędzia witryny


sk2:projekt

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
sk2:projekt [2024/11/05 00:09]
jkonczak
sk2:projekt [2025/11/03 21:47] (aktualna)
jkonczak
Linia 1: Linia 1:
-====== SK2 – projekt zaliczeniowy z programowania (2024/2025) ======+====== SK2 – projekt zaliczeniowy z programowania (2025/2026) ======
 Do zaliczenia pierwszej części laboratoriów (programowanie) należy zrealizować projekt __ustalony z prowadzącym__. Do zaliczenia pierwszej części laboratoriów (programowanie) należy zrealizować projekt __ustalony z prowadzącym__.
  
Linia 6: Linia 6:
 __Przykładowe__ tematy projektów: __Przykładowe__ tematy projektów:
 <​html><​div style="​margin:​ -1.2em 0 0 0"/></​html>​ <​html><​div style="​margin:​ -1.2em 0 0 0"/></​html>​
-  - Ciągła synchronizacja katalogów – program który dba o to, by zawartość katalogu u wszystkich klientów była taka sama. Zmiany są wykrywane natychmiastowo. Współbieżne zmiany są wykrywane i właściwie obsłużone. 
-  - Job scheduler – prosty system kolejkowy: w serwerze rejestrują się węzły obliczeniowe,​ do serwera klienci wysyłają zadania do wykonania na węzłach (por. [[https://​en.wikipedia.org/​wiki/​Job_scheduler|job scheduler]],​ [[https://​en.wikipedia.org/​wiki/​Slurm_Workload_Manager|slurm]]). 
-  - Reliable UDP multicast – biblioteka / protokół do realizacji niezawodnego przesyłania danych z użyciem UDP multicastu i użycie jej do budowy przykładowego programu (np. wysyłanie pliku). 
-  - Grupowy edytor grafiki wektorowej – serwer i klient programu, który pozwoli kilku osobom naraz pracować nad grafiką wektorową. Współbieżne operacje na tym samym obiekcie mają być obsłużone w praktyczny sposób. 
-  - Sieciowa gra turowa – dowolna gra turowa zmodyfikowana o to, że zamiast jednego gracza ruchy ma podejmować grupa graczy głosując na najlepszy ruch. Wymagane GUI. 
   - Wieloosobowa gra czasu rzeczywistego – dowolna gra w którą da się grać w więcej niż dwie osoby. Przykłady gier na których można się wzorować: [[https://​archive.org/​details/​msdos_Jump_n_Bump_1998|jump 'n bump]], [[https://​classicreload.com/​bomberman.html|dyna blaster]], [[https://​archive.org/​details/​CometBusters14Image|asteroids]].   - Wieloosobowa gra czasu rzeczywistego – dowolna gra w którą da się grać w więcej niż dwie osoby. Przykłady gier na których można się wzorować: [[https://​archive.org/​details/​msdos_Jump_n_Bump_1998|jump 'n bump]], [[https://​classicreload.com/​bomberman.html|dyna blaster]], [[https://​archive.org/​details/​CometBusters14Image|asteroids]].
-  - "​Zręcznościowa"​ gra karciana / planszowa w której wiele osób naraz może wykonać ruch – np. dobble, jungle speed. Wymagane GUI+  - "​Zręcznościowa"​ gra karciana / planszowa w której wiele osób naraz może wykonać ruch – np. dobble, jungle speed. 
-  - Quiz / gra państwa-miasta premiująca czas i unikalność odpowiedzi – gra po odpowiedzi od połowy graczy (lub upłynięciu czasu) generuje nowe pytanie. Przy nowym pytaniu serwer na podstawie poprawności,​ czasu odpowiedzi i odpowiedzi innych graczy przyznaje punkty i pokazuje odpowiedzi. Gracz może dołączyć w dowolnej chwili do gry. Wymagane GUI+  - Quiz / gra państwa-miasta premiująca czas i unikalność odpowiedzi – gra po odpowiedzi od połowy graczy (lub upłynięciu czasu) generuje nowe pytanie. Przy nowym pytaniu serwer na podstawie poprawności,​ czasu odpowiedzi i odpowiedzi innych graczy przyznaje punkty i pokazuje odpowiedzi. Gracz może dołączyć w dowolnej chwili do gry. 
-  - Kahoot – serwer do którego można połączyć się w celu stworzenia quizu (na końcu tworzenia quizu otrzymuje się kod) lub z kodem, w celu wzięcia udziału w quizie. Serwer obsługuje wiele quizów naraz. Twórca po przygotowaniu i wystartowaniu quizu widzi na bieżąco jakie odpowiedzi udzielają uczestnicy. Uczestnicy widzą przynajmniej wzajemną punktację. Czas na pytanie kończy się po udzieleniu odpowiedzi przez 2/3 graczy, chyba że wcześniej minie limit czasu na pytanie. Wymagane GUI+  - Kahoot – serwer do którego można połączyć się w celu stworzenia quizu (na końcu tworzenia quizu otrzymuje się kod) lub z kodem, w celu wzięcia udziału w quizie. Serwer obsługuje wiele quizów naraz. Twórca po przygotowaniu i wystartowaniu quizu widzi na bieżąco jakie odpowiedzi udzielają uczestnicy. Uczestnicy widzą przynajmniej wzajemną punktację. Czas na pytanie kończy się po udzieleniu odpowiedzi przez 2/3 graczy, chyba że wcześniej minie limit czasu na pytanie. 
-  - Wisielec – gracze ​wspólnie ​odgadują litery ​tego samego hasł– kto pierwszy ten lepszy, ale każdy gracz ma własnego ​wisielca. Gracze widzą swoje wisielce nawzajem. Za odgadniętą literę gracz dostaje punkt. Gra kończy się gdy zostanie jeden aktywny gracz. Wymagane GUI+  - Wisielec – gracze ​razem odgadują litery ​kolejnych haseł – kto pierwszy ten lepszy, ale każdy gracz ma osobnego ​wisielca. Gracze widzą swoje wisielce nawzajem. Wszyscy widzą te same odsłonięte litery właśnie odgadywanego hasła. Za odgadniętą literę gracz dostaje punkt. Gra kończy się gdy zostanie jeden aktywny gracz. 
-  - Układanie słów – serwer co rundę losuje określoną ilość liter i przesyła je graczom. Gracze wysyłają do serwera słowa ​z podanych liter. Gracz który podał jako pierwszy ​dające się ułożyć słowo dostaje punkty. Za słowo które nie daje się ułożyć z liter gracz traci punkty. Po określonym czasie serwer rozpoczyna następną rundę. Gracze widzą na bieżąco ranking z ilością punktów i wszystkie ​ułożone słowa z poprzedniej rundyWymagane ​GUI. +  - Układanie słów – serwer co rundę losuje określoną ilość liter i przesyła je graczom. Gracze wysyłają do serwera ​kolejne ​słowa dające się ułożyć ​z podanych liter. Gracz który podał jako pierwszy konkretne ​słowo dostaje punkty. Za słowo które nie daje się ułożyć z liter gracz traci punkty. Po określonym czasie serwer rozpoczyna następną rundę. Gracze widzą na bieżąco ranking z ilością punktów i dotychczas ​ułożone słowa
-  - Publish–subscribe message queue – message broker (serwer), współdzielona biblioteka ​klienta i demonstracyjny program używający tej biblioteki. Klient może tworzyć kolejki, wysyłać do nich wiadomości i zapisywać się do odbioru wiadomości z kolejki. Kolejki wspierają wielu konsumentów,​ wiadomości mają określony czas ważności (por. [[https://​en.wikipedia.org/​wiki/​Message_queue|message queue]]). +  - Sieciowa gra turowa – dowolna gra turowa zmodyfikowana o to, że zamiast jednego gracza ruchy ma podejmować grupa graczy głosując na najlepszy ruch. 
-  - HTTP caching proxy – proxy serwujące najczęściej pobierane strony z własnej pamięci (przykład programu – [[http://​www.squid-cache.org/​|squid]]). Proxy ma redukować ruch (obsługa etag, if-modified-since,​ współbieżne żądania o tą samą stronę generują jedno zapytanie). +  - Grupowy edytor grafiki wektorowej – serwer i klient programu, który pozwoli kilku osobom naraz pracować nad grafiką wektorową. Współbieżne operacje na tym samym obiekcie (np. zmiana rozmiaru i zmiana koloru) mają być sensownie obsłużone. 
-  - Radio internetowe – serwer ma kolejkę plików dźwiękowych,​ które kolejno strumieniuje do wszystkich podłączonych klientów. Klienci mogą wgrywać na serwer ​nowe pliki, widzą bieżący stan kolejki i mogą wykonywać dowolne operacje ​na niej, mogą też zlecić przeskoczenie do następnego pliku z kolejki. Wymagane ​GUI.+  - Radio internetowe – serwer ma kolejkę plików dźwiękowych,​ które kolejno strumieniuje do wszystkich podłączonych klientów. Klienci mogą wgrywać na serwer nowe pliki, widzą bieżący stan kolejki i mogą wykonywać dowolne operacje na niej, mogą też zlecić przeskoczenie do następnego pliku kolejki. 
 +  - Ciągła synchronizacja katalogów – program który dba o to, by zawartość katalogu (rekurencyjnie) u wszystkich klientów była taka sama. Zmiany są wykrywane natychmiastowo. Współbieżne zmiany są wykrywane i właściwie obsłużone. W tym projekcie można nie robić GUI. 
 +  - Job scheduler – prosty system kolejkowy: w serwerze rejestrują się węzły obliczeniowe,​ do serwera klienci wysyłają zadania do wykonania na węzłach (por. [[https://​en.wikipedia.org/​wiki/​Job_scheduler|job scheduler]],​ [[https://​en.wikipedia.org/​wiki/​Slurm_Workload_Manager|slurm]]). Tutaj trzeba napisać serwer, klienta będącego węzłem i klienta będącego zlecającym zadanie. W tym projekcie można nie robić GUI. 
 +  - Reliable UDP multicast – biblioteka / protokół do realizacji niezawodnego przesyłania danych z użyciem UDP multicastu i użycie jej do budowy przykładowego programu (np. wysyłanie pliku). W tym projekcie można nie robić ​GUI. 
 +  - Publish–subscribe message queue. Tutaj trzeba napisać trzy składniki ​– message broker (serwer), ​[[https://​pl.wikipedia.org/​w/​index.php?​title=Biblioteka_programistyczna|współdzieloną bibliotekę]] ​klienta i demonstracyjny program używający tej biblioteki. Klient może tworzyć kolejki, wysyłać do nich wiadomości i zapisywać się do odbioru wiadomości z kolejki. Kolejki wspierają wielu konsumentów,​ wiadomości mają określony czas ważności (por. [[https://​en.wikipedia.org/​wiki/​Message_queue|message queue]]). W tym projekcie można nie robić GUI
 +  - HTTP(S) caching proxy – proxy serwujące najczęściej pobierane strony z własnej pamięci (przykład programu – [[http://​www.squid-cache.org/​|squid]]). Proxy ma redukować ruch (obsługa etag, if-modified-since,​ współbieżne żądania o tą samą stronę generują jedno zapytanie). ​W tym projekcie należy napisać tylko serwer ​i można nie robić GUI.
   - Inny projekt, uzgodniony z prowadzącym.   - Inny projekt, uzgodniony z prowadzącym.
  
Linia 25: Linia 25:
 Więcej pomysłów na projekty można znaleźć na stronach pozostałych prowadzących:​ Więcej pomysłów na projekty można znaleźć na stronach pozostałych prowadzących:​
 <​html><​div style="​margin:​ -1.2em 0 0 0"/></​html>​ <​html><​div style="​margin:​ -1.2em 0 0 0"/></​html>​
-  * http://​www.cs.put.poznan.pl/​ddwornikowski/​courses/​projekty_sieci2_2015.html 
   * http://​www.cs.put.poznan.pl/​mkalewski/​files/​zadania.pdf / https://​www.cs.put.poznan.pl/​mkalewski/​edu/​sk/​doc/​zadania.pdf   * http://​www.cs.put.poznan.pl/​mkalewski/​files/​zadania.pdf / https://​www.cs.put.poznan.pl/​mkalewski/​edu/​sk/​doc/​zadania.pdf
-  * http://​www.cs.put.poznan.pl/​jkonczak/​misc/​lukasz_tematy_projektow.pdf [projekty Łukasza Piątkowskiego,​ cached] 
-  * http://​www.cs.put.poznan.pl/​ksiek/​sk2/​zadania.html 
   * http://​www.cs.put.poznan.pl/​mboron/​prez/​zasady_projektow.pdf   * http://​www.cs.put.poznan.pl/​mboron/​prez/​zasady_projektow.pdf
 +  * http://​www.cs.put.poznan.pl/​agodzinski/​project_2022.html
 +  * [[https://​web.archive.org/​web/​20190914225318/​http://​www.cs.put.poznan.pl/​ddwornikowski/​courses/​projekty_sieci2_2015.html|http://​www.cs.put.poznan.pl/​ddwornikowski/​courses/​projekty_sieci2_2015.html]]
 +  * http://​www.cs.put.poznan.pl/​ksiek/​sk2/​zadania.html
 +  * http://​www.cs.put.poznan.pl/​jkonczak/​misc/​lukasz_tematy_projektow.pdf [projekty Łukasza Piątkowskiego,​ cached]
 </​small>  ​ </​small>  ​
  
- 
-**Warunki które musi spełniać temat projektu:** 
-<​html><​div style="​margin:​ -1.2em 0 0 0"/></​html>​ 
-  - **interakcja klientów ze sobą: projektu nie da się zrealizować tworząc izolowany wątek / proces dla każdego klienta,** 
-  - **konieczność obsłużenia wielu klientów naraz: serwer przez większość czasu może otrzymać wiadomość od więcej niż jednego klienta i kolejność (lub czas) otrzymania wiadomości ma znaczenie,​** 
-  - **konieczność rozwiązania konfliktów:​ w trakcie działania mogą pojawiać się sytuacje, gdzie poprawna wiadomość od klienta jest niepoprawna / niespójna / sprzeczna dla serwera.** 
-  ​ 
 <​small>​ <​small>​
-Nieakceptowalne tematy projektów ze względu na temat nie mający ​wymaganej złożoności sieciowej:+Nieakceptowalne tematy projektów ze względu na brak wymaganej złożoności sieciowej:
 <​html><​div style="​margin:​ -1.2em 0 0 0"/></​html>​ <​html><​div style="​margin:​ -1.2em 0 0 0"/></​html>​
   * Prosty komunikator internetowy.   * Prosty komunikator internetowy.
Linia 46: Linia 40:
   * Gra w której kolejność ruchów graczy jest z góry znana, a opuszczenie gry przez gracza jest równoznaczne z końcem rozgrywki.   * Gra w której kolejność ruchów graczy jest z góry znana, a opuszczenie gry przez gracza jest równoznaczne z końcem rozgrywki.
   * Kółko i krzyżyk.   * Kółko i krzyżyk.
-  * Zwykły pong.+  * Pong.
 </​small>​ </​small>​
- 
-===== Użyteczność! ===== 
- 
-W związku z powtarzającymi się co roku pytaniami: proponowane programy mają posiadać cechę zwaną po polsku [[https://​pl.wikipedia.org/​wiki/​U%C5%BCyteczno%C5%9B%C4%87_(informatyka)|użytecznością]] (ang: [[https://​en.wikipedia.org/​wiki/​Usability|useability]]).\\ 
-Podsumowując:​ program ma wygodnie działać w normalnych (a nie tylko laboratoryjnych) warunkach. W szczególności:​ 
-<​html><​div style="​margin:​ -1.2em 0 0 0"/></​html>​ 
-  * **ma działać w sieciach rozległych (przez internet) – czyli obsługiwać opóźnienia,​ brak informacji zwrotnej z funkcji ''​connect''​ (firewall), zerwanie połączenia,​ etc.,** 
-  * **ma uwzględniać że użytkownicy mogą się dowolnie łączyć, rozłączać (np. w trakcie kiedy serwer wykonuje na ich rzecz działanie),​ nie robić nic (np. nie udzielać odpowiedzi w quizie / kahoocie),​** 
-  * jeśli program ma parametry konfiguracyjne,​ to powinny być konfigurowalne a nie ustawione na sztywno w kodzie; proszę się też zastanowić co użytkownik może chcieć ustawić (i pozwolić mu na to), 
-  * dla niewielu często zmienianych parametrów wystarczy linia poleceń, w innym przypadku proszę używać plików konfiguracyjnych,​ 
-  * serwer musi nasłuchiwać na dowolnym adresie IP, a klient musi mieć możliwość wyboru adresu IP serwera bez ponownej kompilacji 
-  * w interaktywnych projektach (edytor grafiki, gra) klienci mają widzieć co się dzieje (np. ktoś przesuwa figurę na rysunku, inny gracz oddał głos na ruch), w projektach gdzie klient widzi stan serwera (job scheduler, dropbox) zmiany stanu mają mu być pokazywane bez konieczności odpytywania (np. klient widzi że jego zadanie się skończyło,​ każda zmiana pliku jest bez zbędnej zwłoki synchronizowana a konflikty zgłaszane),​ 
-  * nie można wymagać wszechwiedzy od komponentów systemu: np. w job schedulerze klient nie będzie wiedział znikąd gdzie są maszyny obliczeniowe,​ od użytkowników komunikatorów internetowych nie należy wymagać znajomości adresu serwera (zamiast tego można przykładowo dostarczyć z aplikacją plik konfiguracyjny). 
  
 ===== Ogólne zasady i uwagi ===== ===== Ogólne zasady i uwagi =====
Linia 67: Linia 48:
   * **Uzgodnieniu projektu = mail do mnie z opisem projektu + moja odpowiedź OK.**   * **Uzgodnieniu projektu = mail do mnie z opisem projektu + moja odpowiedź OK.**
   * Opis projektu najlepiej zrobić w postaci krótkiego przypadku użycia (use case [[https://​pl.wikipedia.org/​wiki/​Przypadek_użycia|[1]]]) z zaznaczoną rolą serwera i klienta. \\ Opis projektu można też wykonać w sposób podobny jak na stronie z propozycjami projektów Konrada Sieka [[http://​www.cs.put.poznan.pl/​ksiek/​sk2/​zadania.html|[2]]]. \\ **[[projekt_przykladowy_opis|Przykład opisu projektu]].**   * Opis projektu najlepiej zrobić w postaci krótkiego przypadku użycia (use case [[https://​pl.wikipedia.org/​wiki/​Przypadek_użycia|[1]]]) z zaznaczoną rolą serwera i klienta. \\ Opis projektu można też wykonać w sposób podobny jak na stronie z propozycjami projektów Konrada Sieka [[http://​www.cs.put.poznan.pl/​ksiek/​sk2/​zadania.html|[2]]]. \\ **[[projekt_przykladowy_opis|Przykład opisu projektu]].**
-  * **W każdym projekcie serwer ma być pisany w C/C++ z użyciem BSD socket API do obsługi sieci.** 
-  * <​small>​ Klient może być pisany w dowolnym języku, serwer (poza obsługą sieci) może korzystać z dowolnych bibliotek, ale: działający projekt musi być zaprezentowany w laboratorium,​ instalację egzotycznych bibliotek i kompilatorów na komputerach laboratoryjnych przeprowadzacie we własnym zakresie.</​small>​ 
-  * Programy mają się kompilować bez ostrzeżeń (dla kodu w C/C++ z flagami kompilatora ''​-Wall -Wextra''​). 
-  * Kod ma się pojawiać na repozytorium GIT: https://​git.cs.put.poznan.pl/​ [lub innym dostępnym dla prowadzącego]. 
-  * Kod będzie testowany analizatorami statycznymi (np. cppcheck, [[https://​clang-analyzer.llvm.org/​scan-build.html|clang]]),​ wykonanie – dynamicznymi (np. valgrind). 
-  * **Projekt musi dać się łatwo zbudować – konieczne są pliki systemu budowania** [[https://​en.wikipedia.org/​wiki/​Build_automation|[1]]] [[https://​en.wikipedia.org/​wiki/​List_of_build_automation_software|[2]]]. 
-  * Komunikacja klient-serwer ma odbywać się z wykorzystaniem protokołu TCP, chyba że temat projektu stanowi inaczej lub uzgodniono z prowadzącym użycie innych protokołów. 
-  * Liczba klientów nie może być sztucznie ograniczona. Jeśli np. liczba graczy jest ograniczona przez zasady gry, to należy umożliwić wiele gier na serwerze. (Po uzgodnieniu z prowadzącym można uchylić to wymaganie, np. dla gier czasu rzeczywistego). 
   * Tematy projektów mogą się powtarzać. Każda grupa musi przygotować własny opis projektu.   * Tematy projektów mogą się powtarzać. Każda grupa musi przygotować własny opis projektu.
   * Około miesiąc przed terminem oddania projektu (datę podam później) będę przeglądał kod źródłowy projektów. Przegląd kodu ma pomóc w poprawieniu jakości kodu i eliminacji błędów które się w nim zdążyły pojawić.   * Około miesiąc przed terminem oddania projektu (datę podam później) będę przeglądał kod źródłowy projektów. Przegląd kodu ma pomóc w poprawieniu jakości kodu i eliminacji błędów które się w nim zdążyły pojawić.
  
 +===== Wymagania =====
 +  ​
 +**Warunki które musi spełniać każdy projekt (i które muszą wynikać z wysłanego opisu):**
 +<​html><​div style="​margin:​ -1.2em 0 0 0"/></​html>​
 +  * **Interakcja klientów ze sobą: projektu nie da się zrealizować tworząc izolowany wątek / proces dla każdego klienta.**
 +  * **Konieczność obsłużenia wielu klientów naraz: serwer przez większość czasu może otrzymać wiadomość od więcej niż jednego klienta i kolejność (lub czas) otrzymania wiadomości ma znaczenie.**
 +  * **Konieczność rozwiązania konfliktów:​ w trakcie działania mogą pojawiać się sytuacje, gdzie poprawna wiadomość od klienta jest niepoprawna / niespójna / sprzeczna dla serwera.**
 +  ​
 +Języki programowania / biblioteki:
 +<​html><​div style="​margin:​ -1.2em 0 0 0"/></​html>​
 +  * **W każdym projekcie serwer ma być pisany w C/C%%++%% z użyciem BSD socket API do obsługi sieci.**
 +  * <​small>​ Klient może być pisany w dowolnym języku, serwer (poza obsługą sieci) może korzystać z dowolnych bibliotek, ale: działający projekt musi być zaprezentowany w laboratorium,​ instalację egzotycznych bibliotek i kompilatorów na komputerach laboratoryjnych przeprowadzacie we własnym zakresie.</​small>​
 +  ​
 +Sieć i liczba użytkowników:​
 +<​html><​div style="​margin:​ -1.2em 0 0 0"/></​html>​
 +  * **Program ma działać w sieciach rozległych (przez internet) – czyli obsługiwać opóźnienia,​ brak informacji zwrotnej z funkcji ''​connect''​ (firewall), zerwanie połączenia,​ etc.,**
 +  * **Zaimplementowana logika ma uwzględniać że użytkownicy mogą się dowolnie łączyć, rozłączać (np. w trakcie kiedy serwer wykonuje na ich rzecz działanie),​ nie robić nic (np. nie udzielać odpowiedzi w quizie / kahoocie).** \\ <​small>​(W tym wymaganiu chodzi o to, żeby użytkownik łączący się "nie w porę" też dostał sensowny komunikat, a zakończenie / zerwanie / utrata połączenia bądź nieaktywność gracza nie wpłynęła negatywnie na pracę serwera; proszę nie próbować implementować "​powracania"​ rozłączonego użytkownika.)</​small>​
 +  * Komunikacja klient-serwer ma odbywać się z wykorzystaniem protokołu TCP, chyba że temat projektu stanowi inaczej lub uzgodniono z prowadzącym użycie innych protokołów.
 +  * Serwer musi nasłuchiwać na dowolnym adresie IP, a klient musi mieć możliwość wyboru adresu IP serwera bez ponownej kompilacji.
 +  * Liczba klientów nie może być sztucznie ograniczona. Jeśli np. liczba graczy jest ograniczona przez zasady gry, to należy umożliwić wiele gier na serwerze. (Po uzgodnieniu z prowadzącym można uchylić to wymaganie, np. dla gier czasu rzeczywistego.)
 +  ​
 +Rozwój oprogramowania:​
 +  * **Kod ma być rozwijany na repozytorium** https://​git.cs.put.poznan.pl/​ (lub innym, dostępnym dla prowadzącego bez konieczności logowania / posiadania konta w zewnętrznej usłudze).
 +  * **Projekt musi dać się łatwo zbudować – konieczne są pliki systemu budowania** [[https://​en.wikipedia.org/​wiki/​Build_automation|[1]]] [[https://​en.wikipedia.org/​wiki/​List_of_build_automation_software|[2]]].
 +  * Programy powinny kompilować się bez ostrzeżeń (np. dla kodu w C/C%%++%% z flagami kompilatora ''​-Wall -Wextra''​).
 +  * Kod będzie testowany analizatorami statycznymi (np. cppcheck, [[https://​clang.llvm.org/​docs/​analyzer/​user-docs/​CommandLineUsage.html|clang]]),​ wykonanie – dynamicznymi (np. [[https://​valgrind.org/​docs/​manual/​mc-manual.html|valgrind]]).
 +
 +GUI
 +  * Wszystkie projekty wymagają GUI, chyba że w opisie/​temacie zaznaczono inaczej.
 +  * GUI ma działać. Na ocenę projektu nie ma wpływu to jak "​ładne"​ jest GUI.
 +  ​
 ===== Ocenianie ==== ===== Ocenianie ====
  
Linia 89: Linia 93:
   * przyjętych rozwiązań aspektów sieciowych   * przyjętych rozwiązań aspektów sieciowych
   * jakości kodu   * jakości kodu
-  * błędów kompilacji, błędów zarządzania pamięcią, etc.+  * błędów kompilacji, błędów zarządzania pamięcią, błędnej synchronizacji między wątkami, etc.
   * braku spełnienia zasad opisanych na tej stronie (np. terminy, brak plików systemu budowania, brak repozytorium etc.)   * braku spełnienia zasad opisanych na tej stronie (np. terminy, brak plików systemu budowania, brak repozytorium etc.)
 Często powtarzające się błędy które prawie zawsze skutkują obniżeniem oceny: Często powtarzające się błędy które prawie zawsze skutkują obniżeniem oceny:
 <​html><​div style="​margin:​ -1.2em 0 0 0"/></​html>​ <​html><​div style="​margin:​ -1.2em 0 0 0"/></​html>​
   * aktywne czekanie (nieważne czy dla synchronizacji wątków, czy do obsługi sieci)   * aktywne czekanie (nieważne czy dla synchronizacji wątków, czy do obsługi sieci)
 +  * brak dzielenia przychodzących strumieniem TCP danych na logiczne komunikaty
   * wysyłanie nadmiarowych danych przez sieć   * wysyłanie nadmiarowych danych przez sieć
   ​   ​
 ===== Terminy ===== ===== Terminy =====
  
-  * **Tematy projektów należy uzgodnić nie później niż do 30.11.2024.** \\ Przekroczenie tego terminu skutkuje obniżeniem oceny o 0.5.+  * **Tematy projektów należy uzgodnić nie później niż do 30.11.2025.** \\ Przekroczenie tego terminu skutkuje obniżeniem oceny o 0.5.
   * O skończeniu projektu należy poinformować prowadzącego mailowo. Do tego czasu opis projektu musi być zaakceptowany przez prowadzącego i prowadzący musi mieć dostęp do kodu źródłowego.   * O skończeniu projektu należy poinformować prowadzącego mailowo. Do tego czasu opis projektu musi być zaakceptowany przez prowadzącego i prowadzący musi mieć dostęp do kodu źródłowego.
-  * **Mail z informacją o skończeniu projektu należy wysłać najpóźniej ​11.01.2025**. \\ Przekroczenie tego terminu skutkuje obniżeniem oceny o 0.5. +  * **Mail z informacją o skończeniu projektu należy wysłać najpóźniej ​04.01.2025**. \\ Przekroczenie tego terminu skutkuje obniżeniem oceny o 0.5. 
-  * **Działający projekt należy zaprezentować w laboratorium przed końcem okresu zajęć dydaktycznych semestru zimowego (tj. przed 31.01.2025)**.+  * **Działający projekt należy zaprezentować w laboratorium przed końcem okresu zajęć dydaktycznych semestru zimowego (tj. najpóźniej 03.02.2025)**.
   * Wysłanie maila z informacją o skończeniu projektu a zaprezentowanie projektu w laboratorium muszą dzielić przynajmniej 2 dni (na przejrzenie kodu przez prowadzącego).   * Wysłanie maila z informacją o skończeniu projektu a zaprezentowanie projektu w laboratorium muszą dzielić przynajmniej 2 dni (na przejrzenie kodu przez prowadzącego).
   * Zaprezentowanie projektu w laboratorium projektów możliwe jest na/po zajęciach lub po mailowym uzgodnieniu z prowadzącym.   * Zaprezentowanie projektu w laboratorium projektów możliwe jest na/po zajęciach lub po mailowym uzgodnieniu z prowadzącym.
   * Do zaliczenia przedmiotu konieczna jest pozytywna ocena z projektu.   * Do zaliczenia przedmiotu konieczna jest pozytywna ocena z projektu.
  
sk2/projekt.1730761792.txt.gz · ostatnio zmienione: 2024/11/05 00:09 przez jkonczak