Računarski praktikum II

Projektni zadatak se sastoji od izrade složenije web-aplikacije koja tipično treba uključivati i klijentski i serverski aspekt web-programiranja.
  • Projektni zadatak se rješava u grupi koja se sastoji između dvoje i četvero članova.
  • Rješenje projektnog zadatka će se prezentirati predmetnom nastavniku u pisanom (prezentacija s par slajdova koja objašnjava funkcionalnost aplikacije i organizaciju koda) i u usmenom obliku.
  • Točan raspored preuzimanja i predavanja projektnih zadataka, u kojem će svaki student prezentirati svoj doprinos rješenju, će biti utvrđen u dogovoru sa studentima.
  • Elementi ocjenjivanja: složenost aplikacije, kvaliteta implementacije, dokumentacija, izlaganje.

Postupak prijave, izrade i predaje zadatka

  1. Studenti se trebaju organizirati u timove sa 2-4 člana, te odabrati jedan od ponuđenih zadataka ili osmisliti svoju temu približno jednakog stupnja složenosti. Originalna tema koja nije na donjem popisu (i koja je bitno različita od svih tema na popisu) može donijeti 5 dodatnih bodova.
  2. Nakon toga, trebaju se javiti mailom prof. Bujanoviću do datuma koji će biti objavljen naknadno. U mailu trebaju navesti odabranu temu (s detaljnijim opisom ako nije na donjoj listi), te popis članova tima. Mail također treba biti poslan i svim članovima tima.
  3. Rješenje je potrebno razvijati pomoću Git sustava za verzioniranje (na primjer, kao privatni Bitbucket ili GitHub repozitorij).
  4. Aplikaciju je preporučeno razvijati u skladu s Model-View-Controller arhitekturalnim patternom. U protivnom treba dati odgovarajuće obrazloženje.
  5. Mogući termini usmene obrane će biti objavljeni ovdje.
  6. Link na Git repozitorij (tj. invite za članstvo), prezentaciju s opisom aplikacije, te link na aplikaciju na rp2 serveru je potrebno poslati profesoru mailom barem dva dana prije usmene obrane. Na obrani trebaju biti prisutni svi članovi projekta, te svatko treba objasniti svoju ulogu u projektu. Svaki član mora imati nekoliko commit-a na repozitorij.
    Važna pravila za bodovanje:
    • Broj bodova za pojedinog studenta <= 4*broj dana u kojima postoji smisleni commit (tj. svaki član mora bar nešto raditi na aplikaciji tijekom 8 dana da dobije maksimalnih 30 bodova).
    • Aplikacija mora biti "zaokružena cjelina": treba ju moći koristiti vanjski korisnik koji nije upućen u implementaciju, treba biti user friendly.
  7. Rješenje bi trebalo biti postavljeno na rp2.studenti.math.hr (osim u iznimnim situacijama i u dogovoru s profesorom). Možete koristiti i vanjske JavaScript/HTML/CSS biblioteke, poput jQuery, Bootstrap i sličnih. Ne smijete koristiti gotova ili skoro gotova rješenja zadatka kojeg rješavate -- takva ili bilo koja druga vrsta plagiranja nije prihvatljiva!
  8. Projekt treba sadržavati aspekte i serverskog (PHP) i klijentskog (JavaScript) programiranja. Iznimke su moguće jedino u dogovoru s profesorom.

Teme za projektne zadatke

  1. Društvena igra
    Implementirajte neku igru za više korisnika. Npr. belu, preferans, Hanabi, šah ili nešto drugo po vlastitom izboru - pogledajte i ovdje za inspiraciju. Potrebno je implementirati odvojene sobe u koje se igrači prijavljuju (tj. više igara se može odvijati u isto vrijeme).
  2. Aplikacija za rezerviranje prostorija na faksu
    Koristeći sučelje (po mogućnosti) slično Google Calendaru, (ulogirani) korisnici mogu rezervirati slobodni termin željene prostorije na faksu, te obrisati (svoju) rezervaciju koju su ranije napravili. Postoji administrator koji može brisati i rezervirati bilo koje termine. Neulogirani korisnici mogu vidjeti raspored bilo koje odabrane prostorije.
  3. Portal za studentsku praksu
    Tvrtke mogu zatražiti korisnički račun i oglasiti da traže studente za studentsku praksu. Svi mogu vidjeti i pretraživati objavljene oglase. Ulogirani studenti se mogu prijaviti za praksu. Treba omogućiti izvjesnu fleksibilnost - npr. tvrtka može ali i ne mora tražiti da se prilikom prijave pošalje životopis, prosjek ocjena, kontakt mail-adresa i slično. Moguće je izvesti i da student prlikom kreiranja accounta uredi svoj profil s tim podacima, pa da onda tvrtka može vidjeti njegov profil kad se prijavi, ili neka slična varijanta.
  4. Kolaborativni editor teksta
    Više korisnika može istovremeno uređivati isti tekst. Cilj je napraviti nešto slično ovome (spojite se s više računala istovremeno na istu stranicu). Nije nužno napraviti bojanje sintakse; treba omogućiti spremanje dokumenta na serveru i kasnije ponovno učitavanje. Jedan korisnik bi trebao vidjeti kursor drugog. Jednostavnosti radi, nije dozvoljeno da dva korisnika istovremeno editiraju tekst u istoj liniji.
  5. Kolaborativni tablični editor
    Cilj je ostvariti elementarnu funkcionalnost Google Sheets-a. Više korisnika može istovremeno editirati istu tablicu. Treba implementirati samo najosnovniju funkcionalnost: pomicanje po ćelijama gore/dolje/lijevo/desno, dodavanje novog retka i stupca, mijenjanje sadržaja pojedine ćelije, spremanje i ponovno učitavanje tablice. Ne treba omogućiti unošenje formula, selektiranje ćelija i slično. Jedan korisnik bi trebao vidjeti ćeliju u kojoj se nalazi drugi. Dva korisnika ne mogu istovremeno mijenjati sadržaj iste ćelije.
  6. Kviz
    Web-stranica omogućava korisnicima rješavanje jednog od ponuđenih kvizova. Kvizovi se sastoje od pitanja raznih tipova (npr. pitanja s ponuđenim odgovorima, pitanja gdje treba upisati odgovor i slično). Administrator može stvoriti novi kviz, dodavati pitanja u njega i definirati točne odgovore. (Tipove pitanja možete unaprijed definirati, tj. administrator ne treba biti u stanju definirati nove tipove pitanja.)
  7. Evaluator
    Web-stranica omogućava korisnicima rješavanje programerskih zadataka. Korisnik može odabrati jedan od ponuđenih zadataka, te poslati svoje rješenje. Rješenje se kompajlira i izvršava na serveru (pazite na sigurnost, npr. vidi chroot). Ispravnost rješenja se testira tako da se korisnikov program pokreće sa unaprijed zadanim skupom ulaznih datoteka, te se njegov ispis uspoređuje s točnim izlaznim datotekama. Administrator može stvoriti novi zadatak tako da mu zada tekst, te skup ulaznih i točnih izlaznih datoteka.
  8. Repozitorij datoteka
    Potrebno je implementirati jednostavan način za prikaz i dodavanje novih datoteka na neku web-stranicu. Konkretno, administrator može definirati novi repozitorij datoteka (npr. "Kolokviji" ili "Prezentacije"), te dodavati nove datoteke proizvoljnog tipa u repozitorij zajedno s opisom (npr. "2014-kolokvij1.pdf") i tagovima (npr. "programiranje", "JavaScript" i slično). Administrator treba moći i brisati ili editirati postojeće datoteke iz repozitorija. Nadalje, potrebno je napraviti PHP-sučelje kojim se odabrani repozitorij može izuzetno jednostavno prikazati na web-stranici, dajući pri tome link za download odgovarajuće datoteke. Idealno, sučelje treba pružati mogućnost sortiranja datoteka po odabranom ključu, filtriranje po odabranom tagu i slično.
  9. Blog portal
    Web aplikacija za blogere. Korisnici aplikacije mogu stvarati svoje blogove i pisati postove u njemu. Bloger mora moći i uređivati svoje prijašnje postove. Svaki post drugi ulogirani korisnici (blogeri) mogu komentirati. Administrator mora moći otvarati nove korisnike (blogove), uređivati i brisati postove i komentare svakom blogeru. Kao alat kojim korisnici unose svoje blogove možete koristiti neki od slobodno dostupnih editora, npr. TinyMCE ili neki drugi s ovog linka.
  10. Webmail klijent
    Napravite webmail klijent za pristup vašem mail-serveru. Za testiranje koristite google account, vidi primjer, te PHP dokumentaciju. Omogućite pohranjivanje arhive primljenih i poslanih email poruka u bazi podataka. Za slanje maila možete koristiti PHPMailer.
  11. Portal za upoznavanje
    Korisnik napravi profil, ispuni upitnik u kojem daje vlastite interese, i osobine koje mu se sviđaju kod potencijalnog "poznanika". Podaci se spremaju u bazu podataka te čim korisnik zatraži od servera da mu pridruži osobu s istim interesima, server pregledava bazu, traži sličnosti u interesima te mu šalje obavijest s linkom na profil najkompatibilnijeg kandidata. Moguće su restrikcije na geografsku udaljenost te mogućnost da obojica kandidata budu obaviješteni ili se dopisuju preko privatnih poruka.
  12. Spomenar
    Implementacija leksikona poput onog kojeg imaju djeca u osnovnoj školi. Niz stranica koje se može listati, slično kao bilježnica. Na svakoj stranici je postavljeno neko pitanje, npr.: 'Koji ti je nadimak?', 'Imaš li kućnog ljubimca?', 'Imaš li simpatiju?', 'Nacrtaj nešto'. Svaki korisnik može unositi svoje odgovore i u svakom trenutku vidjeti odgovore drugih korisnika. Povlašteni korisnici mogu definirati nova pitanja; potrebno je implementirati nekoliko različitih tipova pitanja (tj. i pitanja na koje odgovor nije samo utipkavanje teksta).
  13. Aplikacija za čuvanje bilješki
    Web aplikacija s korisničkim sučeljem nalik na Google Keep. Korisnicima je omogućeno kreiranje i izmjena bilješki koje se pohranjuju u bazu podataka. Moguća je pretraga bilješki po sadržaju i tagovima. Aplikacija podržava spremanje i učitavanje bilješki iz csv (ili nekog drugog prikladnog) formata. Omogućeno je dijeljenje kreiranih bilješki među korisnicima aplikacije. Također, podržana je autentikacija korisnika kroz third-party servise (npr. Facebook).
  14. Aplikacija za web-podršku nastavi
    Baza samog sustava su korisnici (studenti i profesori), stranice predmeta te personalizirane obavijesti za svakog korisnika. Na osnovu toga mogu se, ovisno o složenosti, dodati personalizirani raspored sati, predaja zadaća i slične funkcionalnosti.
  15. Špeceraj
    Online sustav koji korisniku omogućuje pregled aktualnih ponuda različitih trgovina sa sljedećim ciljevima: korisnik može izraditi svoj profil na sustavu; korisnik ima mogućnost izrade popisa za kupovinu (“napuniti ceker”) na temelju rezultata pretraživanja baze podataka proizvoda različitih trgovina (pretraživanje prema imenu te mogućnost sortiranja po cijeni); aplikacija korisniku nudi mogućnost automatskog određivanja trgovine u kojoj se ostvaruje najjeftinija kupnja za jedan proizvod te za ukupan sadržaj košarice; za svaku trgovinu moguće je dobiti popis proizvoda na akciji; trgovine je moguće recenzirati.
  16. Web aplikacija s receptima
    Aplikacija sluzi korisnicima kako bi spremali svoje recepte, pregledavali tuđe te ih spremali kao favorite. Recepti se mogu ocjenjivati ocjenama od 1-5, te se mogu komentirati. Recepte je moguce sortirati prema određenom sastojku. Svaki od recepata pripada nekoj kategoriji (npr. deserti, hladna jela, finger food, ...), koja nije jedinstvena, odnosno jedan recept može biti u više kategorija. Neke od kategorija unaprijed su predefinirane, ali postoji mogućnost dodavanja novih (od strane administratora), te postoji mogućnost sortiranja i filtriranja po kategorijama. Aplikacija prilikom pokretanja, svaki dan pokazuje slučajna 3 recepta iz 3 različite kategorije, neovisno o broju komentara i ocjeni koju taj recept ima.
  17. Web aplikacija za nalaženje hotelskog smještaja
    Aplikacija sadrži nekoliko hotela u nekoliko gradova te se korisniku nudi opcija da na temelju grada, cijene, udaljenosti od centra, dobivenih ocjena nađe hotel koji mu najviše odgovara. Također može po bilo kojem od kriterija sortirati hotele. Korisnici mogu davati ocjene hotelima te ostavljati komentare, tj. recenzirati hotele, koji će kasnije biti dostupni ostalim korisnicima. Uz obične korisnike koji rezerviraju smještaj, postoje i korisnici tipa hotel. Oni mogu definirati broj soba odgovarajućeg tipa te njihove cijene, eventualno dodavati slike. Treba onemogućiti daljnju rezervaciju soba ako one postanu nedostupne za odabrane datume.
  18. IMDB klon
    Registrirani korisnici mogu komentirati i ocjenjivati filmove, pretraživati filmove po žanru, glumcu, godini itd. Korisnik također može dobiti popis top-rated filmova (po žanru, godini itd.) i kreirati svoju listu filmova koje želi pogledati, na kojoj kasnije može označiti filmove koje je pogledao. Korisniku je dostupan pregled svih njegovih ocjena filmova. Administrator može dodavati nove filmove, brisati neprimjerene komentare korisnika i, u slučaju učestalog neprimjerenog ponašanja, obrisati korisnikov račun.
  19. Spiza
    Web aplikacija za naručivanje hrane iz popisa restorana. Popis restorana može biti složen prema: vrsti hrane, restorana iz kojeg je korisnik najviše naručivao i prema cijeni jela. Za svaku desetu narudžbu korisnik bi dobio određeni popust. Također, omogućili bi naknadno dodavanje poslužitelja hrane te novih jela. Postoje tri tipa korisnika: osoba koja naručuje hranu, restoran i dostavljač. Svaki od njih može stvoriti novi korisnički račun. Između ostalog, treba implementirati sljedeće funkcionalnosti: Korisnik može odabrati restoran i jelo za dostavu, te ocijeniti isporučeno jelo. Restorani mogu dodavati nova jela u menu, vidjeti narudžbe, te označavati kada je naručeno jelo spremno za dostavu. Dostavljači vide popis svih jela označenih za dostavu, mogu odabrati ono koje će dostaviti, te ga označiti kao dostavljeno.
  20. Sustav rezervacija za kazalište/kino
    Korisnici će imati izbor biranja predstave, dvoranu i tipa mjesta dvorane, te će dobiti potvrdu rezervacije koji će se moći provjeriti s nekim oblikom autentifikacije, dok će administratori imati mogućnosti definiranja termina predstava po dvoranama, te zaposlenici prava na brisanje, dodavanje, mijenjanje rezervacija. Sučelje za korisnike bi trebalo izgledati nešto slično kao Cinestar sustav rezervacije filmova.
  21. Upravljanje projektima, timovima i zadacima
    Neke od funkcionalnosti bi bile: Praćenje projektnih zadataka: omogućuje dodavanje, dodjeljivanje i praćenje zadataka koje je potrebno obaviti kako bi se projekt uspješno završio, te dodavanje komentara na zadatke. Planiranje projekta: omogućuje kreiranje projektnog plana, dodavanje rokova i prioritetnih zadataka. Suradnja u timu: omogućuje članovima tima da surađuju i komuniciraju jedni s drugima te dijele informacije preko komentara ili datoteka. Administratori mogu dodavati nove korisnike i dodijeljivati im prava pristupa određenim dijelovima i funkcionalnostima aplikacije.
  22. Klupska aplikacija za praćenje treninga
    Web stranica omogućava korisnicima treniranje na daljinu. Korisnici aplikacije posjeduju profil. Kod profila sportaša navedena je i njegova dobna skupina (junior, senior, vetran), također navedeni su i osobni rekordi u disciplinama u kojima se sportaš natječe (npr 100m trčanje - 12,00, 200m trčanje - 25,50). Prema dobnoj skupini, sportaši se grupiraju u skupine (juniori, seniori, veterani). Trener može stvoriti trening, odabrati tip treninga između ponuđenih (teretana, biciklizam, trčanje...), odabrati grupu i definirati trening (npr. ako je trening za juniore trčanje dionica 10*200 m, trener odabire tip trčanje, grupu juniori i uređuje broj i duljinu dionica). Također, trener može unesti event (natjecanje) za određenu grupu. Prilikom unosa natjecanja, sportašima se na vrhu rasporeda pojavljuje naziv eventa i odbrojavanje do njega. Sportaš može zapisati detalje ponuđenog treninga (npr. brzine svake dionice, težinu za svaku seriju u teretani...). Također, za svaki trening na skali intensity (easy - all out) može odabrati intenzitet treninga te na skali feeling (weak - normal - strong) definirati osjećaj tokom treninga. Isto će moći napraviti i za svako natjecanje. Ukoliko je sportaš na natjecanju u disciplini u kojoj se natječe postigao svoj osobni rekord, pojavit će mu se poruka čestitke. U odjeljku Notifications svi korisnici aplikacije mogu objaviti status/obavijest i lajkati iste.

    Zadatak je odabrao tim: { AM, MS }