Uvod

V sklopu projekta European Software Skills Alliance (ESSA) je na voljo DevOps akademija, ki je sestavljena iz niza šestih modulov, s katerimi boste pridobili znanje iz izbranih področij ESSA študijskega programa Junior DevOps Expert.

Gradivo v tej skripti se osredotoča na prvi tečaj Web development - frontend, ki ga v obdobju od 6. 11. 2023 do 24. 11. 2023 izvaja izr. prof. dr. Dejan Lavbič na Fakulteti za računalništvo in informatiko, Univerze v Ljubljani.

V okviru tečaja bodo udeleženci spoznali celostni razvoj spletne aplikacije s poudarkom na čelnem delu sistema. Na problemski domeni, ki so jo udeleženci izbrali pri predhodnem tečaju, in že razvili zaledni del, bomo nadaljevali z razvojem uporabniškega vmesnika ter vključili predhodno razvite komponente zalednega dela. Z uporabo modernih ogrodij za razvoj spletnih aplikacij bomo implementirali interaktivno aplikacijo na eni strani (angl. Single Page Application (SPA)), ki se bo v celoti izvajala na strani odjemalca in z zalednim delom komunicirala preko REST API vmesnika. Pri razvoju bomo izkoristili vse prednosti okolja spletnega brskalnika in predstavili načine za bolj učinkovit razvoj in testiranje spletnih aplikacij. Z varnostnega vidika bomo aplikacijo zaščitili tudi na strani odjemalca, in sicer z vključitvijo preverjanja istovetnosti identitete z uporabo žetonov JWT, ki smo jih vpeljali že na zalednem delu v okviru predhodnega projekta.

Splošne informacije

Dodatno gradivo pri tečaju je na voljo v okviru GitHub organizacije UL FRI DevOps Web Development, medtem ko bo komunikacija potekala preko Discussions v okviru prej omenjene GitHub organizacije.

Predavatelj

izr. prof. dr. Dejan Lavbič

Asistent

as. Sandi Gec

Terminski plan izvajanja tečaja

Vsebina pri predmetu je razdeljena na naslednja sklopa:

  • 1. sklop : Uporabniški vmesnik z ogrodjem Angular in razvojem SPA in
  • 2. sklop : Dodatne funkcionalnosti z avtentikacijo in avtorizacijo na strani odjemalca, varnostjo in PWA.

Tečaj poteka od ponedeljka, 6. 11. 2023 do petka, 24. 11. 2023, kjer je organizacija naslednja:

  • prvi teden: predavanja in vaje v obsegu 20 šolskih ur (\(20 \times 45\ \text{min}\)) (v živo na UL FRI),
    • termin: od ponedeljka, 6. 11. 2023 do četrtka, 9. 11. 2023 (4 termini po 5 šolskih ur - 3 šolske ure predavanj in 2 šolski uri vaj),
      • 12:00 - 13:00 (1. del predavanj)
      • 13:00 - 13:05 (odmor)
      • 13:05 - 14:20 (2. del predavanj)
      • 14:20 - 14:30 (odmor)
      • 14:30 - 16:00 (vaje in “hands-on” delo na projektu)
    • lokacija: učilnica Akademija FRI, UL FRI, Večna pot 113, 1000 Ljubljana,
  • drugi teden: samostojno projektno delo na izbranih in predhodno potrjenih vsebinah (na daljavo),
  • tretji teden: predstavitev, pregled in ocenjevanje projektov ter izvedba pisnega preverjanja znanja (v živo na UL FRI).
Termin Vodeno delo Samostojno delo

1. teden
06. 11. 23–12. 11. 23

2. teden
13. 11. 23–19. 11. 23

-

3. teden
20. 11. 23–26. 11. 23

  • Pisno preverjanje znanja v sredo, 22. 11. 2023 ob 12:00.
  • Predstavitev in zagovor lastnega projekta v sredo, 22. 11. 2023 ob 13:00.

Pravila igre

Predavanja

Predavanja v okviru tečaja bodo praktično usmerjena, saj bomo demonstrirali celostni razvoj programske opreme na izbranem primeru od začetne ideje do delujoče različice, ki jo bomo tudi gostili na javnem spletnem naslovu. V okviru tega tečaja bomo razvili uporabniški vmesnik na strani odjemalca v obliki SPA aplikacije na eni strani in se povezali na REST API z dostopom na podatkovno bazo, kar smo razvili v predhodnjem tečaju.

Izvorna koda primerov s predavanj je na voljo v repozitoriju UL-FRI-DevOps-WebDevelopment/Snippets, demo aplikacije, ki jo bomo razvijali na predavanjih, pa v repozitoriju UL-FRI-DevOps-WebDevelopment/Demo.

Vaje

Osrednji cilj vaj je pomoč pri razvoju lastnega projekta (LP), ki ga bo vsak udeleženec, na izbrani problemski domeni, samostojno razvijal od začetka do delujoče različice. Na vajah bodo potekale predvsem konzultacije glede razvoja lastnega projekta in v 3. tednu tudi zagovor lastnega projekta (LP):

Povzetek funkcionalnih zahtev je prikazan na spodnji sliki, kjer so izpostavljene funkcionalnosti, ki jih boste razvili v okviru tega tečaja, medtem ko se ste preostale razvili že pri 1. tečaju.

Lastni projekt po delih

Naloge boste oddajali v elektronski obliki preko elektronske pošte, sistema GitHub in povezave na delujočo aplikacijo. Lastni projekt boste zaključili v 2. tednu tečaja samostojno doma in ga boste zagovorili v 3. tednu, kot je predvideno v terminskem planu izvajanja tečaja.

Priporočena literatura

  • Internet & World Wide Web: How to program, 5th edition (Deitel, Deitel, and Deitel 2011)
    • Chapter 1: Introduction to Computers and the Internet
    • Chapter 2: Introduction to HTML5: Part 1
    • Chapter 3: Introduction to HTML5: Part 2
    • Chapter 4: Introduction to Cascading Style Sheets™ (CSS): Part 1
    • Chapter 5: Introduction to Cascading Style Sheets™ (CSS): Part 2
    • Chapter 6: JavaScript: Introduction to Scripting
    • Chapter 7: JavaScript: Control Statements I
    • Chapter 8: JavaScript: Control Statements II
    • Chapter 9: JavaScript: Functions
    • Chapter 10: JavaScript: Arrays
    • Chapter 11: JavaScript: Objects
    • Chapter 12: Document Object Model (DOM): Objects and Collections
    • Chapter 13: JavaScript Event Handling: A Deeper Look
    • …
    • Chapter 16: Ajax-Enabled Rich Internet Applications with XML and JSON

  • Eloquent JavaScript: A Modern Introduction to Programming, 3rd edition (Haverbeke 2018)
    • Part I: Language
      • Chapter 1: Values, Types, and Operators
      • Chapter 2: Program Structure
      • Chapter 3: Functions
      • Chapter 4: Data Structures: Objects and Arrays
      • Chapter 5: Higher-Order Functions
      • Chapter 6: The Secret Life of Objects
      • Chapter 7: Project: A Robot
      • Chapter 8: Bugs and Errors
      • Chapter 9: Regular Expressions
      • Chapter 10: Modules
      • Chapter 11: Asynchronous Programming
      • Chapter 12: Project: A Programming Language
    • Part II: Browser
      • Chapter 13: JavaScript and the Browser
      • Chapter 14: The Document Object Model
      • Chapter 15: Handling Events
      • Chapter 16: Project: A Platform Game
      • Chapter 17: Drawing on Canvas
      • Chapter 18: HTTP and Forms
      • Chapter 19: Project: A Pixel Art Editor
    • Part III: Node
      • Chapter 20: Node.js
      • Chapter 21: Skill-Sharing Website

  • Getting MEAN with Mongo, Express, Angular, and Node, 2nd edition (Holmes and Herber 2019)
    • Part 1: Setting the baseline
      • Chapter 1: Introducing full-stack development
      • Chapter 2: Designing a MEAN stack architecture
    • Part 2: Building a Node web application
      • Chapter 3: Creating and setting up a MEAN project
      • Chapter 4: Building a static site with Node and Express
      • Chapter 5: Building a data model with MongoDB and Mongoose
      • Chapter 6: Writing a REST API: Exposing the MongoDB database to the application
      • Chapter 7: Consuming a REST API: Using an API from inside Express
    • Part 3: Adding a dynamic front end with Angular
      • Chapter 8: Creating an Angular application with TypeScript
      • Chapter 9: Building a single-page application with Angular: Foundations
      • Chapter 10: Building an SPA with Angular: The next level
    • Part 4: Managing authentication and user session
      • Chapter 11: Authenticating users, managing sessions, and securing APIs
      • Chapter 12: Using an authentication API in Angular applications

  • Become a Ninja with Angular (Exbrayat 2021)
    • Chapter 1: Introducing full-stack development
    • Chapter 2: A gentle introduction to ECMAScript 2015+
    • Chapter 3: Going further than ES2015+
    • Chapter 4: Diving into TypeScript
    • Chapter 5: Advanced TypeScript
    • Chapter 6: The wonderful land of Web Components
    • Chapter 7: Grasping Angular’s philosophy
    • Chapter 8: From zero to something
    • Chapter 9: The templating syntax
    • Chapter 10: Dependency injection
    • Chapter 11: Services
    • Chapter 12: Pipes
    • Chapter 13: Reactive Programming
    • Chapter 14: Building components and directives
    • Chapter 15: Styling components and encapsulation
    • Chapter 16: Testing your app
    • Chapter 17: Send and receive data through HTTP
    • Chapter 18: Router
    • Chapter 19: forms
    • Chapter 20: Zones and the Angular magic
    • Chapter 21: Angular compilation: Just in Time vs Ahead of Time
    • Chapter 22: Advanced observables
    • Chapter 23: Advanced components and directives
    • Chapter 24: Internationalization
    • Chapter 25: Performance
    • Chapter 26: Going to production
    • Chapter 27: This is the end