Cilj predmeta je pridobiti znanja o
postopkih razvoja programske opreme s posebnim poudarkom na razvoju zalednih
(server-side, datacenter, cloud) aplikacij, torej aplikacij, ki se uporabljajo
v velikih informacijskih sistemih podjetij ali velikih spletnih aplikacij (npr.
Facebook, LinkedIn, spletnih trgovin kot so Amazon, mimovrste, ebay in
podobnih). Te aplikacije, ki delujejo na velikih strežniških sistemih, morajo
biti sposobne servisirat množico sočasnih uporabnikov, hkrati pa delovati hitro
in zanesljivo. Pri predmetu se bomo v ta namen spoznali s sodobnimi arhitekturami razvoja, vključno z arhitekturo mikrostoritev, cloud-native arhitekturo, APIji, DevOps, CI/CD in arhitekturnimi vzorci in najboljšimi praksami razvoja sodobnih rešitev.
Podrobno bomo spoznali načine razvoja mikrostoritev v Javi, pri tem srečali tehnologije JAX-RS, CDI, JAX-P in JAX-B, JPA, JDBC, EJB, JMS, JAX-WS, JTS in napredne sporočilne sisteme AMQP, MQTT in druge. Prav tako se bomo spoznali z event streamingom (Kafka) in reaktivnimi koncepti.

Spoznali se bomo s spletnimi
storitvami REST in SOAP, JSON, OpenAPI, Swagger, itd. Za razvoj odjemalnih spletnih
aplikacij se bomo spoznali s HTML5/JavaScript in Angular.
stores such as
Amazon, eBay and similar).
Those
applications that run on large server systems and must be capable of servicing
a multitude of concurrent users. They also need to work quickly and reliably.

We will learn the basics of microservice arhitevture and cloud-native development.

We will get familiar with developing microservices in Java and get to know JAX-RS, CDI, JAX-P and JAX-B, JPA, JDBC, JMS, JAX-WS, JTS and advanced AMQP, MQTT and other messaging systems. We will also get acquainted with event streaming and reactive concepts.

We will also get familiar with web services
REST, JSON, OpenAPI, Swagger, etc. For the development of client web pages
applications will get familiar with HTML5 / JavaScript and Angular.

We will also
learn how to develop cloud-ready application using microservices, containers
and scalability. We will get familiar with Docker and Kubernetes.

Students will
also get familiar with Continuous Integration and Deployment, and learn how to
use code repositories (Git), build tools (Maven), build servers (Jenkins) and
artifact repository (Nexus).

The course is
practically oriented with exercises. Students develop an application using an
application server of their choice.
Students
will be prepared for challenging development projects and their management.
The
course will provide enough knowledge for students obtain certificates for Java EE
developers.


Pri predmetu Spletno programiranje se bomo posvetili pregledu nad tehnologijami, ki se uporabljajo pri delovanju spleta, spletnih strežnikov, brskalnikov, spletnih aplikacij in verige blokov.

Pregledali bomo osnove izdelave in oblikovanja spletnih strani (HTML5 in CSS3), jih nadgradili s pregledom tehnologij na strani odjemalca (JavaScript) in strežnika (Node.js) ter implementirali REST API dostop do podatkovne baze (MongoDB). Aplikacijo bomo varnostno nadgradili, jo s pomočjo pametne pogodbe povezali s porazdeljeno verigo blokov (Ethereum) in jih dodali progresivne funkcionalnosti (PWA).

Cilj predmeta je študentu podati širino znanj, povezanih z delovanje raznovrstnih sodobnih spletnih tehnologij in razvojnih okolij in študenta usposobiti za samostojno učenje novih heterogenih tehnologij v razvoju ter ga predvsem seznaniti s celostnim razvojem porazdeljenih spletnih aplikacij.

Predmet je sestavljen iz predavanj, laboratorijskih vaj in projekta (lastne spletne aplikacije), ki ga študenti po delih zagovarjajo skozi celoten semester.

[Predmet se izvaja v Angleščini]

The evolution of computing resulted in not only a skyrocketing number of computing devices (approximated to be reach around 30 billion in 2020), but also in the diversity of these devices. With ubiquity came specialisation, thus, in order to address different needs, devices come with different processing, storage, sensing, and networking capabilities, energy requirements, they support different interaction modalities, etc.

In this course, in contrast to general purpose programming, we concentrate on software development for specific platforms, such as mobile, embedded, low-power, networked, and others. We particularly concentrate on the constraints and mechanisms that characterise a particular platform, as well as on the programming APIs available at the platform. Since many of the platforms are already covered by other courses in the curriculum, in this class we pay a particular attention to mobile and embedded computing. A large part of this course covers programming in Android, the most popular mobile computing platform. We thoroughly cover a number of aspects of Android programming, including user interface development, networking, sensing, background processing, and distributed (client-server) application development. We also address aspects related to machine learning on resource-constrained devices and energy-efficient context inference.

The course involves a significant practical programming component. Weekly labs are mandatory and focus on different mobile and embedded programming concepts. A key part of the course is a semester-long Android project managed via four Scrum programming sprints. The course also includes the final exam.