GamificationLab

Advancing research at the intersection of HCI and AI, enriched by game and gamification principles.

Web and Software Architecture

Bachelors in ACSAI

3rd Year, 1st Semester

Instructor:

Prof. Emanuele Panizzi

Friday 12 June 2026

Exam schedule of the June appeal is available


The appeal is on Tuesday, June 16th, 2026 The list of admitted students is available here: Schedule for June 2026 exams.

IMPORTANT: exams will be in our lab: GamificationLab, via dei Volsci 122.

IMPORTANT! Remind to bring an identity document and a laptop with you. More information in the exam page.




Friday 10 April 2026

Exam schedule available for the April Extra-ordinary appeal


The appeal is on Tuesday, April 14th, 2026

The exam schedule for oral discussions is available here: Schedule for April 2026 exams.

IMPORTANT: exams will be in our lab: GamificationLab, via dei Volsci 122.

IMPORTANT! Remind to bring an identity document and a laptop with you. More information in the exam page.




Wednesday 25 February 2026

Extraordinary appeal information


The appeal will be on Tuesday, April 14th, 2026

Hoewver, due to the Easter holidays, the daily evaluations will be anticipated as follows:

  • daily from Wednesday March 25th to Wednesday, April 1st included
  • then, Wednesday April 8th and Thursday April 9th (in the morning, last evaluation).

Remember to push your final submission by Wed 8 night or Thu 9 early morning.

Registrations on Infostud are already open and will close on Wednesday 8 at 23:59.




Monday 16 February 2026

Final exam schedule of the February appeal is available


The appeal is on Tuesday, February 17th, 2026 The list of admitted students is available here: Schedule for February 2026 exams.

IMPORTANT: exams will be in our lab: GamificationLab, via dei Volsci 122.

IMPORTANT! Remind to bring an identity document and a laptop with you. More information in the exam page.




Friday 13 February 2026

Tentative Exam schedule available for the February appeal


The appeal is on Tuesday, February 17th, 2026

The list of students who passed the homework is available here: Schedule for February 2026 exams.

Unfortunately, due to last week’s ransomware attack, the Infostud system is currently unavailable. As a result, we do not have access to the list of registered students.

If you wish to participate in the oral appeal, you must register again using this Google Form

Students who do not complete the form will be removed from the list next Monday, when the final schedule will be published.

If you are planning to travel and require confirmation in order to book transportation, please contact Prof. Panizzi directly.

IMPORTANT: exams will be in our lab: GamificationLab, via dei Volsci 122.

IMPORTANT! Remind to bring an identity document and a laptop with you. More information in the exam page.




Monday, February 9 2026

Student Instructions for WASA Homework Submission and Exam Booking During System Downtime


Due to the ransomware attack of last week, the Infostud system is not active. For registering to the WASA exam, if Infostud doesn’t work by Wednesday evening, I will open a Google form.

The submission and evaluation of the WASA homework is back to normal (we missed only one day of evaluations). Remember to push your code to your GitHub repository, and you will receive your evaluation daily (still 4 to go).

evaluation results are available here




Thursday, 22 January 2026

WASAtext homework 3 (Vue) interactive functionality check


We strongly encourage every WASA student to verify that their code correctly performs the main operations required by the project specification, and we provide a checklist for execution.




Friday 16 January 2026

Exam schedule available for the January appeal


The appeal is on Tuesday, January 20th, 2026

The exam schedule for oral discussions is available here: Schedule for January 2026 exams.

IMPORTANT: exams will be in our lab: GamificationLab, via dei Volsci 122.

IMPORTANT! Remind to bring an identity document and a laptop with you. More information in the exam page.




Thursday, 15 January 2026

Notice


The project evaluation process is currently ongoing. The results will presumably be published tomorrow morning.




Thursday, 18 December 2025

Lesson: Antigravity


Topic:

  • WASA Vibe coding

Announcements:

  • Exams will be on:
    • Tuesday, 20 January
    • Tuesday, 17 February
  • Please book on Infostud today to avoid forgetting it.
  • The final evaluations will be on the Thursday morning before the appeals (i.e., 15th January and 12th February)
  • This is the last class of our course. Merry Christmas and Happy New Year to all of you.

Exams FAQ

We can not find the exam on Infostud to register for it. Is there another way to register?
I opened the appeals; please try again. We also want to know when exactly the oral exams will take place, because on we have a different exam at 14:00.
The exams will take place the whole day. It is not possible for another exam to be scheduled on that day for the same program and the same year. In fact, they carefully avoided any overlaps, and official exam schedules were published. Should it be so, please contact the secretariat at segreteria.didattica@di.uniroma1.it Is it possible to ensure that we can attend the oral exam before 2:00PM?
No. As I said, exams might continue till 7 pm, depending on the number of students

Video recording - part 1 Video recording - part 2



Tuesday, 16 December 2025

Lesson: Containers


  • Containers introduction
  • Homework 4 is open: you must create two Dockerfiles: one named Dockerfile.frontend for the frontend part, one named Dockerfile.backend for the backend part.
  • On WASA book, chapter 7 you can find a detailed description about how to create the two Dockerfiles.

ANNOUNCEMENTS

  • Tomorrow, I will make the last hw evaluation of 2025. Evaluations will start again on Wednesday, 7 January, 2026.
  • Next thursday will be the last lesson, and we will cover a new topic: how to design and code the WASA project using the AI (Antigravity).

Video recording




Thursday, 11 December 2025

Vue practice


  • Vue exercise: independent counters

We want to make a page with many different counters to track the numebr of students in different classes. Each counter has these characteristics:

  • has two buttons + and - to increment and decrement
  • non-negative
  • it has a label (i.e. the class name)
  • its background is yellow if it is below 5 or above 100
  • it must be possible to add more counters and to remove counters

App.vue

<script>
import Counter from './Counter.vue'
export default {
  data() {
    return { 
      coursenames: ['WASA','HCI'],
      cname: ""
    } 
  },
  methods: {
    appendCourse(cname) { 
      this.coursenames.push(cname);
    },
    deleteCourse(cname) {
      let index = this.coursenames.indexOf(cname);
      this.coursenames.splice(index,1);
    }
  },
  // register the component
  components: { 
    Counter
  } 
}
</script>
<template>
<h1>My counters</h1> 

<p>  
    <Counter v-for="name in coursenames" :coursename="name" />
</p>
New course: <input type="text" v-model="cname" />
<button @click="appendCourse(cname)">ADD</button>
<button @click="deleteCourse(cname)">DEL</button>
</template>

Counter.vue

<script>
export default {
  props: ['coursename'],
  data() {
    return { 
      count: 0,
      counterstyle: "background-color: yellow;"
    } 
  },
  methods: {
    incr() { 
      this.count++;
      if (this.count < 5 || this.count >= 100) {
        this.counterstyle = "background-color: yellow;";
      } else {
        this.counterstyle = "background-color: white;";
      } 
    },
    decr() {
      if (this.count > 0) {
        this.count--;
      }
      if (this.count < 5 || this.count >= 100) {
        this.counterstyle = "background-color: yellow;";
      } else {
        this.counterstyle = "background-color: white;";
      }
    }
  }
}
</script>

<template>
  <p>
  {{coursename}}: 
  <button @click="decr">-</button>
  <span :style="counterstyle">
    {{count}}
  </span>
  <button @click="incr">+</button>
  </p>
</template>

<style scoped>
  button { font-weight: bold; color:blue;} 
</style>

HW3 is now open for submissions

Video recording




Tuesday, 9 December 2025

Lesson: vue, Axios and CORS


Video recording

Announcement: ITMeeting next Monday, Dec 15th.




Thursday, 4 December 2025

Practice: vue


  • Vue basics continued from slide 15
  • Vue intro continued from Anatomy of a Vue.js SPA
  • Vue Template

Vue example

App.vue

<script>
import ButtonCounter from './ButtonCounter.vue'
export default {
  // register the component
  components: { 
    ButtonCounter
  } 
}
</script>
<template>
<h1>My counters</h1> 
<p>
    <ButtonCounter />
    <ButtonCounter />    
</p>
</template>

ButtonCounter.vue

<script>
export default {
  data() {
    return { count: 0 } 
  }
}
</script>

<template>
  <button @click="count++">PUSH ME</button> Count is: {{ count }}<br></br>
</template>

<style scoped>
  button { font-weight: bold; color:blue;} 
</style>

Please modify it so that we have many counters, each one with a name, with two buttons (for increment and decrement) and with a different style according to the counter value (e.g. red for negative numbers).

Video recording

Announcement: ITMeeting (Recommended for third year Bachelor’s or Master’s degree students)

On Monday, December 15th, 2024, from 9:30 a.m. to 4:00 p.m. will take place the 54th ITMeeting, the six-monthly meeting between undergraduates and recent graduates of the Sapienza Computer Science Degree Courses and companies producing or large users of IT solutions.

The meeting will be held from 9:30 to 16:00 in Viale Regina Elena 295, Building D and Aula Magna.

During the day, it will be possible to hold 10-minute interviews with each company and to attend the presentations of their activities, job opportunities,and offers for degree theses and internships. Classes for third-year bachelor’s and second-year master’s students will be suspended.

A few days before the event, each student will be provided with a summary document of the day, also containing the times of their own interviews with the individual companies.

Students can participate in the interviews upon registration on the form.




Thursday, 27 November 2025

Announcement: no classes today nor tuesday


Next class will be on Thursday, December 4th.




Tuesday, 25 November 2025

Lesson: Javascript, Vue.js


Video recording




Thursday, 20 November 2025

Lesson: HTML and CSS


  • HTML
  • CSS
  • Exercise continued from last lesson: finish the endpoints of the hi-lo game web app.

Video recording




Tuesday, 18 November 2025

Lesson: Go project structure (best practices)


Example:

openapi: 3.0.0
---
# 1) Define the security scheme type (HTTP bearer)
components:
  securitySchemes:
    bearerAuth: # arbitrary name for the security scheme
      type: http
      scheme: bearer

# 2) Apply the security globally to all operations
security:
  - bearerAuth: [] # use the same name as above

# 3) You can override security scheme in single operations, e.g.:
security: [] # No security

Homework2 is officially open to submissions

Video recording

Note on the login in the project In the WASAtext project, we asked for a kind of login functionality and provided instructions on how to implement it. Despite its name, we intended it as a means for you to test your web application and to demonstrate it at the exam.
So it is not a proper login and has no security capabilities. It is more of a way to create users in your system and impersonate them to test that it works properly.
For example, after creating two users, Mario and Luigi, you can impersonate Mario and send a message to Luigi, then impersonate Luigi read and reply to Mario’s message.
Please refrain from implementing an entire authentication system, using well-formed tokens, or designing different APIs than the one provided for this functionality!




Thursday, 13 November 2025

Lesson: GO packages, GO exercise


Suggested Go exercises: WASA book, chapter 5.6

Video recording




Tuesday, 11 November 2025

Lesson: GO interfaces, errors


Video recording




Thursday, 6 November 2025

Lesson: GO


Video recording





Friday 31 October 2025

Exam schedule available for the Extra-ordinary appeal


The appeal is on Tuesday, November 4th, 2025

The exam schedule for oral discussions is available here: Schedule for November 2025 exams.

IMPORTANT: exams will be in our lab: GamificationLab, via dei Volsci 122.

IMPORTANT! Remind to bring an identity document and a laptop with you. More information in the exam page.




Thursday, 28 October 2025

WASAText Project: specifications and Homework 1


  • Fountain exercise on swagger
openapi: 3.0.0
info:
  title: Fountains
  description: |
    This API allows locating and creating fountains in a town.
  version: 0.0.1
paths:
  /fountains:
    post:
      summary: add (create) a new fountain
      description: |
        add a new fountain and get back the fountain id
      requestBody:
        description: all the attributes are used but the id
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/fountain"
      responses:
        "201":
          description: new fountain created
          content: 
            application/json:
              schema:
                type: integer
    get:
      summary: list all fountains
      description: |
        obtain the list of all the fountains, 
        with coordinates (lat and lon), status (good/faulty)
        Specifying lat and lon, it returns the 5 nearest fountains
      parameters:
        - name: lat
          required: false
          in: query
          schema:
            type: number
        - name: lon
          required: false
          in: query
          schema:
            type: number
      responses:
        "200":
          description: |
            It is an array of objects
            containing the fountain id, its coordinates
            and its status
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/fountain"
        "400":
          description: |
            either lat or lon missing or out of range
  /fountains/{id}:
    parameters:
    - name: id
      in: path
      required: true
      description: this is the fountain id
      schema:
        type: integer
        description: | 
          an incremental number 
          for each fountain
    delete:
      summary: remove a fountain
      description: |
        this deletes the fountain forever
      responses:
        "200":
          description: fountain removed successfully
        "404":
          description: fountain not found, nothing has been deleted
    put:
      summary: change fountain data (lat and/or lon and/or status)
      description: |
        the old attributes will be overriden
      requestBody:
        description: | 
          all the attributes are necessary and will override the old 
          ones (not the id)
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/fountain"
      responses:
        "204":
          description: An existing fountain has been updated
        "400":
          description: |
            one or more fields are incorrect
        "404":
          description: |
            Fountain not found. Nothing has been changed.
        "422":
          description: |
            fountain id in the path and in the body do not match
    get:
      summary: get fountain information
      description: |
        Return the attributes of the fountain, lat, lon, status
      responses:
        "200":
          description: | 
            the fountain is described in the body of this response
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/fountain"
        "404":
          description: fountain not found
components:
  schemas:
    fountain:
      type: object
      properties:
        id:
          type: integer
        lat:
          type: number
        lon:
          type: number
        status:
          type: string
          enum:
          - good
          - faulty
        

Video recording




Thursday, 23 October 2025

Practice: Fountains


Exercise

Fontanella or Nasone

Define the API for the Fountains project (fountains are called Fontanelle or Nasoni in Rome). The Fountains project includes a mobile app that allows citizens and tourists to explore nearby drinking fountains.

In Rome, drinking water is available thanks to little public fountains, also known as “nasoni” (“large noses”, due to their nose-like shape). They were installed in the late 1800 by the local municipalities in the capital city and nearby areas. More than 2500 are still working. The “Fountains” project includes a mobile app that allows citizens and tourists to explore nearby drinking fountains (see their location and status). Also, they will be able to change the status or location of any fountains, add missing fountains, and remove those that are no longer present. A fountain’s status is “good” when it is in working condition and “faulty” if broken. The app will communicate with a central server via REST and JSON - no information is stored locally in the smartphone. No authentication is needed, nor is user identification.

WASA BOOK section 4.3.

Video recording




Tuesday 21 October 2025

News appello straorinario

Daily assessments begin tomorrow, and the last one will be Thursday morning, October 30th, so the deadline for pushing your code to the github repo is Wednesday evening. Registration for the exam on Infostud must also be completed by Wednesday evening, October 29th. The oral exams, if admitted, will be Tuesday, November 4th.

Practice API


In the exercise we decided to avoid creating a new game using the PUT /games/{id} operation, so we did not define the 201 response; on the other hand we had to define the 404 response as follows:

put:
      summary: reset a game
      description: |
        reset an existing game generating a 
        new secret number and resetting the 
        guess counter
      responses:
        "200":
          description: An existing game is reset
        "404":
          description: |
            Game not found. Nothing has been reset

Also, we modified the response content for the POST /games/{id} and the GET /games/{id} to include the guess value:

          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    guess-count:
                      type: integer
                      minimum: 1
                      maximum: 10
                    guess-value:
                      type: integer
                      minimum: 1
                      maximum: 100
                    guess-outcome:
                      type: string
                      enum:
                      - hi
                      - lo
                      - correct
        "404":
          description: game not found

and finally these are the components that we defined:

components:
  schemas:
    guess:
      type: object
      properties:
        guess-count:
          type: integer
          minimum: 1
          maximum: 10
        guess-value:
          type: integer
          minimum: 1
          maximum: 100
        guess-outcome:
          type: string
          enum:
          - hi
          - lo
          - correct
    final-result:
      type: object
      properties:
        id:
          type: integer
        outcome:
          type: string
          enum:
          - win
          - lose
        guesses:
          type: integer 

Video recording

TODO today
fill out the OPIS form: ZRXB15PK

Internships available (Theses)




Thursday October 16 2025

Practice: API


Video recording




Tuesday 14 October 2025

Lesson: HTTP, JSON, YAML, API


IMPORTANT: ROOM CHANGED
On Tuesdays, starting TODAY, WASA room is changed to Aula 7 Castro Laurenziano see address below. (Room 11 will no longer be used by WASA on tuesdays, but will still be used on thursdays)

Video recording




Tuesday October 14 2025

Classroom Change on Tuesdays: Room 7 Castro Laurenziano


From now on, every Tuesday starting today, we will be in room 7 via del Castro Laurenziano 7/a.




Monday October 6 2025

No classes this week


Next class will be on Tuesday October 14th.




Thursday October 2 2025

Practice: Git (continued)


Today’s lesson (Thursday October 2 2025) is confirmed in our normal room Aula 11 Via Scarpa.

$ git config --global alias.lg "log --graph --abbrev-commit \
  --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) \
  - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- \
  %an%C(reset)%C(bold yellow)%d%C(reset)' --all"




Tuesday, September 30 2025

Lesson: Git (continued)


REMINDER
today’s lecture is in room Aula 11 Via Scarpa 10c

BLACKBOARD

Chalkboard diagram showing Git branching and merging, with a LOGINP feature branch merging into the MASTER branch, including commit IDs.




Thursday 25 September 2025

Lesson: Git


REMINDER
today’s lecture is in room 203 Marco Polo Building

Video recording




Tuesday 23 September 2025

Lesson: Introduction, Web apps, and REST


This is the first lecture for the new academic year 2025/26. Welcome!

Introduction

Announcements:

Topics today:

Video recording





Thursday 17 September 2025

Extra-ordinary appeal


The extraordinary appeal will be on Tuesday, November 4. The deadline for the last homework submission, as well as to register on Infostud, is:

Wednesday, October 29, 23:59

Homework evaluation will be weekly on Wednesday starting again from Wednesday September 24th and then daily from Wednesday October 22nd to Thursday October 30th.

The appeal is already open on Infostud: Please register now!





Thursday 17 September 2025

WASA 2025/2026 will start next week


The classes will be on

  • Tuesdays, 3 PM to 6 PM
  • Thursdays, 4 PM to 6 PM

For the first week (i.e. 23 and 26 september), the room is:

Aula 203 Marco Polo (second floor) Circonvallazione Tiburtina 4.





vvvvvvvv2024/25vvvvvvvvv




PREVIOUS
Academic Year 2025/26
NEXT