Na ovom kursu ćete naučiti kako dizajnirati i particionisati aplikaciju na fiksnu(e) i fleksibilnu(e) komponentu(e) u svrhu ubrzanja izvršenja aplikacija, te postizanja bolje efikasnosti i performansi aplikacije. Ovaj koncept u računarstvu je još poznat i kao hardver/softver kodizajn. Zanimljivo, ali vrlo teško pitanje je kako odabrati platformu za datu specifikaciju i kako aplikaciju mapirati na odabranu platformu? Od ova dva pitanja prvo je najteže. Dizajneri na to obično odgovaraju na osnovu svog prethodnog iskustva sa sličnim aplikacijama. Drugo je pitanje također vrlo izazovno, ali na njega je moguće odgovoriti sistematičnije, koristeći metodologiju dizajna. Metoda dizajna je sistematični slijed koraka za pretvaranje specifikacije u implementaciju. Metode dizajna pokrivaju mnoge aspekte mapiranja aplikacija, poput optimizacije korištene memorije, performanse, upotrebu resursa, preciznost, izbor vrste podataka i itd. Metoda dizajna je pripremljeni slijed koraka dizajna. Može se naučiti u kontekstu jednog dizajna, a zatim se ovo znanje o dizajnu može primijeniti i u kontekstu drugog dizajna.

Na vježbama studenti će usvojiti konkretna znanja o tome kako raditi sa heterogenim računarskim platformama korištenjem OpenCL programskog modela. Studenti će imati priliku da rade sa najmodernijim sistema koje imamo na fakultetu, te imati pristup i nekim drugim sistema na drugim Univerzitetima. OpenCL je programski model zasnovan na C programskom jeziku, a dizajniran je za pisanje aplikacija koje se izvode na heterogenim računarskim platformama. Te se platforme uglavnom sastoje od različitih računarskih uređaja kao što su CPU, GPU i FPGA. Tradicionalno, svaki od ovih uređaja ima svoje metode programiranja. Kao primjer, programer piše C kôd za CPU, OpenGL kôd za GPU i VHDL kôd za FPGA. Suprotno tome, programer može koristiti OpenCL za stvaranje jedne aplikacije koja se izvršava na svim uređajima. Studenti ne moraju biti upoznati sa OpenGL ili VHDL kodom da bi pohađali ovaj kurs. Kroz vježbe studenti će postepeno učiti OpenCL na konkretnim primjerima (VI, ML, CV, itd). 


Kurs treba pružiti znanja neophodna za shvatanje ekonomskih i organizacijskih varijabli koje utiču na upravljanje procesima tehničkog razvoja u industriji i uslugama, sa naročitim osvrtom na polje ICT. Nakon predstavljanja osnovnih elemenata ekonomske analize inovacija i uslova nadmetanja-ekonomskog i institucionalnog, koji utiču na razvojni kapacitet preduzeća, kurs razmatra organizacijske aspekte i upravljanje procesom razvoja, obraćajući pažnju naročito na stratešku analizu izbora tehnologije u preduzeću, na organizaciju oblasti istraživanja i razvoja i na njihovu integraciju sa drugim funkcijama u kompaniji, na tehničku operativu i podršku aktivnostima razvoja. Kurs se bavi pored toga organizacijskim aspektima i tehničkom operativom karakterističnom za upravljanje projektima, naročito u vezi projekata razvoja, u okviru kojih se razvijaju novi proizvodi i organizacijske promjene.

Kurs obuhvata tematske jedinice iz oblasti mašinskog učenja kao što su definicije, terminologija, modeli, arhiterkture, dimenzionalnost, mehanizmi učenja i primjena neuronskih mreža: linearne Widrow-Hoff statičke i adaptivne mreže, nelinearne backpropagation mreže, rekurentne Elmanove i Hopfildove mreže, radial basis mreže, asocijativne kompetitivne i samoorganizirajuće mape, LVQ mreže, prediktivne NAR i NARX mreže i deep learning mreže. Fokus primjene ovih mreža je u mapiranju ulazno-izlaznih podataka, aproksimaciji funkcija, klasifikaciji podataka, predikciji događaja, prepoznavanju oblika i računarskoj viziji. Praktični dio kursa pokriva laboratorijske vježbe i samostalna istraživanja gdje se dizajniraju, GA-optimiziraju i implementiraju interaktivni interfejsi-GUI za neuronske mreže u oblasti ekspertnih sistema, biomedicinskih sistema za podršku odlučivanju i industrijskih kontrolera.

Kurs obrađuje teme softver inžinjeringa kao što su: software reuse, component-based software engineering, distributed software engineering, service-oriented architecture, embedded software, ...

Upoznavanje sa principima, metodologijama i tehnikama dizajna softvera, operativnog sistema realnog vremena, intefejsa čovjek-mašina, evaluaciji i testiranju softvera i hardvera, i osnovnim alatima za dizajniranje softvera koji zadovoljava dinamičko okruženje, odnosno sisteme u realnom vremenu.
Cilj kursa je prezentacija teorije, mehanizama, tehnika i alata koji se mogu koristiti za poboljšanje sigurnosti informacionih sistema. Studenti će steći znanje koje će im omogučiti razumijevanje i implementaciju servisa za zaštitu od napada na povjerljivost, integritet i dostupnost podataka i informacija.