[
  {
    "id": "252-NSWI170",
    "code": "NSWI170",
    "name": "Počítačové systémy (Computer Systems)",
    "academic_year": "2025/2026",
    "term": "summer",
    "sis_term_code": "252",
    "description": "The course is a cornerstone for understanding the function of computers, compilers, and operating systems. The skills and knowledge acquired at this course are necessary for completing other subjects. An integral part of the course are practical exercises on suitably selected simple hardware or in an emulated environment.",
    "schedule": [
      {
        "day": "Monday",
        "time": "12:20-13:50 (even weeks)",
        "room": "N11"
      }
    ],
    "mobile_friendly": true,
    "external_url": "https://teaching.ms.mff.cuni.cz/nswi170-web/pages/labs/bednarek",
    "evaluation": {
      "source": "SIS Student Survey",
      "survey_url": "https://is.cuni.cz/studium/anketa/index.php?do=vysledky&skr=2025&sem=3&fak=11320&co=1&ucit=74478&sekce=&povinn=NSWI170&ustav=-1&vyuka=-1&zobraz=Zobraz"
    },
    "semester": "252",
    "year": "2025/2026",
    "abbrev": "NSWI170",
    "when": [
      {
        "day": "Monday",
        "time": "12:20-13:50 (even weeks)",
        "room": "N11"
      }
    ],
    "link": "https://teaching.ms.mff.cuni.cz/nswi170-web/pages/labs/bednarek",
    "external": true,
    "desc": "The course is a cornerstone for understanding the function of computers, compilers, and operating systems. The skills and knowledge acquired at this course are necessary for completing other subjects. An integral part of the course are practical exercises on suitably selected simple hardware or in an emulated environment."
  },
  {
    "id": "252-NDBI046",
    "code": "NDBI046",
    "name": "Introduction to Data Engineering",
    "academic_year": "2025/2026",
    "term": "summer",
    "sis_term_code": "252",
    "description": "The aim of the course is to introduce students to the basics of working with data and common operations in a typical data processing process. This includes data acquisition, data cleaning, transformation, validation, cataloging, versioning, description, accessing through APIs, integration, search, compression, encryption, and working with big and distributed data",
    "schedule": [
      {
        "day": "Thursday",
        "time": "12:20-13:50",
        "room": "SW2"
      }
    ],
    "mobile_friendly": true,
    "page": {
      "enabled": true,
      "path": "teaching/252-NDBI046/index.html",
      "kicker": "Practical class"
    },
    "sections": [
      {
        "title": "Basic Information",
        "anchor": "basic-information",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "[Annotation (source: SIS)](https://is.cuni.cz/studium/predmety/index.php?do=predmet&kod=NDBI046)"
              },
              {
                "text": "Lecturer: Petr Škoda (petr.skoda (at) matfyz.cuni.cz)"
              },
              {
                "text": "Tutor: Pavel Koupil (pavel.koupil (at) matfyz.cuni.cz), Petr Škoda (petr.skoda (at) matfyz.cuni.cz)"
              },
              {
                "text": "[Lectures](https://teaching.mff.cuni.cz/ndbi046-web/)"
              },
              {
                "text": "Schedule",
                "children": [
                  {
                    "text": "Lectures: Wednesday 10:40 - 12:10 (room S4)"
                  },
                  {
                    "text": "Practical classes: Thursday 12:20 - 13:50 (room SW2)"
                  }
                ]
              },
              {
                "text": "[Table with points and feedback](https://www.icloud.com/numbers/016rrYwCbkHIFJYeM32A1k96Q#252-NDBI046-Points)"
              }
            ]
          }
        ]
      },
      {
        "title": "Formal Requirements",
        "anchor": "formal-requirements",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "The course will be explained at the first practical class (**recommended attendance**)"
              },
              {
                "text": "There will be **two invited lectures** instead of a practical class during the semester (**compulsory attendance**)"
              },
              {
                "text": "The remaining practical classes are carried out in the form of homework assignments and individual consultations",
                "children": [
                  {
                    "text": "Consultations can be arranged by email and are held by agreement in the 209 office or online via Zoom"
                  }
                ]
              },
              {
                "text": "Homework Assignments",
                "children": [
                  {
                    "text": "You will be assigned **6 individual homework** during the semester"
                  },
                  {
                    "text": "Completing a homework may award you **up to 10 points**"
                  },
                  {
                    "text": "There will always be **at least 7 days (usually 14)** for completing homework assignment"
                  },
                  {
                    "text": "Particular homework solution can be submitted **only once**"
                  },
                  {
                    "text": "**One late submission** is accepted"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "title": "Course Credit",
        "anchor": "course-credit",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "**At least 6 points from each homework** is required for the course credit to be granted"
              },
              {
                "text": "Points earned above this limit are transferred as a bonus to the exam",
                "children": [
                  {
                    "text": "I.e., you can earn up to **4 extra points for each homework solution**, up to a total of **24 points** for the exam"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "title": "Use of Generative AI Tools",
        "anchor": "generative-ai",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "The use of generative AI tools (e.g., large language models, code assistants) is **permitted** in homework assignments."
              },
              {
                "text": "However, the **written report must be prepared entirely by the student(s)**. The report may **not** be generated, rewritten, or stylistically polished using AI tools."
              },
              {
                "text": "Students must explicitly state in their submission:",
                "children": [
                  {
                    "text": "**whether generative AI was used**, and"
                  },
                  {
                    "text": "**for what specific purpose it was used** (e.g., code suggestions, debugging assistance, conceptual explanation)."
                  }
                ]
              },
              {
                "text": "Students remain **fully responsible** for the correctness, quality, and originality of their submission."
              },
              {
                "text": "Any errors, incorrect solutions, or violations of assignment requirements resulting from the use of AI tools will be evaluated in the same manner as if they had been made by the student. **No special consideration** will be given to mistakes produced by AI-generated content."
              }
            ]
          }
        ]
      },
      {
        "title": "Schedule and Study Material",
        "anchor": "schedule",
        "blocks": [
          {
            "type": "table",
            "headers": [
              "Date",
              "Content",
              "Supplementary Material",
              "Solution",
              "Homework"
            ],
            "rows": [
              [
                "19. 2. 2026",
                "Introduction",
                "[Programování 1 (Python; Czech only)](../231-NPRG030/index.html)",
                "-",
                "-"
              ],
              [
                "26. 2. 2026",
                "[User Story, Extract (.pdf)](asset:class02/NDBI046_02_Extract.pdf)",
                "[requirements.txt](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class02/requirements.txt)\n[urls.txt](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class02/urls.txt)\n[dataset_expenses.json](asset:class02/dataset_expenses.json)",
                "[Example 2.1 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class02/extract_waste_csv.py)\n[Exercise 2.2 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class02/extract_expenses_json.py)\n[Exercise 2.3 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class02/extract_regions_xml.py)\n[Example 2.4 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class02/extract_population_excel.py)",
                "-"
              ],
              [
                "5. 3. 2026",
                "[Transform (.pdf)](asset:class03/NDBI046_03_Transform.pdf)",
                "-",
                "[Example 3.2 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class03/transform_regions.py)\n[Exercise 3.3 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class03/transform_waste.py)\n[Exercise 3.4 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class03/transform_population.py)\n[Example 3.5 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class03/join_waste_population.py)\n[Exercise 3.6 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class03/transform_expenses.py)\n[Exercise 3.7 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class03/transform_finalize.py)",
                "-"
              ],
              [
                "12. 3. 2026",
                "[Load (.pdf)](asset:class04/NDBI046_04_Load.pdf)",
                "[prereq.txt](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/prereq.txt)\n[requirements.txt](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/requirements.txt)\n[connection.json](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/connection.json)\n[datasets.json](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/datasets.json)",
                "[Example 4.1 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/single_dim_regions.py)\n[Example 4.2 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/bulk_with_ic_dim_regions.py)\n[Example 4.3 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/bulk_dim_regions.py)\n[Exercise 4.4 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/bulk_all.py)",
                "[HW1 (.pdf)](asset:class04/HW1.pdf)"
              ],
              [
                "19. 3. 2026",
                "Invited Lecture: Data Warehouse in Banking (Vladimír Fiklík, Raiffeisenbank)"
              ],
              [
                "26. 3. 2026",
                "[Apache Airflow (.pdf)](asset:class06/NDBI046_06_Apache_Airflow.pdf)",
                "[Dockerfile](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/Dockerfile)\n[docker-compose.yaml](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/docker-compose.yaml)\n[requirements.txt](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/requirements.txt)",
                "[Example 6.1 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/dag_bash_operator.py)\n[Example 6.2 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/dag_python_operator.py)\n[Exercise 6.3 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/dag_xcoms.py)\n[Example 6.4 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/dag_postgre_operator.py)\n[Exercise 6.5 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/dag_taskflow.py)\n[Exercise 6.6 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/dag_etl.py)\nExercise 6.7 (not provided)",
                "[HW2 (.pdf)](asset:class06/HW2.pdf)"
              ],
              [
                "2. 4. 2026",
                "Invited Lecture: Data Mesh (Lukáš Mazánek, Raiffeisenbank)"
              ],
              [
                "9. 4. 2026:",
                "[Data Cube (.pdf)](asset:class07/NDBI046_07_Data_Cube.pdf)",
                "[Well-formed data cube validation script](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class07/check-well-formed.py)",
                "[Example 7.1 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class07/cube_structure.py)\n[Example 7.2 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class07/cube_dataset.py)\n[Exercise 7.3 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class07/cube_multiple_measures.py)\n[Exercise 7.4 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class07/cube_dataset_metadata.py)\n[Exercise 7.5 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class07/cube_resources.py)\nExercise 7.6 (not provided)\nExercise 7.7 (not provided)",
                "[HW3 (.pdf)](asset:class08/HW3.pdf)"
              ],
              [
                "16. 4. 2026",
                "Invited Lecture: TBD (Roman Tobíšek, Raiffeisenbank)"
              ],
              [
                "23. 4. 2026",
                "[Data Provenance (.pdf)](asset:class09/NDBI046_09_Data_Provenance.pdf)",
                "-",
                "[Example 9.1 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class09/prov-o-regions.pdf)\n[Example 9.2 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class09/prov-starting-regions.py)\n[Exercise 9.3 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class09/prov-expanded-etl.py)\nExercise 9.4 (not provided)\nExercise 9.5 (not provided)",
                "[HW4 (.pdf)](asset:class10/HW4.pdf)"
              ],
              [
                "30. 4. 2026",
                "[Data catalog and metadata (.pdf)](asset:class10/NDBI046_10_Data_Catalog.pdf)",
                "-",
                "[Example 10.1 (.pdf)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class10/catalog.py)\n[Example 10.2 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class10/catalog_tech.py)\n[Exercise 10.3 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class10/catalog_prov.py)\n[Example 10.4 (link)](http://eurovoc.europa.eu/1158)\n[Exercise 10.5 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class10/catalog_dom.py)\nExercise 10.6 (not provided)\nExercise 10.7 (not provided)",
                "[HW5 (.pdf)](asset:class11/HW5.pdf)"
              ],
              [
                "7. 5. 2026",
                "Invited Lecture: Data Driven Company (Czech language, Jaroslav Rys, Škoda Auto)"
              ],
              [
                "14. 5. 2026",
                "[Data Integrity (.pdf)](asset:class12/NDBI046_12_Data_Integrity.pdf)",
                "-",
                "[Exercise 12.1 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class12/checksum.py)\n[Example 12.2 (.sh)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class12/csr.sh)\n[Example 12.3 (.sh)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class12/sign_cat.sh)\nExercise 12.4 (not provided)",
                "[HW6 (.pdf)](asset:class13/HW6.pdf)"
              ]
            ]
          }
        ]
      },
      {
        "title": "Recommended Literature",
        "anchor": "literature",
        "blocks": []
      }
    ],
    "evaluation": {
      "source": "SIS Student Survey",
      "survey_url": "https://is.cuni.cz/studium/anketa/index.php?do=vysledky&skr=2025&sem=3&fak=11320&co=1&ucit=74478&sekce=&povinn=NDBI046&ustav=-1&vyuka=-1&zobraz=Zobraz"
    },
    "class_count": 13,
    "semester": "252",
    "year": "2025/2026",
    "abbrev": "NDBI046",
    "when": [
      {
        "day": "Thursday",
        "time": "12:20-13:50",
        "room": "SW2"
      }
    ],
    "link": "teaching/252-NDBI046/index.html",
    "external": false,
    "desc": "The aim of the course is to introduce students to the basics of working with data and common operations in a typical data processing process. This includes data acquisition, data cleaning, transformation, validation, cataloging, versioning, description, accessing through APIs, integration, search, compression, encryption, and working with big and distributed data"
  },
  {
    "id": "252-NDBI040",
    "code": "NDBI040",
    "name": "Modern Database Systems",
    "academic_year": "2025/2026",
    "term": "summer",
    "sis_term_code": "252",
    "description": "Practical classes for modern database systems, covering document, key-value, column-family, graph and multi-model databases, distributed data processing, polystores, and schema/evolution management through hands-on experiments with systems such as MongoDB, Redis, Cassandra, Neo4j, MinIO and Apache Spark.",
    "schedule": [
      {
        "day": "Wednesday",
        "time": "09:00-10:30",
        "room": "SW2"
      },
      {
        "day": "Wednesday",
        "time": "14:00-15:30",
        "room": "S1"
      }
    ],
    "mobile_friendly": true,
    "page": {
      "enabled": true,
      "path": "teaching/252-NDBI040/index.html",
      "kicker": "Practical class"
    },
    "sections": [
      {
        "title": "Basic Information",
        "anchor": "basic-information",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "[Annotation (source: SIS)](https://is.cuni.cz/studium/predmety/index.php?do=predmet&kod=NDBI046)"
              },
              {
                "text": "Lecturer: Irena Holubová (irena.holubova (at) matfyz.cuni.cz)"
              },
              {
                "text": "Tutors:",
                "children": [
                  {
                    "text": "Irena Holubová (irena.holubova (at) matfyz.cuni.cz)"
                  },
                  {
                    "text": "Pavel Koupil (pavel.koupil (at) matfyz.cuni.cz)"
                  },
                  {
                    "text": "Jakub Lokoč (jakub.lokoc (at) matfyz.cuni.cz)"
                  }
                ]
              },
              {
                "text": "[Lectures](https://www.ksi.mff.cuni.cz/~holubova/NDBI040/)"
              },
              {
                "text": "Schedule",
                "children": [
                  {
                    "text": "Lectures: Friday 10:40 - 12:10 (room S3)"
                  },
                  {
                    "text": "Practical classes:",
                    "children": [
                      {
                        "text": "Wednesday 9:00 - 10:30 (room SW2 - Irena Holubová and Pavel Koupil)"
                      },
                      {
                        "text": "Wednesday 14:00 - 15:30 (room S1 - Irena Holubová and Pavel Koupil)"
                      },
                      {
                        "text": "Friday 9:00 - 10:30 (room SW2 - Jakub Lokoč)"
                      }
                    ]
                  }
                ]
              },
              {
                "text": "[Table with points and feedback](https://www.icloud.com/numbers/0e79hyQ7nk5-pOHNu_HkKfGZA#252-NDBI040-Points)"
              }
            ]
          }
        ]
      },
      {
        "title": "Formal Requirements",
        "anchor": "formal-requirements",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Attendance at practical classes is not compulsory; however, it is strongly recommended."
              },
              {
                "text": "During each practical session, students may earn up to 1 activity point for successfully solving the assigned exercises."
              },
              {
                "text": "**Live attendance is not required** to obtain activity points.",
                "children": [
                  {
                    "text": "If you miss a practical class (for any reason), you will still have the opportunity to earn the activity point in offline mode."
                  },
                  {
                    "text": "For each practical class, one designated exercise will be provided. By solving this exercise, you can obtain the corresponding bonus point."
                  },
                  {
                    "text": "Only one activity point may be earned per session — either online or offline."
                  }
                ]
              },
              {
                "text": "Homework Assignments",
                "children": [
                  {
                    "text": "A total of five (5) homework assignments will be assigned during the semester."
                  },
                  {
                    "text": "Each homework may be completed either:",
                    "children": [
                      {
                        "text": "**Individually (solo version)** - the role is assigned and cannot be chosen, or"
                      },
                      {
                        "text": "**In pairs (team version)** - two students collaborate, assuming distinct roles: database engineer, software engineer."
                      }
                    ]
                  },
                  {
                    "text": "In the team version, one student works in the role of Software Engineer and the other in the role of Database Engineer."
                  },
                  {
                    "text": "During the semester, **each student must complete at least one homework assignment in each role** (i.e., at least once as Software Engineer and at least once as Database Engineer)."
                  },
                  {
                    "text": "Each homework assignment may award **up to 10 points**."
                  },
                  {
                    "text": "Students will always have **at least 14 days** to complete and submit each homework."
                  },
                  {
                    "text": "Each homework may be submitted **only once** (no resubmissions are permitted)."
                  },
                  {
                    "text": "Each submission must include a **written report** clearly describing the contributions of each team member. Points are awarded based on both the technical solution and the reported contributions."
                  },
                  {
                    "text": "Students may switch from the team version to the solo version at any time during the semester (e.g., in case of inactivity of a team member)."
                  },
                  {
                    "text": "**One late submission** during the semester will be accepted. Any additional late submissions will not be accepted."
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "title": "Course Credit",
        "anchor": "course-credit",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "To obtain course credit, a student must earn **at least 7 points from each of Homework 1–4**."
              },
              {
                "text": "**Homework 5 is a bonus assignment**; no minimum number of points is required for this assignment."
              },
              {
                "text": "Points earned above the required 7-point minimum (from Homework 1–4), together with activity points from practical classes, may be transferred to the exam as bonus points.",
                "children": [
                  {
                    "text": "Specifically:",
                    "children": [
                      {
                        "text": "Up to **3 bonus points per homework** (Homework 1–4),"
                      },
                      {
                        "text": "Up to **10 bonus points from Homework 5**,"
                      },
                      {
                        "text": "Up to **8 activity points** from practical classes."
                      }
                    ]
                  },
                  {
                    "text": "In total, students may earn up to **30 bonus points**; however, **no more than 25 bonus points** (in any combination) may be transferred to the exam."
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "title": "Use of Generative AI Tools",
        "anchor": "generative-ai",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "The use of generative AI tools (e.g., large language models, code assistants) is **permitted** in homework assignments."
              },
              {
                "text": "However, the **written report must be prepared entirely by the student(s)**. The report may **not** be generated, rewritten, or stylistically polished using AI tools."
              },
              {
                "text": "Students must explicitly state in their submission:",
                "children": [
                  {
                    "text": "**whether generative AI was used**, and"
                  },
                  {
                    "text": "**for what specific purpose it was used** (e.g., code suggestions, debugging assistance, conceptual explanation)."
                  }
                ]
              },
              {
                "text": "Students remain **fully responsible** for the correctness, quality, and originality of their submission."
              },
              {
                "text": "Any errors, incorrect solutions, or violations of assignment requirements resulting from the use of AI tools will be evaluated in the same manner as if they had been made by the student. **No special consideration** will be given to mistakes produced by AI-generated content."
              }
            ]
          }
        ]
      },
      {
        "title": "Schedule and Study Material",
        "anchor": "schedule",
        "blocks": [
          {
            "type": "table",
            "headers": [
              "Date",
              "Content",
              "Supplementary Material",
              "Solution",
              "Homework"
            ],
            "rows": [
              [
                "(We) 11. 3. 2026\n(Fr) 13. 3. 2026",
                "[MinIO & Apache Spark](asset:class01/NDBI040_01_MinIO_Spark.pdf)\n[Video Recording (ENG)](https://youtu.be/6vn-Gvu3CCk)",
                "[README.md](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab01-minio-spark/readme.MD)\n[Dockerfile](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab01-minio-spark/Dockerfile.spark-minio)\n[docker-compose.yml](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab01-minio-spark/docker-compose.yml)\n[requirements.txt](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab01-minio-spark/requirements.txt)\n[generate_transactions.py](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab01-minio-spark/generate_transactions.py)\n[mc.sh](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab01-minio-spark/mc.sh)\n[movies.txt](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab01-minio-spark/movies.txt)\nSkeletons:\n[Exercise 1.3 skeleton (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab01-minio-spark/13_daily_revenue.py)\n[Exercise 1.4 skeleton (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab01-minio-spark/14_convert_formats_and_partition.py)\n[Exercise 1.5 skeleton (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab01-minio-spark/15_last_30_days_revenue.py)",
                "[boto3 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab01-minio-spark/10_boto3.py)\n[Example 1.2 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab01-minio-spark/12_transactions_analysis.py)\n[Exercise 1.3 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web-solutions/-/blob/master/lab01-minio-spark/13_daily_revenue.py)\n[Exercise 1.4 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web-solutions/-/blob/master/lab01-minio-spark/14_convert_formats_and_partition.py)\n[Exercise 1.5 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web-solutions/-/blob/master/lab01-minio-spark/15_last_30_days_revenue.py)",
                "[HW (.md)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab01-minio-spark/hw.md)"
              ],
              [
                "(We) 18. 3. 2026\n(Fr) 20. 3. 2026",
                "[Redis and Caching Patterns](asset:class02/NDBI040_02_Redis_Caching.pdf)\n[Video Recording (ENG)](https://youtu.be/NZaBl1h20I4)",
                "[README.md](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab02-redis-caching/readme.MD)\n[docker-compose.yml](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab02-redis-caching/docker-compose.yml)\n[requirements.txt](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab02-redis-caching/requirements.txt)\n[.env.example (update credentials!)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab02-redis-caching/.env.example)\nSkeletons:\n[Exercise 2.3 skeleton (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab02-redis-caching/app/23_product_cache_hash_ttl.py)\n[Exercise 2.4 skeleton (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab02-redis-caching/app/24_offer_update_invalidation.py)\n[Exercise 2.5 skeleton (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab02-redis-caching/app/25_recent_views_list.py)\n[Exercise 2.6 skeleton (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab02-redis-caching/app/26_product_keywords_set.py)\n[Exercise 2.7 skeleton (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab02-redis-caching/app/27_product_leaderboard_zset.py)\n[Exercise 2.8 skeleton (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab02-redis-caching/app/28_wrong_search_key_explosion.py)",
                "[Example 2.1 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab02-redis-caching/app/21_product_cache_json.py)\n[Example 2.2 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab02-redis-caching/app/22_product_cache_hash.py)\n[Exercise 2.3 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web-solutions/-/blob/master/lab02-redis-caching/23_product_cache_hash_ttl.py)\n[Exercise 2.4 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web-solutions/-/blob/master/lab02-redis-caching/24_offer_update_invalidation.py)\n[Exercise 2.5 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web-solutions/-/blob/master/lab02-redis-caching/25_recent_views_list.py)\n[Exercise 2.6 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web-solutions/-/blob/master/lab02-redis-caching/26_product_keywords_set.py)\n[Exercise 2.7 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web-solutions/-/blob/master/lab02-redis-caching/27_product_leaderboard_zset.py)\n[Exercise 2.8 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web-solutions/-/blob/master/lab02-redis-caching/28_wrong_search_key_explosion.py)",
                ""
              ],
              [
                "(We) 25. 3. 2026\n(Fr) 27. 3. 2026",
                "[MongoDB](asset:class03/NDBI040_03_MongoDB.pdf)",
                "[README.md](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab03-mongodb/README.md)\n[docker-compose.yml](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab03-mongodb/docker-compose.yml)\n[requirements.txt](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab03-mongodb/requirements.txt)\n[models.py](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab03-mongodb/models.py)\n[seed_mongo.py](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab03-mongodb/seed_mongo.py)\n[mongocheck.sh](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab03-mongodb/mongocheck.sh)\nSkeletons:\n[Exercise 3.9 skeleton (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab03-mongodb/39_caching.py)",
                "[Exercises 3.1-3.6 (.txt)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web-solutions/-/blob/master/lab03-mongodb/31-36_queries.txt)\n[Example 3.7 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab03-mongodb/37_mongo_engine.py)\n[Exercise 3.8 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web-solutions/-/blob/master/lab03-mongodb/38_flexible_schema.py)\n[Exercise 3.8 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web-solutions/-/blob/master/lab03-mongodb/39_caching_solved.py)",
                ""
              ],
              [
                "(We) 8. 4. 2026\n(Fr) 10. 4. 2026",
                "[Apache Cassandra](asset:class04/NDBI040_04_Apache_Cassandra.pdf)",
                "[README.md](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab04-cassandra/README.md)\n[docker-compose.yml](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab04-cassandra/docker-compose.yml)\n[requirements.txt](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab04-cassandra/requirements.txt)\n[app (seed & .env)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab04-cassandra/app)\nSkeletons:\n[Exercise 4.7 skeleton (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab04-cassandra/app/47_bucket_merge.py)",
                "[Example 4.1 (.cql)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab04-cassandra/cql/41_bad_queries.cql)\n[Example 4.2 (.cql)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab04-cassandra/cql/42_allow_filtering.cql)\n[Example 4.3 (.cql)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab04-cassandra/cql/43_customer_profile.cql)\n[Exercise 4.4 (.cql)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web-solutions/-/blob/master/lab04-cassandra/cql/44_digital_table.cql)\n[Exercise 4.5 (.cql)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web-solutions/-/blob/master/lab04-cassandra/cql/45_continue_watching.cql)\n[Example 4.6 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab04-cassandra/app/46_cqlengine.py)\n[Exercise 4.7 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web-solutions/-/blob/master/lab04-cassandra/app/47_bucket_merge_SOLVED.py)\n[Exercise 4.8 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web-solutions/-/blob/master/lab04-cassandra/app/48_bucket_merge_cached_SOLVED.py)",
                "[HW2 (.md)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab04-cassandra/hw2.md)"
              ],
              [
                "(We) 15. 4. 2026\n(Fr) 17. 4. 2026",
                "[Neo4j](asset:class06/NDBI040_06_Neo4j.pdf)",
                "[README.md](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab06-neo4j/README.md)\n[docker-compose.yaml](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab06-neo4j/docker-compose.yaml)\n[requirements.txt](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab06-neo4j/requirements.txt)\n[app (seed & .env)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab06-neo4j/app)",
                "Example 6.1 (included in README.md)\n[Exercises 6.2-6.5 (.txt)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web-solutions/-/blob/master/lab06-neo4j/62-65_cypher.txt)\nExercise 6.6 (.txt)\n[Example 6.7 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab06-neo4j/app/67_ogm_example.py)",
                ""
              ],
              [
                "(We) 22. 4. 2026\n(Fr) 24. 4. 2026",
                "[Multi-Model Database Systems - ArangoDB](asset:class07/NDBI040_07_ArangoDB.pdf)",
                "[README.md](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab07-arangodb/README.md)\n[docker-compose.yml](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab07-arangodb/docker-compose.yml)\n[requirements.txt](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab07-arangodb/requirements.txt)\n[app (seed & .env)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab07-arangodb/app)",
                "Example 7.1 (included in README.md)\nExercises 7.2-7.5 (.txt)\nExercises 7.6-7.7 (.txt)\n[Example 7.8 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab07-arangodb/app/78_liked_products.py)",
                "[HW3 (.md)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab07-arangodb/hw3.md)"
              ],
              [
                "(We) 6. 5. 2026\n(Fr) 15. 5. 2026",
                "[Polystores](asset:class08/NDBI040_08_Polystores.pdf)",
                "[README.md](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab08-polystores/README.md)\n[docker-compose.yml](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab08-polystores/docker-compose.yml)\n[requirements.txt](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab08-polystores/requirements.txt)\n[trino properties](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab08-polystores/trino)\n[seed_all.py](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab08-polystores/python/seed_all.py)",
                "[Example 8.1 (.sql)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab08-polystores/queries/81_customer_identity_check.sql)\nExercises 8.2-8.7 (.sql)\n[Example 8.8 (.py)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab08-polystores/python/89_sqlalchemy.py)",
                "[HW4 (.md)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab08-polystores/hw4.md)"
              ],
              [
                "(We) 20. 5. 2026\n(Fr) 22. 5. 2026",
                "[Evolution Management](asset:class09/NDBI040_09_ Evolution_Management.pdf)",
                "[README.md](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab09-evolution/README.md)\n[docker-compose.yml](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab09-evolution/docker-compose.yml)\n[requirements.txt](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab09-evolution/requirements.txt)\n[seed_mongo_v1.py](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab09-evolution/app/seed_mongo_v1.py)\n[schema.cql](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab09-evolution/cql/schema.cql)\n[nar extensions](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab09-evolution/nar)\n[91_orders_v1_to_v2.json](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab09-evolution/nifi/jolt/91_orders_v1_to_v2.json)\n[93_orders_to_orders_by_customer_month.json](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab09-evolution/nifi/jolt/93_orders_to_orders_by_customer_month.json)\nSkeletons:\n[94_orders_to_order_items_by_product_month.json](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab09-evolution/nifi/jolt/94_orders_to_order_items_by_product_month.json)",
                "[Example 9.1 (.json)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab09-evolution/91_order_schema_evolution_flow.json)\nExample 9.2 (not provided)\n[Example 9.3 (.json)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab09-evolution/93_orders_to_orders_by_customer_month.json)\nExercise 9.4 (.json)\nExercise 9.5 (.cql)\nExercise 9.6 (not provided)",
                "[HW5 (.md)](https://gitlab.mff.cuni.cz/teaching/ndbi040/web/-/blob/master/lab09-evolution/hw5.md)"
              ]
            ]
          }
        ]
      },
      {
        "title": "Recommended Literature",
        "anchor": "literature",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Holubová, Irena - Kosek, Jiří - Minařík, Karel - Novák, David: Big Data a NoSQL databáze.\n\nISBN: 978-80-247-5466-6 (hardcover), 978-80-247-5938-8 (eBook PDF), 978-80-247-5939-5 (eBook EPUB).\n\nGrada Publishing, a.s., 2015."
              }
            ]
          }
        ]
      }
    ],
    "evaluation": {
      "source": "SIS Student Survey",
      "survey_url": "https://is.cuni.cz/studium/anketa/index.php?do=vysledky&skr=2025&sem=3&fak=11320&co=1&ucit=74478&sekce=&povinn=NDBI040&ustav=-1&vyuka=-1&zobraz=Zobraz"
    },
    "class_count": 8,
    "semester": "252",
    "year": "2025/2026",
    "abbrev": "NDBI040",
    "when": [
      {
        "day": "Wednesday",
        "time": "09:00-10:30",
        "room": "SW2"
      },
      {
        "day": "Wednesday",
        "time": "14:00-15:30",
        "room": "S1"
      }
    ],
    "link": "teaching/252-NDBI040/index.html",
    "external": false,
    "desc": "Practical classes for modern database systems, covering document, key-value, column-family, graph and multi-model databases, distributed data processing, polystores, and schema/evolution management through hands-on experiments with systems such as MongoDB, Redis, Cassandra, Neo4j, MinIO and Apache Spark."
  },
  {
    "id": "251-NPRG041",
    "code": "NPRG041",
    "name": "Programování v C++",
    "academic_year": "2025/2026",
    "term": "winter",
    "sis_term_code": "251",
    "description": "Course of programming in C++. Knowledge and understanding of object-oriented programming and general programming skills are required prior to enrolling the course.",
    "schedule": [
      {
        "day": "Thursday",
        "time": "10:40-12:10",
        "room": "S1"
      },
      {
        "day": "Thursday",
        "time": "15:40-16:50",
        "room": "S5"
      }
    ],
    "mobile_friendly": true,
    "external_url": "https://teaching.mff.cuni.cz/nprg041-web/",
    "evaluation": {
      "source": "SIS Student Survey",
      "survey_url": "https://is.cuni.cz/studium/anketa/index.php?do=vysledky&skr=2025&sem=3&fak=11320&co=1&ucit=74478&sekce=&povinn=NPRG041&ustav=-1&vyuka=-1&zobraz=Zobraz"
    },
    "semester": "251",
    "year": "2025/2026",
    "abbrev": "NPRG041",
    "when": [
      {
        "day": "Thursday",
        "time": "10:40-12:10",
        "room": "S1"
      },
      {
        "day": "Thursday",
        "time": "15:40-16:50",
        "room": "S5"
      }
    ],
    "link": "https://teaching.mff.cuni.cz/nprg041-web/",
    "external": true,
    "desc": "Course of programming in C++. Knowledge and understanding of object-oriented programming and general programming skills are required prior to enrolling the course."
  },
  {
    "id": "251-NDBI007",
    "code": "NDBI007",
    "name": "Principles of Data Organisation",
    "academic_year": "2025/2026",
    "term": "winter",
    "sis_term_code": "251",
    "description": "The aim of the course is to provide an overview of the basic principles of data organization. In the first part, students get acquainted with the basic methods of data storage and file organization types. We will also focus on data structures for efficient access to data, i.e. basic types of hashing and hierarchical indexing, including their use in traditional, primarily relational database systems. In the last part, we will focus on more advanced principles of data organization in the context of spatial, distributed and in-memory databases",
    "schedule": [
      {
        "day": "Friday",
        "time": "12:20-13:50",
        "room": "S4"
      }
    ],
    "mobile_friendly": true,
    "page": {
      "enabled": true,
      "path": "teaching/251-NDBI007/index.html",
      "kicker": "Practical class"
    },
    "sections": [
      {
        "title": "Basic Information",
        "anchor": "basic-information",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "[Annotation (source: SIS)](https://is.cuni.cz/studium/eng/predmety/index.php?do=predmet&kod=NDBI007)"
              },
              {
                "text": "Lecturer: Irena Holubová (irena.holubova (at) matfyz.cuni.cz)"
              },
              {
                "text": "Tutor: Irena Holubová (irena.holubova (at) matfyz.cuni.cz), Pavel Koupil (pavel.koupil (at) matfyz.cuni.cz)"
              },
              {
                "text": "[Lectures](https://www.ksi.mff.cuni.cz/~holubova/NDBI007/)"
              },
              {
                "text": "Schedule",
                "children": [
                  {
                    "text": "Lectures: Friday 10:40 - 12:10 (room S4)"
                  },
                  {
                    "text": "Practical classes:\n<ul>\n<li>Every even Friday 12:20 - 13:50 (room S4)"
                  }
                ]
              },
              {
                "text": "[Table with points](https://www.icloud.com/numbers/0bejncARuoREQw5oHNHtgl8NA#251-NDBI007-Points)"
              }
            ]
          }
        ]
      },
      {
        "title": "Formal Requirements",
        "anchor": "formal-requirements",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Attendance is not compulsory, yet recommended"
              },
              {
                "text": "During each 2nd to 6th practical class, 1 activity point can be acquired for solving exercises"
              },
              {
                "text": "Homework Assignments",
                "children": [
                  {
                    "text": "You will be assigned 5 individual homework during the semester"
                  },
                  {
                    "text": "There will be standard and extended version of the homework"
                  },
                  {
                    "text": "If you miss a practical class or you will not get bonus point during practical class, completing an extended version of homework may award you by 1 extra activity point"
                  },
                  {
                    "text": "Otherwise, up to 5 activity points can be earned for complete and correct solution"
                  },
                  {
                    "text": "There will always be at least 7 days for completing homework assignment"
                  },
                  {
                    "text": "Particular homework solution can be submitted only once (email: pavel.koupil@matfyz.cuni.cz)"
                  },
                  {
                    "text": "No late submission is accepted"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "title": "Course Credit",
        "anchor": "course-credit",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "At least 15 points from practical classes and individual assignments is required for the course credit to be granted"
              },
              {
                "text": "All above 15 activity points are transferred as bonus points to the exam (up to 15 points)"
              }
            ]
          }
        ]
      },
      {
        "title": "Schedule and Study Material",
        "anchor": "schedule",
        "blocks": [
          {
            "type": "table",
            "headers": [
              "Date",
              "Content",
              "Supplementary Material",
              "Solution",
              "Homework"
            ],
            "rows": [
              [
                "10. 10. 2025",
                "[The Hard Disk Drive (.pdf)](asset:class01/NDBI007_01_HardDiskDrive.pdf)\n[Video recording (English)](https://drive.google.com/file/d/1yuvUXNjvOVqRx7ivlUoWP9nqz1ebZIOz/view?usp=sharing)",
                "[deskstar.pdf](asset:class01/deskstar.pdf)",
                "[NDBI007_01_Solution.pdf](asset:class01/NDBI007_01_Solution.pdf)",
                "-"
              ],
              [
                "24. 10. 2025",
                "[Static Indexes and Bitmaps (.pdf)](asset:class02/NDBI007_02_IndexesBitmaps.pdf)\n[Video recording* (Czech)](https://drive.google.com/file/d/1_ud2AA7X4CoUQ6PmKLiRxeSQJuvw45dm/view?usp=sharing)\n[Video recording* (English)](https://drive.google.com/file/d/1X8vml3YphKtnxENxGy1HCJ-C1RGqp0-e/view?usp=sharing)",
                "-",
                "[NDBI007_02_Solution.pdf](asset:class02/NDBI007_02_Solution.pdf)",
                "[NDBI007_A1.pdf](asset:class02/NDBI007_A1.pdf)"
              ],
              [
                "31. 10. 2025",
                "[Static Hashing (.pdf)](asset:class03/NDBI007_03_StaticHashing.pdf)\n[Video recording* (Czech)](https://drive.google.com/file/d/17B8Yt-FEzOz6jqGPXbNiJp62GJcpRLWU/view?usp=sharing)\n[Video recording* (English)](https://drive.google.com/file/d/1fU8udkpOoe7j8-D0ptB2oQ6tuIdgt12-/view?usp=sharing)",
                "-",
                "[NDBI007_03_Solution.pdf](asset:class03/NDBI007_03_Solution.pdf)",
                "[NDBI007_A2.pdf](asset:class03/NDBI007_A2.pdf)\n[records_A2.csv](asset:class03/records_A2.csv)"
              ],
              [
                "14. 11. 2025",
                "[Dynamic Hashing (.pdf)](asset:class04/NDBI007_04_DynamicHashing.pdf)\n[Video recording* (Czech)](https://drive.google.com/file/d/1ApfOi7h0NmDArv41Uah8kwiynN2Z-ZKj/view?usp=sharing)\n[Video recording* (English)](https://drive.google.com/file/d/1-6N7QldUan008lObAA1Ddxfw5aWFayde/view?usp=sharing)",
                "-",
                "[NDBI007_04_Solution.pdf](asset:class04/NDBI007_04_Solution.pdf)",
                "[NDBI007_A3.pdf](asset:class04/NDBI007_A3.pdf)\n[records_A3.csv](asset:class04/records_A3.csv)"
              ],
              [
                "28. 11. 2025",
                "[B-Tree (.pdf)](asset:class05/NDBI007_05_BTrees.pdf)\n[video recording* (Czech)](https://drive.google.com/file/d/1D5Jpav0JcZEvx1w8zoME0-KwKCcpgQPO/view?usp=sharing)\n[video recording* (English)](https://drive.google.com/file/d/1O_DAItNzqVxOSLiTXMCqG1B-5iA0f3XI/view?usp=sharing)",
                "-",
                "[NDBI007_05_Solution.pdf](asset:class05/NDBI007_05_Solution.pdf)",
                "[NDBI007_A4.pdf](asset:class05/NDBI007_A4.pdf)\n[records_A4.csv](asset:class05/records_A4.csv)"
              ],
              [
                "12. 12. 2025",
                "[R-Tree, Splitting of an Overflown Node (.pdf)](asset:class06/NDBI007_06_RTrees.pdf)\n[video recording* (Czech)](https://drive.google.com/file/d/1vFGwgnB-xJnz1w4KQgx4-i5dW8hO_TKg/view?usp=sharing)\n[video recording* (English)](https://drive.google.com/file/d/1a-MFHgP0lPLXfVjt1w3r_-H5lTHeGC__/view?usp=sharing)",
                "-",
                "[NDBI007_06_Solution.pdf](asset:class06/NDBI007_06_Solution.pdf)",
                "[NDBI007_A5.pdf](asset:class06/NDBI007_A5.pdf)"
              ]
            ]
          }
        ]
      },
      {
        "title": "Recommended Literature",
        "anchor": "literature",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Pokorný, Jaroslav, and Michal Žemlička. Základy implementace souborů a databází. Karolinum, 2004."
              }
            ]
          }
        ]
      }
    ],
    "evaluation": {
      "source": "SIS Student Survey",
      "raw_summary": [
        "7/32/32",
        "1,43*:0,79*"
      ],
      "survey_url": "https://is.cuni.cz/studium/anketa/index.php?do=vysledky&skr=2025&sem=1&fak=11320&co=1&ucit=74478&sekce=&povinn=NDBI007&ustav=-1&vyuka=-1&zobraz=Zobraz",
      "respondents": 7,
      "students": 32,
      "score": 1.43
    },
    "class_count": 6,
    "semester": "251",
    "year": "2025/2026",
    "abbrev": "NDBI007",
    "when": [
      {
        "day": "Friday",
        "time": "12:20-13:50",
        "room": "S4"
      }
    ],
    "link": "teaching/251-NDBI007/index.html",
    "external": false,
    "desc": "The aim of the course is to provide an overview of the basic principles of data organization. In the first part, students get acquainted with the basic methods of data storage and file organization types. We will also focus on data structures for efficient access to data, i.e. basic types of hashing and hierarchical indexing, including their use in traditional, primarily relational database systems. In the last part, we will focus on more advanced principles of data organization in the context of spatial, distributed and in-memory databases"
  },
  {
    "id": "242-NSWI170",
    "code": "NSWI170",
    "name": "Počítačové systémy",
    "academic_year": "2024/2025",
    "term": "summer",
    "sis_term_code": "242",
    "description": "The course is a cornerstone for understanding the function of computers, compilers, and operating systems. The skills and knowledge acquired at this course are necessary for completing other subjects. An integral part of the course are practical exercises on suitably selected simple hardware or in an emulated environment.",
    "schedule": [
      {
        "day": "Monday",
        "time": "14:00-15:30 (odd weeks)",
        "room": "N8"
      },
      {
        "day": "Monday",
        "time": "15:40-17:10 (odd weeks)",
        "room": "N8"
      }
    ],
    "mobile_friendly": true,
    "external_url": "https://www.ksi.mff.cuni.cz/teaching/nswi170-web/pages/labs/stenchlak",
    "evaluation": {
      "source": "SIS Student Survey",
      "raw_summary": [
        "5/50/282",
        "2,40*:1,34*"
      ],
      "survey_url": "https://is.cuni.cz/studium/anketa/index.php?do=vysledky&skr=2024&sem=3&fak=11320&co=1&ucit=74478&sekce=&povinn=NSWI170&ustav=-1&vyuka=-1&zobraz=Zobraz",
      "respondents": 5,
      "students": 50,
      "score": 2.4
    },
    "semester": "242",
    "year": "2024/2025",
    "abbrev": "NSWI170",
    "when": [
      {
        "day": "Monday",
        "time": "14:00-15:30 (odd weeks)",
        "room": "N8"
      },
      {
        "day": "Monday",
        "time": "15:40-17:10 (odd weeks)",
        "room": "N8"
      }
    ],
    "link": "https://www.ksi.mff.cuni.cz/teaching/nswi170-web/pages/labs/stenchlak",
    "external": true,
    "desc": "The course is a cornerstone for understanding the function of computers, compilers, and operating systems. The skills and knowledge acquired at this course are necessary for completing other subjects. An integral part of the course are practical exercises on suitably selected simple hardware or in an emulated environment."
  },
  {
    "id": "242-NDBI046",
    "code": "NDBI046",
    "name": "Introduction to Data Engineering",
    "academic_year": "2024/2025",
    "term": "summer",
    "sis_term_code": "242",
    "description": "The aim of the course is to introduce students to the basics of working with data and common operations in a typical data processing process. This includes data acquisition, data cleaning, transformation, validation, cataloging, versioning, description, accessing through APIs, integration, search, compression, encryption, and working with big and distributed data",
    "schedule": [
      {
        "day": "Thursday",
        "time": "9:00-10:30",
        "room": "SW2"
      }
    ],
    "mobile_friendly": true,
    "page": {
      "enabled": true,
      "path": "teaching/242-NDBI046/index.html",
      "kicker": "Practical class"
    },
    "sections": [
      {
        "title": "Basic Information",
        "anchor": "basic-information",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "[Annotation (source: SIS)](https://is.cuni.cz/studium/predmety/index.php?do=predmet&kod=NDBI046)"
              },
              {
                "text": "Lecturer: Petr Škoda (petr.skoda (at) matfyz.cuni.cz), Martin Nečaský (martin.necasky (at) matfyz.cuni.cz)"
              },
              {
                "text": "Tutor: Pavel Koupil (pavel.koupil (at) matfyz.cuni.cz), Petr Škoda (petr.skoda (at) matfyz.cuni.cz)"
              },
              {
                "text": "[Lectures](https://www.ksi.mff.cuni.cz/teaching/ndbi046-web/)"
              },
              {
                "text": "Schedule",
                "children": [
                  {
                    "text": "Lectures: Monday 12:20 - 13:50 (room S4)"
                  },
                  {
                    "text": "Practical classes: Thursday 9:00 - 10:30 (room SW2)"
                  }
                ]
              },
              {
                "text": "[Table with points and feedback](https://www.icloud.com/numbers/0b6OWYwAHmZ_cbb8lCXP76QtA#242-NDBI046-Points)"
              }
            ]
          }
        ]
      },
      {
        "title": "Formal Requirements",
        "anchor": "formal-requirements",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "The course will be explained at the first practical class (recommended attendance)"
              },
              {
                "text": "There will be one invited lecture instead of a practical class during the semester (compulsory attendance)"
              },
              {
                "text": "The remaining practical classes are carried out in the form of homework assignments and individual consultations",
                "children": [
                  {
                    "text": "Consultations can be arranged by email and are held by agreement in the S209 office or online via Zoom"
                  }
                ]
              },
              {
                "text": "Homework Assignments",
                "children": [
                  {
                    "text": "You will be assigned 6 individual homework during the semester"
                  },
                  {
                    "text": "Completing a homework may award you up to 10 points"
                  },
                  {
                    "text": "There will always be at least 7 days for completing homework assignment"
                  },
                  {
                    "text": "Particular homework solution can be submitted only once"
                  },
                  {
                    "text": "One late submission is accepted"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "title": "Course Credit",
        "anchor": "course-credit",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "At least 6 points from each homework is required for the course credit to be granted"
              },
              {
                "text": "Points earned above this limit are transferred as a bonus to the exam",
                "children": [
                  {
                    "text": "I.e., you can earn up to 4 extra points for each homework solution, up to a total of 24 points for the exam"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "title": "Schedule and Study Material",
        "anchor": "schedule",
        "blocks": [
          {
            "type": "table",
            "headers": [
              "Date",
              "Content",
              "Supplementary Material",
              "Solution",
              "Homework"
            ],
            "rows": [
              [
                "20. 2. 2025",
                "Introduction",
                "[Programování 1 (Python; Czech only)](../231-NPRG030/index.html)",
                "-",
                "-"
              ],
              [
                "27. 2. 2025",
                "[User Story, Extract (.pdf)](asset:class02/NDBI046_02_Extract.pdf)",
                "[requirements.txt](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class02/requirements.txt)\n\n[urls.txt](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class02/urls.txt)\n\n[dataset_expenses.json](asset:class02/dataset_expenses.json)",
                "[Example 2.1 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class02/extract_waste_csv.py)\n\n[Exercise 2.2 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class02/extract_expenses_json.py)\n\n[Exercise 2.3 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class02/extract_regions_xml.py)\n\n[Example 2.4 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class02/extract_population_excel.py)",
                "-"
              ],
              [
                "6. 3. 2025",
                "[Transform (.pdf)](asset:class03/NDBI046_03_Transform.pdf)",
                "-",
                "[Example 3.2 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class03/transform_regions.py)\n\n[Exercise 3.3 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class03/transform_waste.py)\n\n[Exercise 3.4 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class03/transform_population.py)\n\n[Example 3.5 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class03/join_waste_population.py)\n\n[Exercise 3.6 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class03/transform_expenses.py)\n\n[Exercise 3.7 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class03/transform_finalize.py)",
                "-"
              ],
              [
                "13. 3. 2025",
                "[Load (.pdf)](asset:class04/NDBI046_04_Load.pdf)",
                "[prereq.txt](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/prereq.txt)\n\n[requirements.txt](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/requirements.txt)\n\n[connection.json](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/connection.json)\n\n[datasets.json](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/datasets.json)",
                "[Example 4.1 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/single_dim_regions.py)\n\n[Example 4.2 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/bulk_with_ic_dim_regions.py)\n\n[Example 4.3 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/bulk_dim_regions.py)\n\n[Exercise 4.4 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/bulk_all.py)",
                "[HW1 (.pdf)](#)"
              ],
              [
                "20. 3. 2025",
                "[Introduction to Visualization (.pdf)](asset:class04/NDBI046_04_Visualization.pdf)",
                "-",
                "-",
                "-"
              ],
              [
                "27. 3. 2025",
                "[Apache Airflow (.pdf)](asset:class06/NDBI046_06_Apache_Airflow.pdf)",
                "[Dockerfile](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/Dockerfile)\n\n[docker-compose.yaml](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/docker-compose.yaml)\n\n[requirements.txt](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/requirements.txt)",
                "[Example 6.1 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/dag_bash_operator.py)\n\n[Example 6.2 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/dag_python_operator.py)\n\n[Exercise 6.3 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/dag_xcoms.py)\n\n[Example 6.4 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/dag_postgre_operator.py)\n\n[Exercise 6.5 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/dag_taskflow.py)\n\n[Exercise 6.6 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/dag_etl.py)\n\nExercise 6.7 (not provided)",
                "[HW2 (.pdf)](#)"
              ],
              [
                "3. 4. 2025:",
                "[Data Cube (.pdf)](asset:class07/NDBI046_07_Data_Cube.pdf)",
                "[Well-formed data cube validation script](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class07/check-well-formed.py)",
                "[Example 7.1 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class07/cube_structure.py)\n\n[Example 7.2 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class07/cube_dataset.py)\n\n[Exercise 7.3 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class07/cube_multiple_measures.py)\n\n[Exercise 7.4 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class07/cube_dataset_metadata.py)\n\n[Exercise 7.5 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class07/cube_resources.py)\n\nExercise 7.6 (not provided)\n\nExercise 7.7 (not provided)",
                "[HW3 (.pdf)](#)"
              ],
              [
                "10. 4. 2025",
                "[Data Provenance (.pdf)](asset:class09/NDBI046_09_Data_Provenance.pdf)",
                "-",
                "[Example 9.1 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class09/prov-o-regions.pdf)\n\n[Example 9.2 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class09/prov-starting-regions.py)\n\n[Exercise 9.3 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class09/prov-expanded-etl.py)\n\nExercise 9.4 (not provided)\n\nExercise 9.5 (not provided)",
                "[HW4 (.pdf)](#)"
              ],
              [
                "17. 4. 2025",
                "[Data catalog and metadata (.pdf)](asset:class10/NDBI046_10_Data_Catalog.pdf)",
                "-",
                "[Example 10.1 (.pdf)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class10/catalog.py)\n\n[Example 10.2 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class10/catalog_tech.py)\n\n[Exercise 10.3 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class10/catalog_prov.py)\n\n[Example 10.4 (link)](http://eurovoc.europa.eu/1158)\n\n[Exercise 10.5 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class10/catalog_dom.py)\n\nExercise 10.6 (not provided)\n\nExercise 10.7 (not provided)",
                "[HW5 (.pdf)](#)"
              ],
              [
                "24. 4. 2025",
                "[Data Integrity (.pdf)](asset:class12/NDBI046_12_Data_Integrity.pdf)",
                "-",
                "[Exercise 12.1 (.py)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class12/checksum.py)\n\n[Example 12.2 (.sh)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class12/csr.sh)\n\n[Example 12.3 (.sh)](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class12/sign_cat.sh)\n\nExercise 12.4 (not provided)",
                "[HW6 (.pdf)](#)"
              ],
              [
                "1. 5. 2025",
                "Cancelled (Public Holiday)"
              ],
              [
                "8. 5. 2025",
                "Cancelled (Public Holiday)"
              ],
              [
                "?. ?. 2025",
                "Invited Lecture (Škoda Auto)",
                "The lecture will be rescheduled for one of the upcoming class sessions, and we will inform you in advance about the new date. Attendance at the guest lecture remains mandatory; however, if necessary, you may request an excusal - no later than one day in advance."
              ]
            ]
          }
        ]
      },
      {
        "title": "Recommended Literature",
        "anchor": "literature",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "TODO..."
              }
            ]
          }
        ]
      }
    ],
    "evaluation": {
      "source": "SIS Student Survey",
      "raw_summary": [
        "LS 24/25",
        "0/1",
        "2",
        "1,00"
      ],
      "survey_url": "https://is.cuni.cz/studium/anketa/index.php?do=vysledky&skr=2024&sem=3&fak=11320&co=1&ucit=74478&sekce=&povinn=NDBI046&ustav=-1&vyuka=-1&zobraz=Zobraz",
      "score": 1.0
    },
    "class_count": 13,
    "semester": "242",
    "year": "2024/2025",
    "abbrev": "NDBI046",
    "when": [
      {
        "day": "Thursday",
        "time": "9:00-10:30",
        "room": "SW2"
      }
    ],
    "link": "teaching/242-NDBI046/index.html",
    "external": false,
    "desc": "The aim of the course is to introduce students to the basics of working with data and common operations in a typical data processing process. This includes data acquisition, data cleaning, transformation, validation, cataloging, versioning, description, accessing through APIs, integration, search, compression, encryption, and working with big and distributed data"
  },
  {
    "id": "242-NDBI007",
    "code": "NDBI007",
    "name": "Principles of Data Organisation",
    "academic_year": "2024/2025",
    "term": "summer",
    "sis_term_code": "242",
    "description": "The aim of the course is to provide an overview of the basic principles of data organization. In the first part, students get acquainted with the basic methods of data storage and file organization types. We will also focus on data structures for efficient access to data, i.e. basic types of hashing and hierarchical indexing, including their use in traditional, primarily relational database systems. In the last part, we will focus on more advanced principles of data organization in the context of spatial, distributed and in-memory databases",
    "schedule": [
      {
        "day": "Thursday",
        "time": "9:00-10:30",
        "room": "S1"
      }
    ],
    "mobile_friendly": true,
    "page": {
      "enabled": true,
      "path": "teaching/242-NDBI007/index.html",
      "kicker": "Practical class"
    },
    "sections": [
      {
        "title": "Basic Information",
        "anchor": "basic-information",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "[Annotation (source: SIS)](https://is.cuni.cz/studium/eng/predmety/index.php?do=predmet&kod=NDBI007)"
              },
              {
                "text": "Lecturer: Irena Holubová (irena.holubova (at) matfyz.cuni.cz)"
              },
              {
                "text": "Tutor: Irena Holubová (irena.holubova (at) matfyz.cuni.cz), Pavel Koupil (pavel.koupil (at) matfyz.cuni.cz)"
              },
              {
                "text": "[Lectures](https://www.ksi.mff.cuni.cz/~holubova/NDBI007/)"
              },
              {
                "text": "Schedule",
                "children": [
                  {
                    "text": "Lectures: Wednesday 9:00 - 10:30 (room S1)"
                  },
                  {
                    "text": "Practical classes:\n<ul>\n<li>Every even Thursday 9:00 - 10:30 (room S1)"
                  }
                ]
              },
              {
                "text": "[Table with points](https://www.icloud.com/numbers/0ebayJbGczkiN2-0ZH2AT2M-w#242-NDBI007-Points)"
              }
            ]
          }
        ]
      },
      {
        "title": "Formal Requirements",
        "anchor": "formal-requirements",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Attendance is not compulsory, yet recommended"
              },
              {
                "text": "During each 2nd to 6th practical class, 1 activity point can be acquired for solving exercises"
              },
              {
                "text": "Homework Assignments",
                "children": [
                  {
                    "text": "You will be assigned 5 individual homework during the semester"
                  },
                  {
                    "text": "There will be standard and extended version of the homework"
                  },
                  {
                    "text": "If you miss a practical class or you will not get bonus point during practical class, completing an extended version of homework may award you by 1 extra activity point"
                  },
                  {
                    "text": "Otherwise, up to 5 activity points can be earned for complete and correct solution"
                  },
                  {
                    "text": "There will always be at least 7 days for completing homework assignment"
                  },
                  {
                    "text": "Particular homework solution can be submitted only once (email: pavel.koupil@matfyz.cuni.cz)"
                  },
                  {
                    "text": "No late submission is accepted"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "title": "Course Credit",
        "anchor": "course-credit",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "At least 15 points from practical classes and individual assignments is required for the course credit to be granted"
              },
              {
                "text": "All above 15 activity points are transferred as bonus points to the exam (up to 15 points)"
              }
            ]
          }
        ]
      },
      {
        "title": "Schedule and Study Material",
        "anchor": "schedule",
        "blocks": [
          {
            "type": "table",
            "headers": [
              "Date",
              "Content",
              "Supplementary Material",
              "Solution",
              "Homework"
            ],
            "rows": [
              [
                "27. 2. 2025",
                "[The Hard Disk Drive (.pdf)](asset:class01/NDBI007_01_HardDiskDrive.pdf)\n[Video recording (English)](https://drive.google.com/file/d/1yuvUXNjvOVqRx7ivlUoWP9nqz1ebZIOz/view?usp=sharing)",
                "[deskstar.pdf](asset:class01/deskstar.pdf)",
                "[NDBI007_01_Solution.pdf](asset:class01/NDBI007_01_Solution.pdf)",
                "-"
              ],
              [
                "6. 3. 2025",
                "[Static Indexes and Bitmaps (.pdf)](asset:class02/NDBI007_02_IndexesBitmaps.pdf)\n[Video recording (Czech)](https://drive.google.com/file/d/1_ud2AA7X4CoUQ6PmKLiRxeSQJuvw45dm/view?usp=sharing)\n[Video recording (English)](https://drive.google.com/file/d/1X8vml3YphKtnxENxGy1HCJ-C1RGqp0-e/view?usp=sharing)",
                "-",
                "[NDBI007_02_Solution.pdf](asset:class02/NDBI007_02_Solution.pdf)",
                "[NDBI007_A1.pdf](asset:class02/NDBI007_A1.pdf)"
              ],
              [
                "27. 3. 2025",
                "[Static Hashing (.pdf)](asset:class03/NDBI007_03_StaticHashing.pdf)\n[Video recording (Czech)](https://drive.google.com/file/d/17B8Yt-FEzOz6jqGPXbNiJp62GJcpRLWU/view?usp=sharing)\n[Video recording (English)](https://drive.google.com/file/d/1fU8udkpOoe7j8-D0ptB2oQ6tuIdgt12-/view?usp=sharing)",
                "-",
                "[NDBI007_03_Solution.pdf](asset:class03/NDBI007_03_Solution.pdf)",
                "[NDBI007_A2.pdf](asset:class03/NDBI007_A2.pdf)\n[records_A2.csv](asset:class03/records_A2.csv)"
              ],
              [
                "10. 4. 2025",
                "[Dynamic Hashing (.pdf)](asset:class04/NDBI007_04_DynamicHashing.pdf)\n[Video recording (Czech)](https://drive.google.com/file/d/1ApfOi7h0NmDArv41Uah8kwiynN2Z-ZKj/view?usp=sharing)\n[Video recording (English)](https://drive.google.com/file/d/1-6N7QldUan008lObAA1Ddxfw5aWFayde/view?usp=sharing)",
                "-",
                "[NDBI007_04_Solution.pdf](asset:class04/NDBI007_04_Solution.pdf)",
                "[NDBI007_A3.pdf](asset:class04/NDBI007_A3.pdf)\n[records_A3.csv](asset:class04/records_A3.csv)"
              ],
              [
                "24. 4. 2025",
                "[B-Tree (.pdf)](asset:class05/NDBI007_05_BTrees.pdf)\n[video recording (Czech)](https://drive.google.com/file/d/1D5Jpav0JcZEvx1w8zoME0-KwKCcpgQPO/view?usp=sharing)\n[video recording (English)](https://drive.google.com/file/d/1O_DAItNzqVxOSLiTXMCqG1B-5iA0f3XI/view?usp=sharing)",
                "-",
                "[NDBI007_05_Solution.pdf](asset:class05/NDBI007_05_Solution.pdf)",
                "[NDBI007_A4.pdf](asset:class05/NDBI007_A4.pdf)\n[records_A4.csv](asset:class05/records_A4.csv)"
              ],
              [
                "8. 5. 2025",
                "Cancelled (Public Holiday)"
              ],
              [
                "22. 5. 2025",
                "[R-Tree, Splitting of an Overflown Node (.pdf)](asset:class06/NDBI007_06_RTrees.pdf)\n[video recording (Czech)](https://drive.google.com/file/d/1vFGwgnB-xJnz1w4KQgx4-i5dW8hO_TKg/view?usp=sharing)\n[video recording (English)](https://drive.google.com/file/d/1a-MFHgP0lPLXfVjt1w3r_-H5lTHeGC__/view?usp=sharing)",
                "-",
                "[NDBI007_06_Solution.pdf](asset:class06/NDBI007_06_Solution.pdf)",
                "[NDBI007_A5.pdf](asset:class06/NDBI007_A5.pdf)"
              ]
            ]
          }
        ]
      },
      {
        "title": "Recommended Literature",
        "anchor": "literature",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Pokorný, Jaroslav, and Michal Žemlička. Základy implementace souborů a databází. Karolinum, 2004."
              }
            ]
          }
        ]
      }
    ],
    "evaluation": {
      "source": "SIS Student Survey",
      "survey_url": "https://is.cuni.cz/studium/anketa/index.php?do=vysledky&skr=2024&sem=1&fak=11320&co=1&ucit=74478&sekce=&povinn=NDBI007&ustav=-1&vyuka=-1&zobraz=Zobraz"
    },
    "class_count": 7,
    "semester": "242",
    "year": "2024/2025",
    "abbrev": "NDBI007",
    "when": [
      {
        "day": "Thursday",
        "time": "9:00-10:30",
        "room": "S1"
      }
    ],
    "link": "teaching/242-NDBI007/index.html",
    "external": false,
    "desc": "The aim of the course is to provide an overview of the basic principles of data organization. In the first part, students get acquainted with the basic methods of data storage and file organization types. We will also focus on data structures for efficient access to data, i.e. basic types of hashing and hierarchical indexing, including their use in traditional, primarily relational database systems. In the last part, we will focus on more advanced principles of data organization in the context of spatial, distributed and in-memory databases"
  },
  {
    "id": "241-NPRG041",
    "code": "NPRG041",
    "name": "Programování v C++",
    "academic_year": "2024/2025",
    "term": "winter",
    "sis_term_code": "241",
    "description": "Course of programming in C++. Knowledge and understanding of object-oriented programming and general programming skills are required prior to enrolling the course.",
    "schedule": [
      {
        "day": "Monday",
        "time": "11:30-14:00",
        "room": "SW1"
      },
      {
        "day": "Monday",
        "time": "11:30-14:00",
        "room": "SW1"
      }
    ],
    "mobile_friendly": true,
    "external_url": "https://www.ksi.mff.cuni.cz/teaching/nprg041-zavoral-web/index.html",
    "evaluation": {
      "source": "SIS Student Survey",
      "survey_url": "https://is.cuni.cz/studium/anketa/index.php?do=vysledky&skr=2024&sem=3&fak=11320&co=1&ucit=74478&sekce=&povinn=NPRG041&ustav=-1&vyuka=-1&zobraz=Zobraz"
    },
    "semester": "241",
    "year": "2024/2025",
    "abbrev": "NPRG041",
    "when": [
      {
        "day": "Monday",
        "time": "11:30-14:00",
        "room": "SW1"
      },
      {
        "day": "Monday",
        "time": "11:30-14:00",
        "room": "SW1"
      }
    ],
    "link": "https://www.ksi.mff.cuni.cz/teaching/nprg041-zavoral-web/index.html",
    "external": true,
    "desc": "Course of programming in C++. Knowledge and understanding of object-oriented programming and general programming skills are required prior to enrolling the course."
  },
  {
    "id": "232-NDBI046",
    "code": "NDBI046",
    "name": "Introduction to Data Engineering",
    "academic_year": "2023/2024",
    "term": "summer",
    "sis_term_code": "232",
    "description": "",
    "schedule": [],
    "mobile_friendly": true,
    "page": {
      "enabled": true,
      "path": "teaching/232-NDBI046/index.html",
      "kicker": "Practical class"
    },
    "sections": [
      {
        "title": "Basic Information",
        "anchor": "basic-information",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "[Annotation (source: SIS)](https://is.cuni.cz/studium/predmety/index.php?do=predmet&kod=NDBI046)"
              },
              {
                "text": "Lecturer: Petr Škoda (petr.skoda (at) matfyz.cuni.cz), Martin Nečaský (martin.necasky (at) matfyz.cuni.cz)"
              },
              {
                "text": "Tutor: Petr Škoda (petr.skoda (at) matfyz.cuni.cz), Pavel Koupil (pavel.koupil (at) matfyz.cuni.cz)"
              },
              {
                "text": "[Lectures](https://www.ksi.mff.cuni.cz/teaching/ndbi046-web/)"
              },
              {
                "text": "Schedule",
                "children": [
                  {
                    "text": "Lectures: Tuesday 9:00 - 10:30 (room S9)"
                  },
                  {
                    "text": "Practical classes: Monday 10:40 - 12:10 (room SU2)"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "title": "Formal Requirements",
        "anchor": "formal-requirements",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Practical classes:",
                "children": [
                  {
                    "text": "Attendance is not compulsory, yet recommended"
                  }
                ]
              },
              {
                "text": "You will be assigned 6 individual homework during the semester",
                "children": [
                  {
                    "text": "Completing a homework may award you up to 10 points"
                  },
                  {
                    "text": "There will always be at least 13 days for completing homework assignment"
                  },
                  {
                    "text": "Particular homework solution can be submitted only once"
                  },
                  {
                    "text": "Only one late submission is accepted"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "title": "Course Credit",
        "anchor": "course-credit",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "At least 6 points from each homework is required for the course credit to be granted"
              }
            ]
          }
        ]
      },
      {
        "title": "Schedule and Study Material",
        "anchor": "schedule",
        "blocks": [
          {
            "type": "table",
            "headers": [
              "Date",
              "Content",
              "Supplementary Material",
              "Solution",
              "Homework"
            ],
            "rows": [
              [
                "19. 2. 2024",
                "Introduction",
                "[Programování 1 (Python) practical class (Czech only)](../231-NPRG030/index.html)",
                "-",
                "-"
              ],
              [
                "26. 2. 2024",
                "[NDBI046_02_Extract.pdf](asset:class02/NDBI046_02_Extract.pdf)",
                "[requirements.txt](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class02/requirements.txt)\n[urls.txt](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class02/urls.txt)\n[dataset_expenses.json](asset:class02/dataset_expenses.json)",
                "Example 2.1: Extract dataset 'Production of industrial and municipal waste' (CSV) (file [extract_waste_csv.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class02/extract_waste_csv.py))\nExercise 2.2: Extract dataset 'Costs of environmental protection' (JSON) (file [extract_expenses_json.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class02/extract_expenses_json.py))\nExercise 2.3: Web scrapping of the Regions dataset (XML) (file [extract_regions_xml.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class02/extract_regions_xml.py))\nExample 2.4: Extract population dataset from multiple excel sheets (XSLX) (file [extract_population_excel.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class02/extract_population_excel.py))",
                "-"
              ],
              [
                "4. 3. 2024",
                "[NDBI046_03_Transform.pdf](asset:class03/NDBI046_03_Transform.pdf)",
                "-",
                "Example 3.2: Transform Region Data (CSV) (file [transform_regions.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class03/transform_regions.py))\nExercise 3.3: Transform Waste Data (CSV) (file [transform_waste.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class03/transform_waste.py))\nExercise 3.4: Transform Population Data (CSV) (file [transform_population.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class03/transform_population.py))\nExample 3.5: Join Waste and Population Data (file [join_waste_population.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class03/join_waste_population.py))\nExercise 3.6: Transform Expenses Data (JSON) (file [transform_expenses.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class03/transform_expenses.py))\nExercise 3.7: Finalize Data (file [transform_finalize.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class03/transform_finalize.py))",
                "-"
              ],
              [
                "11. 3. 2024",
                "[NDBI046_04_Load.pdf](asset:class04/NDBI046_04_Load.pdf)\n[NDBI046_04_Visualization.pdf](asset:class04/NDBI046_04_Visualization.pdf)",
                "[prereq.txt](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/prereq.txt)\n[requirements.txt](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/requirements.txt)\n[connection.json](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/connection.json)\n[datasets.json](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/datasets.json)",
                "Example 4.1: Load dataset 'Regions' into dim_regions (row by row) (file [single_dim_regions.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/single_dim_regions.py))\nExample 4.2: Load dataset 'Regions' into dim_regions (bulk loading) (file [bulk_with_ic_dim_regions.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/bulk_with_ic_dim_regions.py))\nExample 4.3: Load dataset 'Regions' into dim_regions (bulk loading & alter table) (file [bulk_dim_regions.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/bulk_dim_regions.py))\nExercise 4.4: Efficient and repeatable bulk loading of all datasets (file [bulk_all.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class04/bulk_all.py))",
                "Points: 10 (must score at least 6 points)\nDeadline: 27th March 2024 20:00 (AoE)\nAssignment:\nPropose and implement an ETL workflow to upload selected datasets to the data warehouse\nExtract at least 3 datasets\nUse at least two different sources (e.g. web, web services, data catalog)\nUtilize no less than two different methods (e.g. web scraping, file download)\nData must be in at least two different formats (e.g. JSON, CSV, XML, worksheet)\nTransform input datasets to allow them to be loaded to the data warehouse\nApply at least 7 different transformations in a meaningful way\nE.g., join multiple datasets, normalize data, encoding values, change date or number formatting, add surrogate key\nEnsure consistency of datasets\nMake sure that each dataset contains at least 6 attributes and maximum 2000 rows (filter remaining rows) when transformation is complete\nGraphically illustrate the entire workflow (e.g., as a DAG) and document it\nIn particular, justify for what purpose you are performing the selected transformations\nLoad the datasets to the data warehouse\nAppropriately design the data warehouse structure with respect to your datasets\nConsider a star, snowflake or galaxy schema\nDistinguish appropriately between fact tables, dimension tables, and measurements\nDocument and illustrate the schema (e.g., using UML)\nVisualization\nAfter uploading data to the data warehouse, create two non-trivial visualizations of your data\nDescribe the visualizations (what we can see, no statistical description required)\nSubmission:\nYour solution must be uploaded to Gitlab repository\nRepository must contain:\nREADME.md describing:\nSystem requirements\nInstallation instructions\nDescription of script files, inputs, and outputs\nIllustration, description and reasons for each step of the ETL Workflow (especially reasons for selected transformations)\nDiagram and description of the data warehouse\nLicense file (MIT)\nPython script(s) to extract input datasets from various sources\nPython script(s) to transform datasets\nPython script(s) to load data into data warehouse\nVisualizations as PDF or PNG file (i.e., do not submit Tableau project file)\nEvaluation:\nCompleteness of requirements and ETL workflow functionality - 5 points\nETL workflow documentation - 2 points\nData warehouse design and documentation - 1 point\nVisualisation - 2 points\nReferences:\nPython 3: [https://docs.python.org/3/](https://docs.python.org/3/)\nvenv: [https://docs.python.org/3/library/venv.html](https://docs.python.org/3/library/venv.html)\nTableau: [https://www.tableau.com](https://www.tableau.com)\nDatasets:\nCzech open data portal: [https://data.gov.cz](https://data.gov.cz)\nCzech Statistical Office product catalog: [https://www.czso.cz/csu/czso/katalog-produktu](https://www.czso.cz/csu/czso/katalog-produktu)\nWorld Bank Open Data: [https://data.worldbank.org](https://data.worldbank.org)\nEuropean data: [https://data.europa.eu/en](https://data.europa.eu/en)\nEurostat: [https://ec.europa.eu/eurostat/data/database](https://ec.europa.eu/eurostat/data/database)\nTableau sample datasets: [https://public.tableau.com/app/learn/sample-data?qt-overview_resources=1](https://public.tableau.com/app/learn/sample-data?qt-overview_resources=1)\nKaggle datasets: [https://www.kaggle.com/datasets](https://www.kaggle.com/datasets)\nPostgreSQL database server:\nwebik.ms.mff.cuni.cz (port: 5432, database: ndbi046)\nUser credentials were sent in a separate email"
              ],
              [
                "18. 3. 2024",
                "Consultation class I",
                "-",
                "-",
                "-"
              ],
              [
                "25. 3. 2024",
                "[NDBI046_06_Apache_Airflow.pdf](asset:class06/NDBI046_06_Apache_Airflow.pdf)",
                "[Dockerfile](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/Dockerfile)\n[docker-compose.yaml](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/docker-compose.yaml)\n[requirements.txt](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/requirements.txt)",
                "Example 6.1: BashOperator (file [dag_bash_operator.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/dag_bash_operator.py))\nExample 6.2: PythonOperator (file [dag_python_operator.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/dag_python_operator.py))\nExercise 6.3: Data Sharing via Airflow Xcoms (file [dag_xcoms.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/dag_xcoms.py))\nExample 6.4: Connection to PostgreSQL and PostgreOperator (file [dag_postgre_operator.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/dag_postgre_operator.py))\nExercise 6.5: TaskFlow API (file [dag_taskflow.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/dag_taskflow.py))\nExercise 6.6: Complete ETL Workflow in Apache Airflow (file [dag_etl.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class06/dag_etl.py))\nExercise 6.7: Scheduling using the cron expression",
                "Points: 10 (must score at least 6 points)\nDeadline: 8th April 2024 20:00 (AoE)\nAssignment:\nCreate an Apache Airflow workflow that implements the ETL proposed in the previous homework assignment\nDecompose the workflow into at least eight tasks\nImplemented as, e.g., PythonOperator, PostgreOperator, custom operator(s), or using TaskFlow API\nUse XComs and share data between tasks appropriately\nUse at least one Sensor appropriately\nUse the Cron expression to schedule the execution\nDecompose the workflow into task groups for better readability\nSet postgres_conn_id equal to postgres_webik\nSubmission:\nYour solution must be uploaded to Gitlab repository\nRepository must contain:\nREADME.md describing:\nSystem requirements\nInstallation instructions\nDescription of script file\nLicense file (MIT)\nThe only Python script implementing the Apache Airflow DAG\nEvaluation:\nCorrect implementation of the ETL workflow - 3 points\nThe solution performs a meaningful data update instead of deleting and reloading all tables - 2 points\nAppropriate use of XComs and data sharing - 1 point\nTasks decomposition - 1 point\nImplementation of a custom operator - 1 point\nUse of Sensor - 1 point\nUse of Cron - 1 point\nReferences:\nPython 3: [https://docs.python.org/3/](https://docs.python.org/3/)\nDocker: [https://www.docker.com](https://www.docker.com)\nApache Airflow: [https://airflow.apache.org](https://airflow.apache.org)\nCron and Time Intervals: [https://airflow.apache.org/docs/apache-airflow/stable/authoring-and-scheduling/cron.html](https://airflow.apache.org/docs/apache-airflow/stable/authoring-and-scheduling/cron.html)\nPostgreSQL database server:\nwebik.ms.mff.cuni.cz (port: 5432, database: ndbi046)\nUser credentials were sent in a separate email"
              ],
              [
                "8. 4. 2024",
                "[NDBI046_07_Data_Cube.pdf](asset:class07/NDBI046_07_Data_Cube.pdf)",
                "Well-formed data cube validation script (file [check-well-formed.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class07/check-well-formed.py))",
                "Example 7.1: Data structure definition (file [cube_structure.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class07/cube_structure.py))\nExample 7.2: Dataset (file [cube_dataset.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class07/cube_dataset.py))\nExercise 7.3: Handling multiple measures (file [cube_multiple_measures.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class07/cube_multiple_measures.py))\nExercise 7.4: Additional dataset metadata (file [cube_dataset_metadata.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class07/cube_dataset_metadata.py))\nExercise 7.5: Concept schemes and code lists (file [cube_resources.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class07/cube_resources.py))\nExercise 7.6: Slices (not provided)\nExercise 7.7: Well-formed data cube (not provided)",
                "Points: 10 (must score at least 6 points)\nDeadline: 23rd April 2024 20:00 (AoE)\nAssignment:\nCreate a data cube corresponding to any fact table from the previous homework\nUse a custom base URL prefix\nIntroduce (reuse) concepts for all dimensions\nIntroduced concepts must have a label (i.e., skos:prefLabel)\nApply SDMX concepts to increase interoperability\nThe data cube must contain at least 2 dimensions and 1 measurement\nInclude a core set of DataSet metadata\nCreate a qb:Slice over the selected subset of observations\nThe data cube must be well-formed according to the RDF data cube specification\nInclude in the solution the extraction of the dataset corresponding to the fact table joined with all its dimensions\nThat is, read data from PostgreSQL deployed on the webik.ms.mff.cuni.cz server\nSubmission:\nYour solution must be uploaded to Gitlab repository\nRepository must contain:\nREADME.md describing:\nSystem requirements\nInstallation instructions\nDescription of script files, inputs, outputs\nLicense file (MIT)\nThe Python script to create data cube\nThe Python for data cube validation using integrity constraints\nEvaluation:\nData cube structure (i.e., minimal requirement for dimensions and measurements) - 1 point\n(Reuse) concepts for all dimensions - 2 points\nUse of SDMX concepts - 1 point\nData Cube metadata - 1 point\nWell-formed data cube - 2 points\nSlice over a selected subset of observations - 3 points\nReferences:\nThe RDF Data Cube Vocabulary: [https://www.w3.org/TR/vocab-data-cube/](https://www.w3.org/TR/vocab-data-cube/)\nPython 3: [https://docs.python.org/3/](https://docs.python.org/3/)\nrdflib: [https://rdflib.readthedocs.io/en/stable/](https://rdflib.readthedocs.io/en/stable/)\nSPARQL querying: [https://rdflib.readthedocs.io/en/stable/intro_to_sparql.html](https://rdflib.readthedocs.io/en/stable/intro_to_sparql.html)\nPostgreSQL database server:\nwebik.ms.mff.cuni.cz (port: 5432, database: ndbi046)\nUser credentials were sent in a separate email"
              ],
              [
                "15. 4. 2024",
                "Consultation class II",
                "-",
                "-",
                "-"
              ],
              [
                "22. 4. 2024",
                "[NDBI046_09_Data_Provenance.pdf](asset:class09/NDBI046_09_Data_Provenance.pdf)",
                "-",
                "Example 9.1: Simple provenance description - ETL Regions (file [prov-o-regions.pdf](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class09/prov-o-regions.pdf))\nExample 9.2: Simple provenance description using Python (file [prov-starting-regions.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class09/prov-starting-regions.py))\nExercise 9.3: Utilizing expanded terms (file [prov-expanded-etl.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class09/prov-expanded-etl.py))\nExercise 9.4: Extending provenance document utilizing qualified terms (not provided)\nExercise 9.5: Extending provenance document utilizing qualified terms II (not provided)",
                "Points: 10 (must score at least 6 points)\nDeadline: 7th May 2024 20:00 (AoE)\nAssignment:\nCreate a Python script that produces a provenance document describing ETL workflow, data cube creation, and optionally also visualizations using the terms from PROV-O\nEmploy the resources from all previous homework assignments\nInclude prov:Entities for each dataset/visualization/digital artifact\nInclude at least three instances of prov:Agent (e.g., persons, organizations, software used)\nInclude at least two instances of prov:Activity\nUse at least one class and one property from Qualified terms\nFor example, prov:qualifiedUsage, prov:qualifiedAssociation\nSave the provenance as RDF TriG file\nMake sure the file is valid\nSubmission:\nYour solution must be uploaded to Gitlab repository\nRepository must contain:\nREADME.md describing:\nSystem requirements\nInstallation instructions\nDescription of script files, inputs, outputs\nLicense file (MIT)\nThe Python script to create provenance document\nEvaluation:\nContent of the provenance document (i.e., minimal requirement ETL workflow and data cube creation) - 4 points\nAppropriate use of expanded terms - 3 points\nUse of qualified terms - 3 points\nReferences:\nPROV-O: [https://www.w3.org/TR/prov-o/](https://www.w3.org/TR/prov-o/)\nPython 3: [https://docs.python.org/3/](https://docs.python.org/3/)"
              ],
              [
                "29. 4. 2024",
                "[NDBI046_10_Data_Catalog.pdf](asset:class10/NDBI046_10_Data_Catalog.pdf)",
                "-",
                "Example 10.1: Basic structure of data catalog (file [catalog.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class10/catalog.py))\nExample 10.2: Technical metadata (file [catalog_tech.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class10/catalog_tech.py))\nExercise 10.3: Provenance metadata (file [catalog_prov.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class10/catalog_prov.py))\nExample 10.4: Find a suitable theme in Eurovoc (link [http://eurovoc.europa.eu/1158](http://eurovoc.europa.eu/1158))\nExercise 10.5: Domain metadata (file [catalog_dom.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class10/catalog_dom.py))\nExercise 10.6: Business metadata (not provided)\nExercise 10.7: Query data descriptions (not provided)",
                "Points: 10 (must score at least 6 points)\nDeadline: 14th May 2024 20:00 (AoE)\nAssignment:\nCreate a Python script that produces a DCAT description of data catalog (dcat:Catalog) that contains a single dataset entry (dcat:Dataset) along with two distributions (dcat:Distribution)\nThe dataset corresponds to the data you used to create the data cube in the third homework assignment\nDistributions correspond to the original data (i.e., fact table exported to csv) and the data cube in RDF turtle format\nProvide the following metadata:\nMinimum of 5 technical metadata, e.g., dcat:accessService, dcat:accessURL, dcat:byteSize, dcat:downloadUrl, dcat:mediaType, dcterms:format, dcat:endpointDescription, dcat:endpointURL\nMinimum of 5 provenance metadata, e.g., dcat:contactPoint, dcterms:creator, dcterms:issued, dcterms:modified, dcterms:published, prov:qualifiedAttribution, prov:wasGeneratedBy\nMinimum of 6 domain metadata , e.g., dcat:keywords, dcat:theme, dcterms:description, dcterms:title, dcat:spatialResolutionInMeters, dcat:termporalResolution, dcterms:spatial, dcterms:termporal\nMinimum of 3 business metadata, e.g., dcterms:accrualPeriodicity, dcterms:accessRights, dcterms:license, dcterms:rights, odrl:hasPolicy\nThe dataset must be described using at least 3 keywords and 3 themes\nFollow the DCAT documentation and use the appropriate value for each metadata property\nRemember to employ your prefix (base URL)\nEmploy resources from authority tables, e.g.:\nFrequencies: [https://publications.europa.eu/resource/distribution/frequency/rdf/skos_core/frequencies-skos.rdf](https://publications.europa.eu/resource/distribution/frequency/rdf/skos_core/frequencies-skos.rdf)\nFile types: [https://publications.europa.eu/resource/distribution/file-type/rdf/skos_core/filetypes-skos.rdf](https://publications.europa.eu/resource/distribution/file-type/rdf/skos_core/filetypes-skos.rdf)\nCountries: [https://publications.europa.eu/resource/distribution/country/rdf/skos_core/countries-skos.rdf](https://publications.europa.eu/resource/distribution/country/rdf/skos_core/countries-skos.rdf)\nIANA media types: [https://www.iana.org/assignments/media-types/media-types.xhtml](https://www.iana.org/assignments/media-types/media-types.xhtml)\nEmploy themes:\nEurovoc: [https://op.europa.eu/en/web/eu-vocabularies/dataset/-/resource?uri=http://publications.europa.eu/resource/dataset/eurovoc](https://op.europa.eu/en/web/eu-vocabularies/dataset/-/resource?uri=http://publications.europa.eu/resource/dataset/eurovoc)\nSave the description file as turtle\nMake sure the file is valid\nCreate a Python script that executes 2 meaningful SPARQL queries over the created description of your data catalog\nThe query must be different from the Exercise 10.7 in the practical class\nIn the comments of the submitted Python script, explain the meaning of the queries\nSubmission:\nYour solution must be uploaded to Gitlab repository\nRepository must contain:\nREADME.md describing:\nSystem requirements\nInstallation instructions\nDescription of script files, inputs, outputs\nLicense file (MIT)\nThe Python script to create dcat description document\nThe Python script to execute SPARQL queries\nEvaluation:\nAppropriate use of technical metadata (e.g., correct range) - 2 points\nAppropriate use of provenance metadata - 2 points\nAppropriate use of domain metadata including - 3 points\nAppropriate use of business metadata including - 1 points\nMeaningful SPARQL queries - 2 points\nReferences:\nData Catalog Vocabulary (DCAT) - Version 3: [https://www.w3.org/TR/vocab-dcat-3/](https://www.w3.org/TR/vocab-dcat-3/)\nEurovoc: [https://op.europa.eu/en/web/eu-vocabularies/dataset/-/resource?uri=http://publications.europa.eu/resource/dataset/eurovoc](https://op.europa.eu/en/web/eu-vocabularies/dataset/-/resource?uri=http://publications.europa.eu/resource/dataset/eurovoc)\nSPARQL Query Language for RDF: [https://www.w3.org/TR/prov-o/](https://www.w3.org/TR/prov-o/)\nPython 3: [https://docs.python.org/3/](https://docs.python.org/3/)\nrdflib: [https://rdflib.readthedocs.io/en/stable/](https://rdflib.readthedocs.io/en/stable/)"
              ],
              [
                "6. 5. 2024",
                "Consultation class III",
                "-",
                "-",
                "-"
              ],
              [
                "13. 5. 2024",
                "[NDBI046_12_Data_Integrity.pdf](asset:class12/NDBI046_12_Data_Integrity.pdf)",
                "-",
                "Exercise 12.1: Assurance of integrity and authenticity of distributions (file [checksum.py](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class12/checksum.py))\nExample 12.2: Create a certificate signing request (file [csr.sh](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class12/csr.sh))\nExample 12.3: Sign the data catalog file (file [sign_cat.sh](https://gitlab.mff.cuni.cz/contosp/ndbi046/-/blob/master/class12/sign_cat.sh))\nExercise 12.4: Publish data (not provided)",
                "Points: 10 (must score at least 6 points)\nDeadline: 27th May 2024 20:00 (AoE)\nAssignment:\nExtend the data catalog description from homework 5 in order to secure distribution integrity using spdx:checksum\nEmploy openssl to create a certificate sign request (CSR) from your RSA private key\nProvide the following CRS information: countryName (C), organizationName (O), and commonName (CN)\nSend me the request, the .csr file, for signing\nAlternatively, use a self-signed certificate (however, this solution is not recommended in practice)\nUse the signed certificate (i.e., file certificate.crt) to sign data catalog file\nUse sha256 algorithm for hashing and encode binary content using base64 format\nSave digital signature info file data-catalog.sha256.sign\nPublish your data fragments (i.e., csv dataset distribution and data cube distribution in RDF Turtle format) on the server webik.ms.mff.cuni.cz\nThat is, upload the necessary files to the server\nAdd an index.html page with links to the following files:\n(Signed) certificate certificate.crt\nData catalog description file data-catalog.ttl\nDigital signature data-catalog.sha256.sign\nCSV dataset distribution file (i.e., the exported fact table that was used to create the data cube in homework 3)\nData cube distribution file (i.e., the data cube in RDF Turtle format from homework 3)\nDo not publish your private key!\nSubmission:\nYour solution must be uploaded to Gitlab repository and publishes on server webik.ms.mff.cuni.cz\nRepository must contain:\nREADME.md describing:\nDescription of script files, inputs, outputs\nLicense file (MIT)\nThe Shell script to execute openssl commands\nThe Python script to extend data catalog\nindex.html\nCertificate signing request\nSigned certificate certificate.crt\nData catalog description file data-catalog.ttl\nDigital signature data-catalog.sha256.sign\nCSV dataset distribution file\nData cube distribution file\nEvaluation:\nSending certificate signing request - 4 points\nAppropriate use of checksum, certificates for signing the data catalog, and publishing all data fragments - 6 points\nPrivate key publication leads to homework failure\nDisclosure of any credentials leads to homework failure\nReferences:\nData Catalog Vocabulary (DCAT) - Version 3: [https://www.w3.org/TR/vocab-dcat-3/](https://www.w3.org/TR/vocab-dcat-3/)\nOpenSSL: [https://www.openssl.org/](https://www.openssl.org/)\nPython 3: [https://docs.python.org/3/](https://docs.python.org/3/)\nhashlib: [https://docs.python.org/3/library/hashlib.html](https://docs.python.org/3/library/hashlib.html)\nW3C HTML tutorial: [https://www.w3schools.com/html/](https://www.w3schools.com/html/)\nWebik server:\nwebik.ms.mff.cuni.cz\nUser credentials were sent in a separate email"
              ],
              [
                "20. 5. 2024",
                "Consultation class IV",
                "-",
                "-",
                "-"
              ]
            ]
          }
        ]
      },
      {
        "title": "Recommended Literature",
        "anchor": "literature",
        "blocks": []
      }
    ],
    "evaluation": {
      "source": "SIS Student Survey",
      "raw_summary": [
        "LS 23/24",
        "0/1",
        "2",
        "1,00"
      ],
      "survey_url": "https://is.cuni.cz/studium/anketa/index.php?do=vysledky&skr=2023&sem=3&fak=11320&co=1&ucit=74478&sekce=&povinn=NDBI046&ustav=-1&vyuka=-1&zobraz=Zobraz",
      "score": 1.0
    },
    "class_count": 13,
    "semester": "232",
    "year": "2023/2024",
    "abbrev": "NDBI046",
    "when": [],
    "link": "teaching/232-NDBI046/index.html",
    "external": false,
    "desc": ""
  },
  {
    "id": "231-NPRG062",
    "code": "NPRG062",
    "name": "Algoritmizace",
    "academic_year": "2023/2024",
    "term": "winter",
    "sis_term_code": "231",
    "description": "",
    "schedule": [],
    "mobile_friendly": true,
    "page": {
      "enabled": true,
      "path": "teaching/231-NPRG062/index.html",
      "kicker": "Practical class"
    },
    "sections": [
      {
        "title": "Basic Information",
        "anchor": "basic-information",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "[Anotace](https://is.cuni.cz/studium/eng/predmety/index.php?do=predmet&kod=NPRG062) (zdroj: SIS)"
              },
              {
                "text": "Přednášející: Tomáš Dvořák (TODO (at) TODO)"
              },
              {
                "text": "Cvičící: Pavel Koupil (pavel.koupil (at) matfyz.cuni.cz)"
              },
              {
                "text": "[Přednášky](https://ksvi.mff.cuni.cz/~dvorak/vyuka/NPRG062/)"
              },
              {
                "text": "Rozvrh",
                "children": [
                  {
                    "text": "Přednáška: Středa 12:20 - 13:50 (místnost N1)"
                  },
                  {
                    "text": "Cvičení: Čtvrtek 11:30 - 12:15 (místnosti N8)"
                  }
                ]
              },
              {
                "text": "[Tabulka s body](https://www.icloud.com/numbers/022Dq3_Iqoute1bMAQZNfQUuQ#231-NPRG030)"
              }
            ]
          }
        ]
      },
      {
        "title": "Formal Requirements",
        "anchor": "formal-requirements",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Cvičení:",
                "children": [
                  {
                    "text": "Účast na cvičení není povinná, ale je silně doporučována"
                  },
                  {
                    "text": "Během každého cvičení lze získat 1 bod za aktivní řešení příkladů (celkem 12)"
                  }
                ]
              },
              {
                "text": "Domácí úkoly:",
                "children": [
                  {
                    "text": "Během semestru Vám bude zadáno 8 domácích úkolů"
                  },
                  {
                    "text": "Domácí úkoly budou mít standardní a rozšířenou verzi"
                  },
                  {
                    "text": "Standardní verze se bude skládat z 1 až 5 příkladů a lze za ni získat nejvýše 10 bodů"
                  },
                  {
                    "text": "Vyřešení rozšiřující části domácího úkolu Vám může nahradit 1 nezískaný bod za aktivitu na cvičení"
                  },
                  {
                    "text": "Na vyřešení domácího úkolu budete mít vždy alespoň 13 dnů"
                  },
                  {
                    "text": "Pozdě odevzdaný domácí úkol bude penalizován -2 body za každý započatý týden zpoždění"
                  },
                  {
                    "text": "Řešení domácího úkolu z algoritmizace se odevzdává emailem na pavel.koupil@matfyz.cuni.cz a lze odevzdat pouze jednou"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "title": "Course Credit",
        "anchor": "course-credit",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Pro zisk zápočtu je nutné získat alespoň 56 bodů"
              }
            ]
          }
        ]
      },
      {
        "title": "Schedule and Study Material",
        "anchor": "schedule",
        "blocks": [
          {
            "type": "table",
            "headers": [
              "Date",
              "Content",
              "Supplementary Material",
              "Solution",
              "Homework"
            ],
            "rows": [
              [
                "5. 10. 2023",
                "Úvodní cvičení\n[NPRG062_01_Uvod.pdf](asset:class01/NPRG062_01_Uvod.pdf)\nPrůběh cvičení\nPožadavky na zisk zápočtu\nZnámky\nVážení kuliček\nInvariant cyklu",
                "-",
                "-",
                "-"
              ],
              [
                "12. 10. 2023",
                "Asymptotická složitost\n[NPRG062_02_Asymptoticka_slozitost.pdf](asset:class02/NPRG062_02_Asymptoticka_slozitost.pdf)\nAsymptotická notace",
                "-",
                "-",
                "-"
              ],
              [
                "19. 10. 2023",
                "Teorie čísel\n[NPRG062_03_Teorie_cisel.pdf](asset:class03/NPRG062_03_Teorie_cisel.pdf)\nEratosthenovo síto\nPrvočíselný rozklad\nNejmenší společný násobek\nZadání domácího úkolu",
                "Zadání domácího úkolu:\nTBD",
                "Cvičení 3.1: Eratosthenovo síto (soubor [eratosthenovo_sito.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class03/eratosthenovo_sito.py))\nCvičení 3.2: Prvočíselný rozklad (soubory [prvociselny_rozklad.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class03/prvociselny_rozklad.py) a [prvociselny_rozklad_funkce.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class03/prvociselny_rozklad_funkce.py))\nCvičení 3.3: Nejmenší společný násobek (soubory [nejmensi_spolecny_nasobek.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class03/nejmensi_spolecny_nasobek.py) a [nejmensi_spolecny_nasobek_funkce.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class03/nejmensi_spolecny_nasobek_funkce.py))",
                "-"
              ],
              [
                "26. 10. 2023",
                "Třídění\n[NPRG062_04_Trideni.pdf](asset:class04/NPRG062_04_Trideni.pdf)\n[merge_sort.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class04/merge_sort.py)\nHaldové třídění nad polem\nVylepšení třídění sléváním\nZadání domácího úkolu",
                "Zadání domácího úkolu:\nTBD",
                "Cvičení 4.1: HeapSort nad polem (soubor [heap_sort.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class04/heap_sort.py))\nCvičení 4.2: Vylepšení MergeSort (soubor [merge_sort_reseni.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class04/merge_sort_reseni.py))",
                "-"
              ],
              [
                "9. 11. 2023",
                "Binární půlení\n[NPRG062_05_Binarni_puleni.pdf](asset:class05/NPRG062_05_Binarni_puleni.pdf)\n[binarni_vyhledavani.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class05/binarni_vyhledavani.py)\n[odmocnina.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class05/odmocnina.py)\nZobecnění binárního vyhledávání\nVýpočet odmocniny\nZadání domácího úkolu",
                "Zadání domácího úkolu:\nTBD",
                "Cvičení 5.1: Zobecnění binárního vyhledávání (soubor [binarni_vyhledavani_reseni.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class05/binarni_vyhledavani_reseni.py))\nCvičení 5.2: Odmocnina (soubor [odmocnina_reseni.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class05/odmocnina_reseni.py))",
                "-"
              ],
              [
                "16. 11. 2023",
                "Základní datové struktury\n[NPRG062_06_Zakladni_datove_struktury.pdf](asset:class06/NPRG062_06_Zakladni_datove_struktury.pdf)\n[cyklicka_fronta.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class06/cyklicka_fronta.py)\n[fronta.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class06/fronta.py)\n[zasobnik.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class06/zasobnik.py)\nÚprava cyklické fronty v poli\nSpojový seznam\nImplementace fronty a zásobníku - chybové stavy\nZadání domácího úkolu",
                "Zadání domácího úkolu:\nTBD",
                "Cvičení 6.1: Úprava cyklické fronty (soubor [cyklicka_fronta_reseni.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class06/cyklicka_fronta_reseni.py))\nCvičení 6.2: Implementace fronty a zásobníku - chybové stavy (soubory [fronta_chybove_stavy.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class06/fronta_chybove_stavy.py) a [zasobnik_chybove_stavy.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class06/zasobnik_chybove_stavy.py))\nCvičení 6.2: Implementace fronty a zásobníku - chybové stavy; řešení s výjimkami (soubory [fronta_chybove_stavy_vyjimky.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class06/fronta_chybove_stavy_vyjimky.py) a [zasobnik_chybove_stavy_vyjimky.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class06/zasobnik_chybove_stavy_vyjimky.py))",
                "-"
              ],
              [
                "23. 11. 2023",
                "Základní datové struktury II\n[NPRG062_07_Zakladni_datove_struktury_II.pdf](asset:class07/NPRG062_07_Zakladni_datove_struktury_II.pdf)\nDalší operace nad spojovými seznamy\nRozšíření operací binární haldy\nZadání domácího úkolu",
                "Zadání domácího úkolu:\nTBD",
                "Cvičení 7.1: Další operace nad spojovými seznamy (soubor [spojovy_seznam_rozsireny.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class07/spojovy_seznam_rozsireny.py))\nCvičení 7.2: Rozšíření operací binární haldy (soubor [XXX.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class07/XXX.py))",
                "-"
              ],
              [
                "30. 11. 2023",
                "[NPRG062_08_Rekurze.pdf](asset:class08/NPRG062_08_Rekurze.pdf)\nRekurze vs iterace\nHanojská věž\nBinární vyhledávání rekurzivně\nRekurzivní generování",
                "-",
                "Příklad 8.1: Rekurze vs iterace (soubory [factorial.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class08/factorial.py), [factorial_recursive.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class08/factorial_recursive.py), [fibonacci.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class08/fibonacci.py), [fibonacci_recursive.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class08/fibonacci_recursive.py) a [fibonacci_recursive_cached.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class08/fibonacci_recursive_cached.py))\nCvičení 8.1: Hanojská věž (soubor [hanojska_vez.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class08/hanojska_vez.py))",
                "-"
              ],
              [
                "7. 12. 2023",
                "Rekurzivní datové struktury\n[NPRG062_09_Rekurzivni_datove_struktury.pdf](asset:class09/NPRG062_09_Rekurzivni_datove_struktury.pdf)\nUrčení (průměrné) výšky stromu\nSymetrický binární strom\nAritmetické výrazy\nZadání domácího úkolu",
                "Zadání domácího úkolu:\nTBD",
                "Příklad 9.1: Určení (průměrné) výšky stromu (soubor [vyska_stromu.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class09/vyska_stromu.py))\nCvičení 9.2: Symetrický binární strom (soubor [symetrie_stromu.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class09/symetrie_stromu.py))\nCvičení 9.3: Aritmetické výrazy (soubor [aritmeticke_vyrazy.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class09/aritmeticke_vyrazy.py))",
                "-"
              ],
              [
                "14. 12. 2023",
                "Prohledávání stavového prostoru\n[NPRG062_10_Prohledavani_stavoveho_prostoru.pdf](asset:class10/NPRG062_10_Prohledavani_stavoveho_prostoru.pdf)\nCesta šachovým koněm\nMagický čtverec řádu n\nZadání domácího úkolu",
                "Zadání domácího úkolu:\nTBD",
                "Cvičení 10.1: Cesta šachovým koněm (soubor [cesta_konem.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class10/cesta_konem.py))\nCvičení 10.2: Magický čtverec řádu n (soubor [magicky_ctverec.py](https://gitlab.mff.cuni.cz/contosp/nprg062/-/blob/master/class10/magicky_ctverec.py))",
                "-"
              ],
              [
                "21. 12. 2023",
                "Grafové algoritmy\nTBD\nEulerovský graf\nBipartitní graf\nZadání domácího úkolu",
                "Zadání domácího úkolu:\nTBD",
                "TBD",
                "-"
              ],
              [
                "4. 1. 2024",
                "Grafové algoritmy II\nTBD\nNalezení nejkratší cesty pomocí BFS\nRozděl a panuj\nQuickSelect\nPlánování přednášek",
                "-",
                "TBD",
                "-"
              ],
              [
                "11. 1. 2024",
                "Konzultace",
                "-",
                "-",
                "-"
              ]
            ]
          }
        ]
      },
      {
        "title": "Recommended Literature",
        "anchor": "literature",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Martin Mareš, Tomáš Valla. Průvodce labyrintem algoritmů. CZ.NIC, z.s.p.o.. Praha 2022.\n[odkaz ke stažení](http://pruvodce.ucw.cz)"
              }
            ]
          }
        ]
      }
    ],
    "evaluation": {
      "source": "SIS Student Survey",
      "survey_url": "https://is.cuni.cz/studium/anketa/index.php?do=vysledky&skr=2023&sem=3&fak=11320&co=1&ucit=74478&sekce=&povinn=NPRG062&ustav=-1&vyuka=-1&zobraz=Zobraz"
    },
    "class_count": 13,
    "semester": "231",
    "year": "2023/2024",
    "abbrev": "NPRG062",
    "when": [],
    "link": "teaching/231-NPRG062/index.html",
    "external": false,
    "desc": ""
  },
  {
    "id": "231-NPRG030",
    "code": "NPRG030",
    "name": "Programování 1",
    "academic_year": "2023/2024",
    "term": "winter",
    "sis_term_code": "231",
    "description": "",
    "schedule": [],
    "mobile_friendly": true,
    "page": {
      "enabled": true,
      "path": "teaching/231-NPRG030/index.html",
      "kicker": "Practical class"
    },
    "sections": [
      {
        "title": "Basic Information",
        "anchor": "basic-information",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "[Anotace](https://is.cuni.cz/studium/eng/predmety/index.php?do=predmet&kod=NPRG030) (zdroj: SIS)"
              },
              {
                "text": "Přednášející: Tomáš Holan, Martin Pergel"
              },
              {
                "text": "Cvičící: Pavel Koupil (pavel.koupil@matfyz.cuni.cz)"
              },
              {
                "text": "[Přednášky](https://ksvi.mff.cuni.cz/~dvorak/vyuka/NPRG062/)"
              },
              {
                "text": "Rozvrh",
                "children": [
                  {
                    "text": "Přednáška: Úterý 10:40 - 12:10 (místnost N1)"
                  },
                  {
                    "text": "Přednáška: Středa 14:00 - 15:30 (místnost N1)"
                  },
                  {
                    "text": "Cvičení: Čtvrtek 12:20 - 13:50 (místnosti N8)"
                  }
                ]
              },
              {
                "text": "[Tabulka s body](https://www.icloud.com/numbers/022Dq3_Iqoute1bMAQZNfQUuQ#231-NPRG030)"
              }
            ]
          }
        ]
      },
      {
        "title": "Formal Requirements",
        "anchor": "formal-requirements",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Cvičení:",
                "children": [
                  {
                    "text": "Účast na cvičení není povinná, ale je silně doporučována"
                  },
                  {
                    "text": "Na každém cvičení lze za aktivní řešení příkladů získat až 2 body (celkem 24)"
                  }
                ]
              },
              {
                "text": "Domácí úkoly:",
                "children": [
                  {
                    "text": "Během semestru Vám bude zadáno 10 domácích úkolů"
                  },
                  {
                    "text": "Řešení domácího úkolu se nahrává do ReCodExu a odevzdávat lze opakovaně"
                  },
                  {
                    "text": "Na vyřešení domácího úkolu budete mít vždy alespoň 13 dnů"
                  },
                  {
                    "text": "Za každý vyřešený domácí úkol lze získat až 10 bodů"
                  },
                  {
                    "text": "Pozdě odevzdané domácí úkoly budou penalizovány -2 body za každý započatý týden zpoždění"
                  }
                ]
              },
              {
                "text": "Semestrální práce:",
                "children": [
                  {
                    "text": "Během semestru vypracujete zdokumentované a otestované softwarové dílo"
                  },
                  {
                    "text": "Konkrétní požadavky jsou uvedeny v samostatném PDF (soubor [pozadavky_na_semestralni_praci.pdf](asset:class04/pozadavky_na_semestralni_praci.pdf))"
                  },
                  {
                    "text": "Za semestrální práci lze získat maximálně 40 bodů. Každý nesplněný požadavek bude penalizován"
                  },
                  {
                    "text": "Pokud nezískáte alespoň 30 bodů za semestrální práci, máte ještě jeden opravný pokus. V případě opravy musíte získat 35 bodů"
                  },
                  {
                    "text": "Pokud nezískáte alespoň 30 bodů na první pokus nebo alespoň 35 bodů z opravy, ztrácíte nárok na udělení zápočtu"
                  }
                ]
              },
              {
                "text": "Zápočtový test:",
                "children": [
                  {
                    "text": "Na konci semestru proběhne praktický programovací test",
                    "children": [
                      {
                        "text": "Zadávaný a odevzdávaný do ReCodExu"
                      }
                    ]
                  },
                  {
                    "text": "Čas na vyřešení bude maximálně 90 minut"
                  },
                  {
                    "text": "Test je třeba splnit na 100% bodů"
                  },
                  {
                    "text": "Na test budete mít tři pokusy"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "title": "Course Credit",
        "anchor": "course-credit",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Odevzdat všech 10 domácích úkolů a získat alespoň 60 bodů za řešení domácích úkolů a aktivitu během cvičení"
              },
              {
                "text": "Úspěšně odevzdat semestrální práci"
              },
              {
                "text": "Úspěšně projít zápočtovým testem"
              }
            ]
          }
        ]
      },
      {
        "title": "Schedule and Study Material",
        "anchor": "schedule",
        "blocks": [
          {
            "type": "table",
            "headers": [
              "Date",
              "Content",
              "Supplementary Material",
              "Solution",
              "Homework"
            ],
            "rows": [
              [
                "5. 10. 2023",
                "Úvodní cvičení\n[NPRG030_01_Uvod.pdf](asset:class01/NPRG030_01_Uvod.pdf)\nPožadavky na zisk zápočtu\nSeznámení se s programovacím prostředím (IDE):\nVisual Studio Code\nPyCharm\nApache NetBeans\nProměnné a základní datové typy\nOperátory\nKomentáře\nUživatelský vstup a výstup\nVětvení If...Elif...Else\nJak psát kód:\nKomentáře a dokumentace\nPopisné názvy proměnných\nPoužívání konstant\nKeep It Simple, Stupid (KISS)\nOptimalizace kódu pro čitelnost\nSložité výrazy",
                "-",
                "Příklad 1.4: Hello World! (soubor [hello_world.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class01/hello_world.py))\nCvičení 1.5: Triviální kalkulačka (soubor [trivial_calculator.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class01/trivial_calculator.py))\nCvičení 1.6: Lepší kalkulačka (soubor [better_calculator.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class01/better_calculator.py))",
                "-"
              ],
              [
                "12. 10. 2023",
                "Řetězec a seznam\n[NPRG030_02_String_List.pdf](asset:class02/NPRG030_02_String_List.pdf)\nDatové typy\nŘetězec (angl. String)\nFormátování řetězců\nSeznam (angl. List)\nZadání domácího úkolu",
                "Odevzdávací systém ReCodEx:\n[Příručka pro nové uživatele ReCodExu (soubor NewUserDoc.pdf)](http://www.ms.mff.cuni.cz/ReCodEx/NewUserDoc.pdf)\nVytvoření účtu a ověření emailové adresy\nNastavení uživatelského profilu\nZapomenuté heslo\n[Příručka pro studenty (soubor StudentDoc.pdf)](http://www.ms.mff.cuni.cz/ReCodEx/StudentDoc.pdf)\nZařazení do skupiny\nČlenství ve skupině a přehled zadaných domácích úloh\nOdevzdání řešení\nVyhodnocení řešení\nZadání domácího úkolu:\nBMI hodnocení (viz ReCodEx)\nTermín odevzdání: 26. 10. 2023 23:59 GMT+2",
                "Příklad 2.3: Formátování řetězce (soubor [registrace.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class02/registrace.py))\nCvičení 2.4: Zřetězení textu (soubory [zretezeni_1.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class02/zretezeni_1.py) a [zretezeni_2.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class02/zretezeni_2.py))\nCvičení 2.5: Oprava gramatiky editací řetězce (soubor [oprava_textu.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class02/oprava_textu.py))\nCvičení 2.6: Hledání v textu (soubor [hledani_v_textu.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class02/hledani_v_textu.py))\nCvičení 2.7: List (soubor [pocet_slov.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class02/pocet_slov.py))\nCvičení 2.8: Indexování listu (soubor [indexovani_listu.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class02/indexovani_listu.py))\nCvičení 2.9: Editace listu (soubor [upravy_listu.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class02/upravy_listu.py))\nCvičení 2.10: Uspořádání slov podle abecedy (soubor [usporadani_podle_abecedy.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class02/usporadani_podle_abecedy.py))\nCvičení 2.11: Spojení dvou listů (soubor [spojeni_listu.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class02/spojeni_listu.py))",
                "-"
              ],
              [
                "19. 10. 2023",
                "Cykly WHILE a FOR\n[NPRG030_03_Cykly.pdf](asset:class03/NPRG030_03_Cykly.pdf)\nCyklus while\nCyklus for\nJak psát kód:\nPoužití vestavěných funkcí a knihoven aneb nevymýšlej kolo\nVyhněte se hlubokému zanořování smyček a podmíněných příkazů\nPoužití funkce enumerate()\nZadání domácího úkolu",
                "Zadání domácího úkolu:\nTBD",
                "Příklad 3.4: Iterace řetězcem a polem (soubor [cykly_for.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class03/cykly_for.py) a [cykly_while.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class03/cykly_while.py))\nCvičení 3.5: Kreslení trojúhelníku (soubor [trojuhelnik.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class03/trojuhelnik.py) a [trojuhelnik2.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class03/trojuhelnik2.py))\nCvičení 3.6: Generátor hesel (soubor [generator_hesel_for.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class03/generator_hesel_for.py) a [generator_hesel_while.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class03/generator_hesel_while.py))\nCvičení 3.7: Odhad pí metodou Monte Carlo (soubor [pi.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class03/pi.py))\nCvičení 3.8: Caesarova šifra (soubor [caesarova_sifra.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class03/caesarova_sifra.py))",
                "-"
              ],
              [
                "26. 10. 2023",
                "[NPRG030_04_Funkce.pdf](asset:class04/NPRG030_04_Funkce.pdf)\nCvičení 4.7: Refaktorování a zobecnění kódu (soubor [refaktoring.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class04/refaktoring.py))\nFunkce\nJak psát kód:\nDon't Repeat Yourself (DRY)\nYou Aren't Gonna Neet It (YAGNI)\nZásada jediné odpovědnosti (angl. single responsibility)\nStručné a nikoliv komplexní řádky kódu\nPlochá struktura kódu\nOmezení délky řádku\nPoužívání nápovědy k typu (angl. type hints)\nDocstrings pro dokumentaci funkcí\nEarly exit\nPopisné názvy proměnných a funkcí\nGlobální proměnné a jejich vedlejší účinky\nKkonzistentní konvence pojmenování\nZadání domácího úkolu",
                "Zadání domácího úkolu:\nTBD",
                "Příklad 4.3: Průměrná / minimální / maximální hodnota (soubory [aritmeticky_prumer.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class04/aritmeticky_prumer.py) a [min_max.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class04/min_max.py))\nCvičení 4.4: Řetězec bez samohlásek (soubory [retezec_bez_samohlasek.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class04/retezec_bez_samohlasek.py) a [retezec_bez_samohlasek_efektivneji.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class04/retezec_bez_samohlasek_efektivneji.py))\nCvičení 4.5: Caesarova šifra (soubor [caesarova_sifra_podruhe.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class04/caesarova_sifra_podruhe.py))\nCvičení 4.6: Řešení kvadratické rovnice (soubor [kvadraticke_rovnice.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class04/kvadraticke_rovnice.py))\nCvičení 4.8: Násobení matic (soubor [nasobeni_matic.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class04/nasobeni_matic.py))",
                "-"
              ],
              [
                "9. 11. 2023",
                "[NPRG030_05_Kolekce.pdf](asset:class05/NPRG030_05_Kolekce.pdf)\nN-tice (angl. tuple)\nMnožina (angl. set)\nSlovník (angl. dictionary)\nJak psát kód:\nPoužití množin pro testování členství\nExistenční a univerzální kvantifikátory\nZadání domácího úkolu",
                "Zadání domácího úkolu:\nTBD",
                "Cvičení 5.3: Vzdálenost mezi body (soubor [vzdalenost_bodu.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class05/vzdalenost_bodu.py))\nCvičení 5.4: Unikátní slova (soubor [unikatni_slova.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class05/unikatni_slova.py))\nCvičení 5.5: Frekvence slov (soubor [frekvence_slov.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class05/frekvence_slov.py))",
                "-"
              ],
              [
                "16. 11. 2023",
                "Třídy a objekty\n[NPRG030_06_Tridy_A_Objekty.pdf](asset:class06/NPRG030_06_Tridy_A_Objekty.pdf)\nTřídy a objekty\nIterátory, generátory a iterable\nPrůchod spojovým seznamem\nJak psát kód:\nModularita a zapouzdření\nVýčtové hodnoty\nZásady SOLID (single responsibility, open-closed, Liskov substitution, interface segregation, dependency inversion)\nVolné spojení (angl. loose coupling)\nZbytečné přetěžování operátorů\nDéméteřin zákon (princip minimální znalosti)\nDekorátory vlastností\nZadání domácího úkolu",
                "Zadání domácího úkolu:\nTBD",
                "Příklad 6.3: Geometrické tvary (soubor [geometricke_tvary.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class06/geometricke_tvary.py))\nCvičení 6.4: Spojový seznam (soubor [spojovy_seznam.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class06/spojovy_seznam.py))\nCvičení 6.5: Iterátor (soubor [iterator.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class06/iterator.py))\nCvičení 6.6: Generátor (soubor [generator.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class06/generator.py))\nCvičení 6.7: Iterable (soubory [iterable_iterator.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class06/iterable_iterator.py) a [iterable_generator.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class06/iterable_generator.py))",
                "-"
              ],
              [
                "23. 11. 2023",
                "Dědičnost a polymorfismus\n[NPRG030_07_Dedicnost_Polymorfismus.pdf](asset:class07/NPRG030_07_Dedicnost_Polymorfismus.pdf)\nDědičnost\nPolymorfismus\nKompozice\nJak psát kód:\nPoužívejte polymorfismus\nUpřednostněte kompozici před dědičností\nZadání domácího úkolu",
                "Zadání domácího úkolu:\nTBD",
                "Cvičení 7.3: Geometrické tvary II (soubor [geometricke_tvary.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class07/geometricke_tvary.py))\nCvičení 7.4: Nalezení největšího a nejmenšího tvaru (soubor [polymorfismus.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class07/polymorfismus.py))\nPříklad 7.5: Poskládání automobilu z dílů (soubor [dopravni_prostredky.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class07/dopravni_prostredky.py))",
                "-"
              ],
              [
                "30. 11. 2023",
                "[NPRG030_08_Rekurze.pdf](asset:class08/NPRG030_08_Rekurze.pdf)\nRekurze\nJak psát kód:\nPoužívejte vyrovnávací paměť pro nákladné operace\nZadání domácího úkolu",
                "Zadání domácího úkolu:\nTBD",
                "Cvičení 8.3: Binární vyhledávání rekurzivně (soubory [binarni_vyhledavani_rekurzivne.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class08/binarni_vyhledavani_rekurzivne.py) a [binarni_vyhledavani_rekurzivne2.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class08/binarni_vyhledavani_rekurzivne2.py))\nCvičení 8.4: Rekurzivní generování (soubor [variace_bez_opakovani.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class08/variace_bez_opakovani.py))\nCvičení 8.5: Rekurzivní generování II (soubory [aritmeticke_operatory.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class08/aritmeticke_operatory.py) a [aritmeticke_operatory_se_zavorkami.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class08/aritmeticke_operatory_se_zavorkami.py))",
                "-"
              ],
              [
                "7. 12. 2023",
                "Výjimky, logování a ladění kódu\n[NPRG030_09_Vyjimky_Ladeni_Kodu.pdf](asset:class09/NPRG030_09_Vyjimky_Ladeni_Kodu.pdf)\nCvičení 9.7: Debugging (soubor [prumerne_hodnoceni.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class09/prumerne_hodnoceni.py))\nVýjimky Try...Except...Finally\nLogování a úrovně logování\nLadění kódu (angl. debugging)\nJak psát kód:\nElegantní zpracování výjimek\nLokální zpracování výjimek\nZadání domácího úkolu",
                "Zadání domácího úkolu:\nTBD",
                "Příklad 9.3: Převod řetězce na číslo (soubor [preved_na_cislo.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class09/preved_na_cislo.py))\nCvičení 9.4: Vyhledání prvku v seznamu (soubor [najdi_index.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class09/najdi_index.py))\nCvičení 9.5: Vytvoření vlastní výjimky (soubor [obsah_obdelnika.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class09/obsah_obdelnika.py))\nCvičení 9.6: Logování (soubor [preved_na_cislo_logovani.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class09/preved_na_cislo_logovani.py))",
                "-"
              ],
              [
                "14. 12. 2023",
                "Práce se soubory\n[NPRG030_10_Soubory.pdf](asset:class10/NPRG030_10_Soubory.pdf)\nPráce se soubory a správné ošetření pomocí výjimek\nFormáty CSV, JSON, serializace a deserializace\nDatabázové systémy (čtení a zápis dat z/do databáze)\nJak psát kód:\nVyhněte se pevnému určení cest k souborům\nPoužívejte správce kontextu (angl. context manager)\nZadání domácího úkolu",
                "Doplňkové materiály:\n[osoby.json](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class10/osoby.json)\n[osoby.csv](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class10/osoby.csv)\nZadání domácího úkolu:\nTBD",
                "Příklad 10.3: Kontrola existence souboru (soubory [existence_souboru.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class10/existence_souboru.py), [existence_souboru2.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class10/existence_souboru2.py) a [existence_souboru3.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class10/existence_souboru3.py))\nCvičení 10.4: Deserializace z JSON souboru (soubory [deserializace_json.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class10/deserializace_json.py), [deserializace_json2.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class10/deserializace_json2.py), [deserializace_json3.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class10/deserializace_json3.py) a [deserializace_json4.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class10/deserializace_json4.py))\nCvičení 10.5: Serializace objektů do JSON souboru (soubory [serializace_json.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class10/serializace_json.py), [serializace_json2.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class10/serializace_json2.py) a [serializace_json3.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class10/serializace_json3.py))\nCvičení 10.6: Serializace a deserializace CSV (soubory [prace_s_csv.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class10/prace_s_csv.py), [prace_s_csv2.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class10/prace_s_csv2.py) a [prace_s_csv3.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class10/prace_s_csv3.py))\nPříklad 10.7: Práce s databází PostgreSQL (soubor [postgresql_priklad.py](https://gitlab.mff.cuni.cz/contosp/nprg030/-/blob/master/class10/postgresql_priklad.py))",
                "-"
              ],
              [
                "21. 12. 2023",
                "Testování a moduly\n[NPRG030_11_Testovani_A_Moduly.pdf](asset:class11/NPRG030_11_Testovani_A_Moduly.pdf)\nTestování\nModularita programu\nJak psát kód:\nTestování a vývoj řízený testy\nZadání domácího úkolu",
                "Zadání domácího úkolu:\nTBD",
                "[TBD](class11/)",
                "-"
              ],
              [
                "4. 1. 2024",
                "Numpy, pandas, scipy, django, matplotlib\n[NPRG030_12_Knihovny.pdf](asset:class12/NPRG030_12_Knihovny.pdf)\nPip\nNumpy\nPandas\nScipy\nDjango\nMatplotlib",
                "-",
                "[TBD](class12/)",
                "-"
              ],
              [
                "11. 1. 2024",
                "Zápočtový test, Správa zdrojového kódu\nZápočtový test\nSpráva zdrojového kódu (GitLab)",
                "-",
                "-",
                "-"
              ]
            ]
          }
        ]
      },
      {
        "title": "Recommended Literature",
        "anchor": "literature",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "TODO"
              }
            ]
          }
        ]
      }
    ],
    "evaluation": {
      "source": "SIS Student Survey",
      "survey_url": "https://is.cuni.cz/studium/anketa/index.php?do=vysledky&skr=2023&sem=3&fak=11320&co=1&ucit=74478&sekce=&povinn=NPRG030&ustav=-1&vyuka=-1&zobraz=Zobraz"
    },
    "class_count": 13,
    "semester": "231",
    "year": "2023/2024",
    "abbrev": "NPRG030",
    "when": [],
    "link": "teaching/231-NPRG030/index.html",
    "external": false,
    "desc": ""
  },
  {
    "id": "231-NDBI007",
    "code": "NDBI007",
    "name": "Principles of Data Organisation",
    "academic_year": "2023/2024",
    "term": "winter",
    "sis_term_code": "231",
    "description": "",
    "schedule": [],
    "mobile_friendly": true,
    "page": {
      "enabled": true,
      "path": "teaching/231-NDBI007/index.html",
      "kicker": "Practical class"
    },
    "sections": [
      {
        "title": "Basic Information",
        "anchor": "basic-information",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "[Annotation (source: SIS)](https://is.cuni.cz/studium/eng/predmety/index.php?do=predmet&kod=NDBI007)"
              },
              {
                "text": "Lecturer: Irena Holubová (irena.holubova (at) matfyz.cuni.cz)"
              },
              {
                "text": "Tutor: Pavel Koupil (pavel.koupil (at) matfyz.cuni.cz)"
              },
              {
                "text": "[Lectures](https://www.ksi.mff.cuni.cz/~holubova/NDBI007/)"
              },
              {
                "text": "Schedule",
                "children": [
                  {
                    "text": "Lectures: Thursday 10:40 - 12:10 (room S5)"
                  },
                  {
                    "text": "Practical classes:",
                    "children": [
                      {
                        "text": "Czech version every even/odd Wednesday 14:00 - 15:30 (room SU2)"
                      },
                      {
                        "text": "English version based on individual consultation"
                      }
                    ]
                  }
                ]
              },
              {
                "text": "[Table with points](https://www.icloud.com/numbers/087vDdFjOQxC1hI-MB7hZo6vA#231-NDBI007-Points)"
              }
            ]
          }
        ]
      },
      {
        "title": "Formal Requirements",
        "anchor": "formal-requirements",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Practical classes:",
                "children": [
                  {
                    "text": "Attendance is not compulsory, yet recommended"
                  },
                  {
                    "text": "During each 2nd to 6th practical class, 1 activity point can be acquired for solving exercises"
                  },
                  {
                    "text": "English class may take place in the form of individual consultations and extended homeworks"
                  }
                ]
              },
              {
                "text": "You will be assigned 5 individual homework during the semester",
                "children": [
                  {
                    "text": "There will be standard and extended version of the homework"
                  },
                  {
                    "text": "If you miss a practical class, completing an extended version of homework may award you by 1 extra activity point"
                  },
                  {
                    "text": "Otherwise, up to 3 activity points can be earned for complete and correct solution"
                  },
                  {
                    "text": "There will always be 13 days for completing homework assignment"
                  },
                  {
                    "text": "Particular homework solution can be submitted only once"
                  },
                  {
                    "text": "No late submission is accepted"
                  }
                ]
              },
              {
                "text": "Individual programming task",
                "children": [
                  {
                    "text": "Optionally, you may choose an approach (presented during the semester) to implement as a user-friendly graphical simulator"
                  },
                  {
                    "text": "Approaches include, e.g., primary index, indirect index, bitmaps, Cormack, Larson and Kalja, Fagin, Litwin, LHPE-RL, B-Tree, B+-Tree, B*-Tree, various splitting methods in R-Tree and R*-Tree"
                  },
                  {
                    "text": "Teamwork is allowed, but the points will be distributed"
                  },
                  {
                    "text": "Up to 15 points can be granted for complete and correct implementation"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "title": "Course Credit",
        "anchor": "course-credit",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "At least 5 points from practical classes and individual assignments is required for the course credit to be granted"
              },
              {
                "text": "Note that all above 5 activity points are transferred as bonus points to the exam (up to 30 points)"
              }
            ]
          }
        ]
      },
      {
        "title": "Schedule and Study Material",
        "anchor": "schedule",
        "blocks": [
          {
            "type": "table",
            "headers": [
              "Date",
              "Content",
              "Supplementary Material",
              "Solution",
              "Homework"
            ],
            "rows": [
              [
                "4. 10. 2023",
                "[NDBI007_01_HardDiskDrive.pdf](asset:class01/NDBI007_01_HardDiskDrive.pdf)\n[video recording (English)](https://drive.google.com/file/d/1yuvUXNjvOVqRx7ivlUoWP9nqz1ebZIOz/view?usp=sharing)",
                "[deskstar.pdf](asset:class01/deskstar.pdf)",
                "[NDBI007_01_Solution.pdf](asset:class01/NDBI007_01_Solution.pdf)",
                "-"
              ],
              [
                "18. 10. 2023",
                "[NDBI007_02_IndexesBitmaps.pdf](asset:class02/NDBI007_02_IndexesBitmaps.pdf)\n[video recording (Czech)](https://drive.google.com/file/d/1_ud2AA7X4CoUQ6PmKLiRxeSQJuvw45dm/view?usp=sharing)\n[video recording (English)](https://drive.google.com/file/d/1X8vml3YphKtnxENxGy1HCJ-C1RGqp0-e/view?usp=sharing)",
                "-",
                "[NDBI007_02_Solution.pdf](asset:class02/NDBI007_02_Solution.pdf)",
                "[NDBI007_A1.pdf](asset:class02/NDBI007_A1.pdf)\nThe solution can be handed in by email or on paper before the beginning of the next practical class\nDeadline: By the start of the 3rd practical class where you are enrolled in SIS"
              ],
              [
                "1. 11. 2023",
                "[NDBI007_03_StaticHashing.pdf](asset:class03/NDBI007_03_StaticHashing.pdf)\n[video recording (Czech)](https://drive.google.com/file/d/17B8Yt-FEzOz6jqGPXbNiJp62GJcpRLWU/view?usp=sharing)\n[video recording (English)](https://drive.google.com/file/d/1fU8udkpOoe7j8-D0ptB2oQ6tuIdgt12-/view?usp=sharing)",
                "-",
                "[NDBI007_03_Solution.pdf](asset:class03/NDBI007_03_Solution.pdf)",
                "[NDBI007_A2.pdf](asset:class03/NDBI007_A2.pdf)\n[records_A2.csv](asset:class03/records_A2.csv)\nThe solution can be handed in by email or on paper before the beginning of the next practical class\nDeadline: By the start of the 4th practical class where you are enrolled in SIS"
              ],
              [
                "15. 11. 2023",
                "[NDBI007_04_DynamicHashing.pdf](asset:class04/NDBI007_04_DynamicHashing.pdf)\n[video recording (Czech)](https://drive.google.com/file/d/1ApfOi7h0NmDArv41Uah8kwiynN2Z-ZKj/view?usp=sharing)\n[video recording (English)](https://drive.google.com/file/d/1-6N7QldUan008lObAA1Ddxfw5aWFayde/view?usp=sharing)",
                "-",
                "[NDBI007_04_Solution.pdf](asset:class04/NDBI007_04_Solution.pdf)",
                "[NDBI007_A3.pdf](asset:class04/NDBI007_A3.pdf)\n[records_A3.csv](asset:class04/records_A3.csv)\nThe solution can be handed in by email or on paper before the beginning of the next practical class\nDeadline: By the start of the 5th practical class where you are enrolled in SIS"
              ],
              [
                "29. 11. 2023",
                "[NDBI007_05_BTrees.pdf](asset:class05/NDBI007_05_BTrees.pdf)\n[video recording (Czech)](https://drive.google.com/file/d/1D5Jpav0JcZEvx1w8zoME0-KwKCcpgQPO/view?usp=sharing)\n[video recording (English)](https://drive.google.com/file/d/1O_DAItNzqVxOSLiTXMCqG1B-5iA0f3XI/view?usp=sharing)",
                "-",
                "[NDBI007_05_Solution.pdf](asset:class05/NDBI007_05_Solution.pdf)",
                "[NDBI007_A4.pdf](asset:class05/NDBI007_A4.pdf)\n[records_A4.csv](asset:class05/records_A4.csv)\nThe solution can be handed in by email or on paper before the beginning of the next practical class\nDeadline: By the start of the 6th practical class where you are enrolled in SIS"
              ],
              [
                "13. 12. 2023",
                "[NDBI007_06_RTrees.pdf](asset:class06/NDBI007_06_RTrees.pdf)\n[video recording (Czech)](https://drive.google.com/file/d/1vFGwgnB-xJnz1w4KQgx4-i5dW8hO_TKg/view?usp=sharing)\n[video recording (English)](https://drive.google.com/file/d/1a-MFHgP0lPLXfVjt1w3r_-H5lTHeGC__/view?usp=sharing)",
                "-",
                "[NDBI007_06_Solution.pdf](asset:class06/NDBI007_06_Solution.pdf)",
                "[NDBI007_A5.pdf](asset:class06/NDBI007_A5.pdf)\nThe solution can be handed in by email or on paper before the beginning of the consultation class where you are enrolled in SIS"
              ],
              [
                "3. 1. 2024",
                "Consultation",
                "-",
                "-",
                "-"
              ]
            ]
          }
        ]
      },
      {
        "title": "Recommended Literature",
        "anchor": "literature",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Pokorný, Jaroslav, and Michal Žemlička. Základy implementace souborů a databází. Karolinum, 2004."
              }
            ]
          }
        ]
      }
    ],
    "evaluation": {
      "source": "SIS Student Survey",
      "raw_summary": [
        "6/38/38",
        "2,00*:1,10*"
      ],
      "survey_url": "https://is.cuni.cz/studium/anketa/index.php?do=vysledky&skr=2023&sem=3&fak=11320&co=1&ucit=74478&sekce=&povinn=NDBI007&ustav=-1&vyuka=-1&zobraz=Zobraz",
      "course_survey_url": "https://is.cuni.cz/studium/anketa/index.php?do=vysledky&skr=2023&sem=3&fak=11320&co=1&ucit=&sekce=&povinn=NDBI007&ustav=-1&vyuka=C&zobraz=Zobraz",
      "respondents": 6,
      "students": 38,
      "score": 2.0
    },
    "class_count": 7,
    "semester": "231",
    "year": "2023/2024",
    "abbrev": "NDBI007",
    "when": [],
    "link": "teaching/231-NDBI007/index.html",
    "external": false,
    "desc": ""
  },
  {
    "id": "221-NDBI007",
    "code": "NDBI007",
    "name": "Principles of Data Organisation",
    "academic_year": "2022/2023",
    "term": "winter",
    "sis_term_code": "221",
    "description": "",
    "schedule": [],
    "mobile_friendly": true,
    "page": {
      "enabled": true,
      "path": "teaching/221-NDBI007/index.html",
      "kicker": "Practical class"
    },
    "sections": [
      {
        "title": "Basic Information",
        "anchor": "basic-information",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "[Annotation (source: SIS)](https://is.cuni.cz/studium/eng/predmety/index.php?do=predmet&kod=NDBI007)"
              },
              {
                "text": "Lecturer: Irena Holubová (irena.holubova (at) matfyz.cuni.cz)"
              },
              {
                "text": "Tutor: Pavel Koupil (pavel.koupil (at) matfyz.cuni.cz)"
              },
              {
                "text": "[Lectures](https://www.ksi.mff.cuni.cz/~holubova/NDBI007/)"
              },
              {
                "text": "Schedule",
                "children": [
                  {
                    "text": "Lectures: Thursday 12:20 - 13:50 (room S5)"
                  },
                  {
                    "text": "Practical classes:",
                    "children": [
                      {
                        "text": "Czech version every even/odd Monday 15:40 - 17:10 (room SW1)"
                      },
                      {
                        "text": "English version based on individual consultation"
                      }
                    ]
                  }
                ]
              },
              {
                "text": "[Table with points](https://www.icloud.com/numbers/057b2qg_okDTjuEpWfPxkeFlQ#221-NDBI007-Points)"
              }
            ]
          }
        ]
      },
      {
        "title": "Formal Requirements",
        "anchor": "formal-requirements",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Practical classes:",
                "children": [
                  {
                    "text": "Attendance is not compulsory, yet recommended"
                  },
                  {
                    "text": "During each 2nd to 6th practical class, 1 activity point can be acquired for solving exercises"
                  },
                  {
                    "text": "English class may take place in the form of individual consultations and extended homeworks"
                  }
                ]
              },
              {
                "text": "You will be assigned 5 individual homework during the semester",
                "children": [
                  {
                    "text": "There will be standard and extended version of the homework"
                  },
                  {
                    "text": "If you miss a practical class, completing an extended version of homework may award you by 1 extra activity point"
                  },
                  {
                    "text": "Otherwise, up to 3 activity points can be earned for complete and correct solution"
                  },
                  {
                    "text": "There will always be 13 days for completing homework assignment"
                  },
                  {
                    "text": "Particular homework solution can be submitted only once"
                  },
                  {
                    "text": "No late submission is accepted"
                  }
                ]
              },
              {
                "text": "Individual programming task",
                "children": [
                  {
                    "text": "Optionally, you may choose an approach (presented during the semester) to implement as a user-friendly graphical simulator"
                  },
                  {
                    "text": "Approaches include, e.g., primary index, indirect index, bitmaps, Cormack, Larson and Kalja, Fagin, Litwin, LHPE-RL, B-Tree, B+-Tree, B*-Tree, various splitting methods in R-Tree and R*-Tree"
                  },
                  {
                    "text": "Teamwork is allowed, but the points will be distributed"
                  },
                  {
                    "text": "Up to 15 points can be granted for complete and correct implementation"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "title": "Course Credit",
        "anchor": "course-credit",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "At least 5 points from practical classes and individual assignments is required for the course credit to be granted"
              },
              {
                "text": "Note that all above 5 activity points are transferred as bonus points to the exam (up to 30 points)"
              }
            ]
          }
        ]
      },
      {
        "title": "Schedule and Study Material",
        "anchor": "schedule",
        "blocks": [
          {
            "type": "table",
            "headers": [
              "Date",
              "Content",
              "Supplementary Material",
              "Solution",
              "Homework"
            ],
            "rows": [
              [
                "3. 10. 2022",
                "[NDBI007_01_HardDiskDrive.pdf](asset:class01/NDBI007_01_HardDiskDrive.pdf)\n[video recording (English)](https://drive.google.com/file/d/1yuvUXNjvOVqRx7ivlUoWP9nqz1ebZIOz/view?usp=sharing)",
                "[deskstar.pdf](asset:class01/deskstar.pdf)",
                "[NDBI007_01_Solution.pdf](asset:class01/NDBI007_01_Solution.pdf)",
                "-"
              ],
              [
                "17. 10. 2022",
                "[NDBI007_02_IndexesBitmaps.pdf](asset:class02/NDBI007_02_IndexesBitmaps.pdf)\n[video recording (Czech)](https://drive.google.com/file/d/1_ud2AA7X4CoUQ6PmKLiRxeSQJuvw45dm/view?usp=sharing)\n[video recording (English)](https://drive.google.com/file/d/1X8vml3YphKtnxENxGy1HCJ-C1RGqp0-e/view?usp=sharing)",
                "-",
                "[NDBI007_02_Solution.pdf](asset:class02/NDBI007_02_Solution.pdf)",
                "[NDBI007_A1.pdf](asset:class02/NDBI007_A1.pdf)\nThe solution can be handed in by email or on paper before the beginning of the next practical class\nDeadline: By the start of the 3rd practical class where you are enrolled in SIS"
              ],
              [
                "31. 10. 2022",
                "[NDBI007_03_StaticHashing.pdf](asset:class03/NDBI007_03_StaticHashing.pdf)\n[video recording (Czech)](https://drive.google.com/file/d/17B8Yt-FEzOz6jqGPXbNiJp62GJcpRLWU/view?usp=sharing)\n[video recording (English)](https://drive.google.com/file/d/1fU8udkpOoe7j8-D0ptB2oQ6tuIdgt12-/view?usp=sharing)",
                "-",
                "[NDBI007_03_Solution.pdf](asset:class03/NDBI007_03_Solution.pdf)",
                "[NDBI007_A2.pdf](asset:class03/NDBI007_A2.pdf)\n[records.csv](asset:class03/records.csv)\nThe solution can be handed in by email or on paper before the beginning of the next practical class\nDeadline: By the start of the 4th practical class where you are enrolled in SIS"
              ],
              [
                "14. 11. 2022",
                "[NDBI007_04_DynamicHashing.pdf](asset:class04/NDBI007_04_DynamicHashing.pdf)\n[video recording (Czech)](https://drive.google.com/file/d/1ApfOi7h0NmDArv41Uah8kwiynN2Z-ZKj/view?usp=sharing)\n[video recording (English)](https://drive.google.com/file/d/1-6N7QldUan008lObAA1Ddxfw5aWFayde/view?usp=sharing)",
                "-",
                "[NDBI007_04_Solution.pdf](asset:class04/NDBI007_04_Solution.pdf)",
                "[NDBI007_A3.pdf](asset:class04/NDBI007_A3.pdf)\n[records_A3.csv](asset:class04/records_A3.csv)\nThe solution can be handed in by email or on paper before the beginning of the next practical class\nDeadline: By the start of the 5th practical class where you are enrolled in SIS"
              ],
              [
                "28. 11. 2022",
                "[NDBI007_05_BTrees.pdf](asset:class05/NDBI007_05_BTrees.pdf)\n[video recording (Czech)](https://drive.google.com/file/d/1D5Jpav0JcZEvx1w8zoME0-KwKCcpgQPO/view?usp=sharing)\n[video recording (English)](https://drive.google.com/file/d/1O_DAItNzqVxOSLiTXMCqG1B-5iA0f3XI/view?usp=sharing)",
                "-",
                "[NDBI007_05_Solution.pdf](asset:class05/NDBI007_05_Solution.pdf)",
                "[NDBI007_A4.pdf](asset:class05/NDBI007_A4.pdf)\n[records_A4.csv](asset:class05/records_A4.csv)\nThe solution can be handed in by email or on paper before the beginning of the next practical class\nDeadline: By the start of the 6th practical class where you are enrolled in SIS"
              ],
              [
                "12. 12. 2022",
                "[NDBI007_06_RTrees.pdf](asset:class06/NDBI007_06_RTrees.pdf)\n[video recording (Czech)](https://drive.google.com/file/d/1vFGwgnB-xJnz1w4KQgx4-i5dW8hO_TKg/view?usp=sharing)\n[video recording (English)](https://drive.google.com/file/d/1a-MFHgP0lPLXfVjt1w3r_-H5lTHeGC__/view?usp=sharing)",
                "-",
                "[NDBI007_06_Solution.pdf](asset:class06/NDBI007_06_Solution.pdf)",
                "[NDBI007_A5.pdf](asset:class06/NDBI007_A5.pdf)\nThe solution can be handed in by email or on paper before the beginning of the consultation class (i.e., 2. 1. 2023 15:40 GMT+1)"
              ],
              [
                "2. 1. 2023",
                "Consultation",
                "-",
                "-",
                "-"
              ]
            ]
          }
        ]
      },
      {
        "title": "Recommended Literature",
        "anchor": "literature",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Pokorný, Jaroslav, and Michal Žemlička. Základy implementace souborů a databází. Karolinum, 2004."
              }
            ]
          }
        ]
      }
    ],
    "evaluation": {
      "source": "SIS Student Survey",
      "raw_summary": [
        "5/27/27",
        "2,00*:0,71*"
      ],
      "survey_url": "https://is.cuni.cz/studium/anketa/index.php?do=vysledky&skr=2022&sem=3&fak=11320&co=1&ucit=74478&sekce=&povinn=NDBI007&ustav=-1&vyuka=-1&zobraz=Zobraz",
      "respondents": 5,
      "students": 27,
      "score": 2.0
    },
    "class_count": 7,
    "semester": "221",
    "year": "2022/2023",
    "abbrev": "NDBI007",
    "when": [],
    "link": "teaching/221-NDBI007/index.html",
    "external": false,
    "desc": ""
  },
  {
    "id": "212-NDBI040",
    "code": "NDBI040",
    "name": "Modern Database Systems",
    "academic_year": "2021/2022",
    "term": "summer",
    "sis_term_code": "212",
    "description": "",
    "schedule": [],
    "mobile_friendly": true,
    "page": {
      "enabled": true,
      "path": "teaching/212-NDBI040/index.html",
      "kicker": "Practical class"
    },
    "sections": [
      {
        "title": "Basic Information",
        "anchor": "basic-information",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "[Annotation (source: SIS)](https://is.cuni.cz/studium/eng/predmety/index.php?do=predmet&kod=NDBI040)"
              },
              {
                "text": "Lecturer: Irena Holubová (irena.holubova (at) matfyz.cuni.cz)"
              },
              {
                "text": "Tutor: Pavel Koupil (pavel.koupil (at) matfyz.cuni.cz)"
              },
              {
                "text": "[Lectures](https://www.ksi.mff.cuni.cz/~holubova/NDBI040/)"
              },
              {
                "text": "Schedule",
                "children": [
                  {
                    "text": "Lectures: Wednesday 14:00 - 15:30 (room S5)"
                  },
                  {
                    "text": "Practical classes: Thursday 17:20 - 18:50 (room SW2)"
                  }
                ]
              },
              {
                "text": "[Table with points](https://www.icloud.com/numbers/0ca5OzqEks0HfJGvtBOjOv2Aw#212-NDBI040-Points)"
              }
            ]
          }
        ]
      },
      {
        "title": "Formal Requirements",
        "anchor": "formal-requirements",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Practical classes:",
                "children": [
                  {
                    "text": "Attendance (week 1-11) is not compulsory, yet recommended"
                  },
                  {
                    "text": "During some of the practical classes (week 2-11), extra 1 - 2 activity points can be acquired for solving exercises"
                  },
                  {
                    "text": "Participation in at least two presentation classes (week 12-14) is required"
                  }
                ]
              },
              {
                "text": "You will be assigned individual work during the semester:",
                "children": [
                  {
                    "text": "Everyone must choose their distinct topic (i.e., database system), no later than at the fourth practical class"
                  },
                  {
                    "text": "This topic must be reported to and explicitly accepted by the tutor"
                  },
                  {
                    "text": "Based on requirements, tutor will award you by up to 15 points for the presentation"
                  },
                  {
                    "text": "Additionally, each week the best presentations will be awarded by extra (up to 5) points"
                  }
                ]
              }
            ]
          }
        ]
      },
      {
        "title": "Course Credit",
        "anchor": "course-credit",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Presentation of individual assignment is required for the course credit to be granted"
              },
              {
                "text": "Note that activity points are transferred as bonus points to the exam (up to 40 points)"
              }
            ]
          }
        ]
      },
      {
        "title": "Schedule and Study Material",
        "anchor": "schedule",
        "blocks": [
          {
            "type": "table",
            "headers": [
              "Date",
              "Content",
              "Supplementary Material",
              "Solution",
              "Homework"
            ],
            "rows": [
              [
                "17.2. 2022",
                "[NDBI040_00_Introduction.pdf](asset:class01/NDBI040_00_Introduction.pdf)",
                "Tools: ssh / scp (on macOS / Linux) or PuTTy / WinSCP (on Windows)",
                "-",
                "-"
              ],
              [
                "24.2. 2022",
                "[NDBI040_02_MapReduce.pdf](asset:class01/NDBI040_02_MapReduce.pdf)",
                "Maven project: [ndbi040-wordcount.zip](asset:class01/ndbi040-wordcount.zip), [ndbi040-invertedindex.zip](asset:class01/ndbi040-invertedindex.zip)\nData file: [movies.txt](asset:class01/movies.txt), [RomeoAndJuliet.txt](asset:class01/RomeoAndJuliet.txt)\nTools: NetBeans IDE, ssh / scp (on macOS / Linux) or PuTTy / WinSCP (on Windows)\nSoftware requirements: Java JDK 8.x or newer\nReferences: [HDFS: Hadoop File System Shell commands](https://hadoop.apache.org/docs/r3.1.1/hadoop-project-dist/hadoop-common/FileSystemShell.html)\n[MapReduce Tutorial](https://hadoop.apache.org/docs/r3.1.1/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html)\n[MapReduce Commands Guide](https://hadoop.apache.org/docs/r3.1.1/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapredCommands.html)\n[Hadoop JavaDoc API Documentation](https://hadoop.apache.org/docs/r3.1.1/api/)",
                "[ndbi040-invertedindex-solution.zip](asset:class01/ndbi040-invertedindex-solution.zip)",
                "-"
              ],
              [
                "3.3. 2022",
                "[NDBI040_03_ApacheSpark.pdf](asset:class02/NDBI040_03_ApacheSpark.pdf)",
                "Maven project: [ndbi040-wordCountSpark.zip](asset:class02/ndbi040-wordCountSpark.zip), [ndbi040-piEstimation.zip](asset:class02/ndbi040-piEstimation.zip), [ndbi040-actorsSpark.zip](asset:class02/ndbi040-actorsSpark.zip)\nData file: [actors.json](asset:class02/actors.json)\nTools: NetBeans IDE, ssh / scp (on macOS / Linux) or PuTTy / WinSCP (on Windows)\nSoftware requirements: Java JDK 8.x or newer\nReferences: [Apache Spark](https://spark.apache.org)\n[Quick Start](http://spark.apache.org/docs/latest/quick-start.html)\n[RDD Programming Guide](https://spark.apache.org/docs/latest/rdd-programming-guide.html#resilient-distributed-datasets-rdds)\n[Spark SQL, DataFrames and Datasets Guide](https://spark.apache.org/docs/latest/sql-getting-started.html)\n[Submitting Applications](https://spark.apache.org/docs/latest/submitting-applications.html)\n[Additional Spark Examples](https://github.com/apache/spark/tree/master/examples/src/main/java/org/apache/spark/examples)",
                "[ndbi040-piEstimation-solved.zip](asset:class02/ndbi040-piEstimation-solved.zip), [ndbi040-actorsSpark-solved.zip](asset:class02/ndbi040-actorsSpark-solved.zip)",
                "-"
              ],
              [
                "10.3. 2022",
                "[NDBI040_04_Redis.pdf](asset:class03/NDBI040_04_Redis.pdf)",
                "References: [Redis Commands](https://redis.io/commands)\n[Redis Documentation](https://redis.io/documentation)\n[Redis Data Types](https://redis.io/topics/data-types)",
                "[solution_redis.txt](asset:class03/solution_redis.txt)",
                "-"
              ],
              [
                "17.3. 2022",
                "[NDBI040_05_RiakKV.pdf](asset:class03/NDBI040_05_RiakKV.pdf)",
                "Recording: [NDBI040_RiakKV.zip](asset:class03/NDBI040_RiakKV.zip) (MOV; 59.6 MiB; the password is still the same)\nReferences: [Riak KV Documentation](https://docs.riak.com/riak/kv/2.1.4/)\n[Riak KV Search 2.0 Documentation](https://docs.riak.com/riak/kv/2.1.4/developing/usage/search/)\n[Apache Solr Query Parser Documentation](https://lucene.apache.org/solr/guide/6_6/the-standard-query-parser.html)",
                "[solution_riakkv.txt](asset:class03/solution_riakkv.txt)",
                "-"
              ],
              [
                "24.3. 2022",
                "[NDBI040_04_Cassandra.pdf](asset:class04/NDBI040_04_Cassandra.pdf)",
                "References: [Apache Cassandra 3.11.1](https://cassandra.apache.org) (installed on the NoSQL server)\n[The Cassandra Query Language (CQL)](https://cassandra.apache.org/doc/latest/cql/)",
                "[solution_cassandra.txt](asset:class04/solution_cassandra.txt)",
                "-"
              ],
              [
                "31.3. 2022",
                "[NDBI040_05_MongoDB.pdf](asset:class05/NDBI040_05_MongoDB.pdf)",
                "Data file: [data.js](asset:class05/data.js)\nReferences: [MongoDB 3.2.9](https://www.mongodb.com) (installed on the NoSQL server)\n[The MongoDB 3.2 Manual](https://docs.mongodb.com/v3.2/)",
                "[solution_mongodb.txt](asset:class05/solution_mongodb.txt)",
                "-"
              ],
              [
                "7.4. 2022",
                "[NDBI040_06_Neo4j.pdf](asset:class06/NDBI040_06_Neo4j.pdf), [NDBI040_06_Neo4j_2.pdf](asset:class06/NDBI040_06_Neo4j_2.pdf)",
                "Data file: [data.cypher](asset:class06/data.cypher)\nMaven project: [ndbi040-neo4j.zip](asset:class06/ndbi040-neo4j.zip)\nTools: NetBeans IDE, ssh / scp (on macOS / Linux) or PuTTy / WinSCP (on Windows)\nSoftware requirements: Java JDK 8.x or newer\nReferences: [Neo4j 3.0.7](https://neo4j.com) (installed on the NoSQL server)\n[Cypher query language](https://neo4j.com/docs/cypher-manual/current/)\n[Cypher Reference Card](https://neo4j.com/docs/cypher-refcard/current/)",
                "[solution_neo4j.txt](asset:class06/solution_neo4j.txt), [ndbi040-neo4j-solution.zip](asset:class06/ndbi040-neo4j-solution.zip)",
                "-"
              ],
              [
                "14.4. 2022",
                "[NDBI040_07_PostgreSQL.pdf](asset:class07/NDBI040_07_PostgreSQL.pdf)",
                "Data file: [data.txt](asset:class07/data.txt)\nTools: Netbeans IDE, pgAdmin or psql (command line)\nReferences: [PostgreSQL 11.10](https://www.postgresql.org) (installed on the NoSQL server)\n[JSON Types](https://www.postgresql.org/docs/current/datatype-json.html)\n[JSON Functions and Operators](https://www.postgresql.org/docs/11/functions-json.html)\n[Aggregate Functions](https://www.postgresql.org/docs/11/functions-aggregate.html)",
                "[solution_postgresql.txt](asset:class07/solution_postgresql.txt)",
                "-"
              ],
              [
                "21.4. 2022",
                "[NDBI040_08_SciDB.pdf](asset:class08/NDBI040_08_SciDB.pdf), [NDBI040_08_SetupVMWare.pdf](asset:class08/NDBI040_08_SetupVMWare.pdf), [NDBI040_08_SetupVirtualBox.pdf](asset:class08/NDBI040_08_SetupVirtualBox.pdf)",
                "Image: [SciDB 18.1 VirtualBox/VMWare image](https://drive.google.com/drive/folders/1ns5l39SVS9OjJM8-ahHKgXOwguSFjjuo) (download before practical class begins)\nData file: [actors.scidb](asset:class08/actors.scidb), [movies.scidb](asset:class08/movies.scidb), [roles.scidb](asset:class08/roles.scidb)\nSoftware requirements:\n[VirtualBox 6.x](https://www.virtualbox.org/wiki/Downloads)\nor\n[VMWare Fusion Player 12.x](https://www.vmware.com/products/fusion/fusion-evaluation.html)\n/\n[VMWare Workstation Player (16.x)](https://www.vmware.com/products/workstation-player/workstation-player-evaluation.html)\nReferences: [SciDB 18.1 CE](https://paradigm4.atlassian.net/wiki/spaces/scidb/pages/726958116/19.11+Release+Notes) (installed on VirtualBox/VMWare image)\n[SciDB Reference Guide](https://paradigm4.atlassian.net/wiki/spaces/scidb/pages/730268216/SciDB+Reference+Guide)\n[SciDB Operators](https://paradigm4.atlassian.net/wiki/spaces/scidb/pages/730268277/SciDB+Operators)\n[SciDB Functions](https://paradigm4.atlassian.net/wiki/spaces/scidb/pages/730269046/SciDB+Functions)",
                "[solution_scidb.txt](asset:class08/solution_scidb.txt)",
                "-"
              ],
              [
                "28.4. 2022",
                "[NDBI040_09_Elasticsearch.pdf](asset:class09/NDBI040_09_Elasticsearch.pdf)",
                "Data file: [data.txt](asset:class09/data.txt), [bulk.txt](asset:class09/bulk.txt)\nReferences: [Elasticsearch 7.10](https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html) (installed on the NoSQL server)\n[Index API](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices.html)\n[Mapping](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping.html)\n[Mapping Types](https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-types.html)\n[Document API](https://www.elastic.co/guide/en/elasticsearch/reference/current/docs.html)\n[Query DSL](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html)\n[Aggregations](https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations.html)",
                "[solution_elasticsearch.txt](asset:class09/solution_elasticsearch.txt)",
                "-"
              ],
              [
                "5.5. 2022",
                "Presentations #1",
                "Presentation 1: [ArangoDB](asset:assignment/arangoDB.pdf)\nPresentation 2: [Citus](asset:assignment/citus.pdf)\nPresentation 3: [CrateDB](asset:assignment/crateDB.pdf)\nPresentation 4: [MonetDB](asset:assignment/monetDB.pdf)\nPresentation 5: [OrientDB](asset:assignment/orientDB.pdf)\nPresentation 6: [SequoiaDB](asset:assignment/sequoiaDB.pdf)",
                "-",
                "-"
              ],
              [
                "12.5. 2022",
                "Presentations #2",
                "Presentation 7: [Couchbase](asset:assignment/couchbase.pdf)\nPresentation 8: [GridDB](asset:assignment/gridDB.pdf)\nPresentation 9: [RavenDB](asset:assignment/ravenDB.pdf)\nPresentation 10: [Redis](asset:assignment/redis.pdf)\nPresentation 11: [Tarantool](asset:assignment/tarantool.pdf)\nPresentation 12: [YugabyteDB](asset:assignment/yugabyteDB.pdf)",
                "-",
                "-"
              ],
              [
                "18.-19.5. 2022",
                "Presentations #3-4",
                "Presentation 13: [ArcadeDB](asset:assignment/arcadeDB.pdf)\nPresentation 14: [Azure Cosmos DB](asset:assignment/azureCosmosDB.pdf)\nPresentation 15: [ScyllaDB](asset:assignment/scyllaDB.pdf)\nPresentation 16: [TerminusDB](asset:assignment/terminusDB.pdf)\n-----\nPresentation 17: [BangDB](asset:assignment/bangDB.pdf)\nPresentation 18: [MariaDB](asset:assignment/mariaDB.pdf)\nPresentation 19: [MarkLogic](asset:assignment/markLogic.pdf)\nPresentation 20: [MySQL](asset:assignment/mySQL.pdf)\nPresentation 21: [Oracle NoSQL](asset:assignment/oracleNoSQL.pdf)\nPresentation 22: [Virtuoso](asset:assignment/virtuoso.pdf)",
                "-",
                "-"
              ]
            ]
          }
        ]
      },
      {
        "title": "Recommended Literature",
        "anchor": "literature",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Holubová, Irena - Kosek, Jiří - Minařík, Karel - Novák, David: Big Data a NoSQL databáze.\n\nISBN: 978-80-247-5466-6 (hardcover), 978-80-247-5938-8 (eBook PDF), 978-80-247-5939-5 (eBook EPUB).\n\nGrada Publishing, a.s., 2015."
              }
            ]
          }
        ]
      }
    ],
    "evaluation": {
      "source": "SIS Student Survey",
      "survey_url": "https://is.cuni.cz/studium/anketa/index.php?do=vysledky&skr=2021&sem=3&fak=11320&co=1&ucit=74478&sekce=&povinn=NDBI040&ustav=-1&vyuka=-1&zobraz=Zobraz"
    },
    "class_count": 14,
    "semester": "212",
    "year": "2021/2022",
    "abbrev": "NDBI040",
    "when": [],
    "link": "teaching/212-NDBI040/index.html",
    "external": false,
    "desc": ""
  },
  {
    "id": "211-NDBI007",
    "code": "NDBI007",
    "name": "Database Access Methods",
    "academic_year": "2021/2022",
    "term": "winter",
    "sis_term_code": "211",
    "description": "",
    "schedule": [],
    "mobile_friendly": false,
    "page": {
      "enabled": true,
      "path": "teaching/211-NDBI007/index.html",
      "kicker": "Practical class"
    },
    "sections": [
      {
        "title": "Basic Information",
        "anchor": "basic-information",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "[Annotation (source: SIS)](https://is.cuni.cz/studium/eng/predmety/index.php?do=predmet&kod=NDBI007)"
              },
              {
                "text": "Lecturer: Irena Holubová (irena.holubova (at) matfyz.cuni.cz)"
              },
              {
                "text": "Tutor: Pavel Koupil (pavel.koupil (at) matfyz.cuni.cz)"
              },
              {
                "text": "[Lectures](https://www.ksi.mff.cuni.cz/~holubova/NDBI007/)"
              },
              {
                "text": "Schedule",
                "children": [
                  {
                    "text": "Lectures: Thursday 10:40 - 12:10 (room S3)"
                  },
                  {
                    "text": "Practical classes:",
                    "children": [
                      {
                        "text": "Czech version every odd Wednesday 12:20 - 13:50 (room S1)"
                      },
                      {
                        "text": "English version based on individual consultation"
                      },
                      {
                        "text": "Starting from 24. 11. 2021, the practical classes will be taught virtually [(Zoom meeting 939 8504 4853)](https://matfyz.zoom.us/j/93985044853)"
                      }
                    ]
                  }
                ]
              },
              {
                "text": "[Table with points](https://www.icloud.com/numbers/0-g7SoNnKgN1Fl-upIdJH5plA#NDBI007_Points_2021_Winter)"
              }
            ]
          }
        ]
      },
      {
        "title": "Formal Requirements",
        "anchor": "formal-requirements",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Attendance during practical classes is mandatory"
              },
              {
                "text": "You may miss one practical class"
              },
              {
                "text": "Each additional missed practical class can be made up with individual homework within the topic of the missed class"
              },
              {
                "text": "There will always be 12 days for completing such homework assignment"
              },
              {
                "text": "Particular homework solution can be submitted only once"
              },
              {
                "text": "English class takes place in the form of individual consultations and assignments"
              }
            ]
          }
        ]
      },
      {
        "title": "Course Credit",
        "anchor": "course-credit",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "If the above conditions are satisfied, the course credit is granted"
              }
            ]
          }
        ]
      },
      {
        "title": "Schedule and Study Material",
        "anchor": "schedule",
        "blocks": [
          {
            "type": "table",
            "headers": [
              "Date",
              "Content",
              "Supplementary Material",
              "Solution",
              "Homework"
            ],
            "rows": [
              [
                "13. 10. 2021",
                "[NDBI007_01_HardDiskDrive.pdf](asset:class01/NDBI007_01_HardDiskDrive.pdf)",
                "[deskstar.pdf](asset:class01/deskstar.pdf)",
                "-",
                "Exercises (not solved examples) 1, 2 and 3 are mandatory\nSolve them on paper and send the solution to my email address (see the contact)\nThe deadline is 25. 10. 2021 23:59 AoE"
              ],
              [
                "27. 10. 2021",
                "[NDBI007_02_IndexesBitmaps.pdf](asset:class02/NDBI007_02_IndexesBitmaps.pdf)",
                "-",
                "[NDBI007_02_Solution.pdf](asset:class02/NDBI007_02_Solution.pdf)",
                "Exercises 1, 2 and 3 are mandatory\nSolve them on paper and send the solution to my email address (see the contact)\nThe deadline is 8. 11. 2021 23:59 AoE"
              ],
              [
                "10. 11. 2021",
                "[NDBI007_03_StaticHashing.pdf](asset:class03/NDBI007_03_StaticHashing.pdf)",
                "-",
                "[NDBI007_03_Solution.pdf](asset:class03/NDBI007_03_Solution.pdf)",
                "Exercises 1, 2, 3 and 4 are mandatory\nSolve them on paper and send the solution to my email address (see the contact)\nThe deadline is 22. 11. 2021 23:59 AoE"
              ],
              [
                "24. 11. 2021",
                "[NDBI007_04_DynamicHashing.pdf](asset:class04/NDBI007_04_DynamicHashing.pdf)",
                "-",
                "[NDBI007_04_Solution.pdf](asset:class04/NDBI007_04_Solution.pdf)",
                "Exercises 1, 2 and 3 are mandatory\nSolve them on paper and send the solution to my email address (see the contact)\nThe deadline is 6. 12. 2021 23:59 AoE"
              ],
              [
                "8. 12. 2021",
                "[NDBI007_05_BTrees.pdf](asset:class05/NDBI007_05_BTrees.pdf)",
                "-",
                "[NDBI007_05_Solution.pdf](asset:class05/NDBI007_05_Solution.pdf)",
                "Exercises 1, 2 and 3 are mandatory\nSolve them on paper and send the solution to my email address (see the contact)\nThe deadline is 20. 12. 2021 23:59 AoE"
              ],
              [
                "22. 12. 2021",
                "[NDBI007_06_RTrees.pdf](asset:class06/NDBI007_06_RTrees.pdf)",
                "-",
                "[NDBI007_06_Solution.pdf](asset:class06/NDBI007_06_Solution.pdf)",
                "Exercises 1, 2, 3 and 4 are mandatory\nSolve them on paper and send the solution to my email address (see the contact)\nThe deadline is 3. 1. 2022 23:59 AoE"
              ]
            ]
          }
        ]
      },
      {
        "title": "Recommended Literature",
        "anchor": "literature",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Pokorný, Jaroslav, and Michal Žemlička. Základy implementace souborů a databází. Karolinum, 2004."
              }
            ]
          }
        ]
      }
    ],
    "evaluation": {
      "source": "SIS Student Survey",
      "survey_url": "https://is.cuni.cz/studium/anketa/index.php?do=vysledky&skr=2021&sem=3&fak=11320&co=1&ucit=74478&sekce=&povinn=NDBI007&ustav=-1&vyuka=-1&zobraz=Zobraz"
    },
    "class_count": 6,
    "semester": "211",
    "year": "2021/2022",
    "abbrev": "NDBI007",
    "when": [],
    "link": "teaching/211-NDBI007/index.html",
    "external": false,
    "desc": ""
  },
  {
    "id": "201-NDBI040",
    "code": "NDBI040",
    "name": "Modern Database Concepts",
    "academic_year": "2020/2021",
    "term": "winter",
    "sis_term_code": "201",
    "description": "",
    "schedule": [],
    "mobile_friendly": false,
    "page": {
      "enabled": true,
      "path": "teaching/201-NDBI040/index.html",
      "kicker": "Practical class"
    },
    "sections": [
      {
        "title": "Basic Information",
        "anchor": "basic-information",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "[Annotation (source: SIS)](https://is.cuni.cz/studium/eng/predmety/index.php?do=predmet&kod=NDBI040)"
              },
              {
                "text": "Lecturer: Irena Holubová (holubova (at) ksi.mff.cuni.cz)"
              },
              {
                "text": "Tutor: Pavel Čontoš (contos (at) ksi.mff.cuni.cz)"
              },
              {
                "text": "[Lectures](https://www.ksi.mff.cuni.cz/~holubova/NDBI040/)"
              },
              {
                "text": "Schedule",
                "children": [
                  {
                    "text": "Lectures: Wednesday 9:00 - 10:30 [(Zoom meeting 934 9020 1312)](https://cesnet.zoom.us/j/93490201312)"
                  },
                  {
                    "text": "Practical classes: Wednesday 12:20 - 13:50 [(Zoom meeting 929 7260 9390)](https://matfyz.zoom.us/j/92972609390)"
                  }
                ]
              },
              {
                "text": "[Table with points from practical classes and homework assignments](https://www.icloud.com/numbers/0Y9XVRnoW6xqGo_oi-E5C4z9g#NDBI040_Points_2020_Winter)"
              }
            ]
          }
        ]
      },
      {
        "title": "Formal Requirements",
        "anchor": "formal-requirements",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Attendance during practical classes is not compulsory, yet recommended"
              },
              {
                "text": "You will be assigned eight individual homeworks during the semester"
              },
              {
                "text": "There will always be at least 14 days for completing the homework assignment"
              },
              {
                "text": "Everyone must choose their distinct topic, not later than at the second practical class"
              },
              {
                "text": "This topic must be reported to and explicitly accepted by the tutor"
              },
              {
                "text": "Your homework solutions must be within the topic, original, realistic, and non-trivial"
              },
              {
                "text": "At most 95 points in total can be gained for all the homework assignments"
              },
              {
                "text": "Solutions are awarded by up to 10 points"
              },
              {
                "text": "Some (3) homeworks will be evaluated by randomly selected students, which is awarded by up to extra 3 * 5 points"
              },
              {
                "text": "There will be 7 days to evaluate randomly assigned homework"
              },
              {
                "text": "In case of any shortcomings, fewer points will be awarded appropriately"
              },
              {
                "text": "Delay for every started day is penalized by 1 point, maximal penalty is 2 points"
              },
              {
                "text": "Solutions can be submitted even repeatedly, only the latest version is assessed"
              },
              {
                "text": "Once a given assignment is assessed by the tutor, it cannot be resubmitted once again"
              },
              {
                "text": "All the homework assignments must be submitted before the intended exam date in order to be considered"
              },
              {
                "text": "During some of the practical classes, extra 1 - 2 activity points can be acquired for solving exercises"
              }
            ]
          }
        ]
      },
      {
        "title": "Course Credit",
        "anchor": "course-credit",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "At least 60 of 115 points is required for the course credit to be granted"
              },
              {
                "text": "All above 75 points (max 40 points) is transferred as bonus points to the exam"
              }
            ]
          }
        ]
      },
      {
        "title": "Schedule and Study Material",
        "anchor": "schedule",
        "blocks": [
          {
            "type": "table",
            "headers": [
              "Date",
              "Content",
              "Supplementary Material",
              "Solution",
              "Homework"
            ],
            "rows": [
              [
                "-",
                "[NDBI040_00_Introduction.pdf](asset:class01/NDBI040_00_Introduction.pdf)",
                "Tools: ssh / scp (on macOS / Linux) or PuTTy / WinSCP (on Windows)",
                "-",
                "-"
              ],
              [
                "-",
                "[NDBI040_01_MapReduce.pdf](asset:class01/NDBI040_01_MapReduce.pdf), [NDBI040_00_Introduction.pdf](asset:class01/NDBI040_00_Introduction.pdf)",
                "Maven project: [ndbi040-wordcount.zip](asset:class01/ndbi040-wordcount.zip), [ndbi040-invertedindex.zip](asset:class01/ndbi040-invertedindex.zip)\nTools: NetBeans IDE, ssh / scp (on macOS / Linux) or PuTTy / WinSCP (on Windows)\nSoftware requirements: Java JDK 8.x or newer",
                "[ndbi040-invertedindex-solved.zip](asset:class01/ndbi040-invertedindex-solved.zip)",
                "MapReduce (deadline at the end of semester)"
              ],
              [
                "-",
                "[NDBI040_02_ApacheSpark.pdf](asset:class02/NDBI040_02_ApacheSpark.pdf)",
                "Maven project: [ndbi040-wordCountSpark.zip](asset:class02/ndbi040-wordCountSpark.zip), [ndbi040-piEstimation.zip](asset:class02/ndbi040-piEstimation.zip), [ndbi040-actorsSpark.zip](asset:class02/ndbi040-actorsSpark.zip)\nData file: [actors.json](asset:class02/actors.json)\nTools: NetBeans IDE, ssh / scp (on macOS / Linux) or PuTTy / WinSCP (on Windows)\nSoftware requirements: Java JDK 8.x or newer",
                "[ndbi040-piEstimation-solved.zip](asset:class02/ndbi040-piEstimation-solved.zip), [ndbi040-actorsSpark-solved.zip](asset:class02/ndbi040-actorsSpark-solved.zip)",
                "-"
              ],
              [
                "-",
                "[NDBI040_03_RiakKV.pdf](asset:class03/NDBI040_03_RiakKV.pdf), [NDBI040_03_Redis.pdf](asset:class03/NDBI040_03_Redis.pdf)",
                "-",
                "[solution_riakkv.txt](asset:class03/solution_riakkv.txt), [solution_redis.txt](asset:class03/solution_redis.txt)",
                "Riak + Redis (deadline November 18th 2020 23:59 CET)"
              ],
              [
                "-",
                "[NDBI040_03_RiakKV.pdf](asset:class03/NDBI040_03_RiakKV.pdf), [NDBI040_03_Redis.pdf](asset:class03/NDBI040_03_Redis.pdf)",
                "-",
                "[solution_riakkv.txt](asset:class03/solution_riakkv.txt), [solution_redis.txt](asset:class03/solution_redis.txt)",
                "Riak + Redis (deadline November 18th 2020 23:59 CET)"
              ],
              [
                "-",
                "[NDBI040_04_Cassandra.pdf](asset:class04/NDBI040_04_Cassandra.pdf)",
                "-",
                "[solution_cassandra.txt](asset:class04/solution_cassandra.txt)",
                "Cassandra (deadline November 25th 2020 23:59 CET)"
              ],
              [
                "-",
                "[NDBI040_05_MongoDB.pdf](asset:class05/NDBI040_05_MongoDB.pdf)",
                "Data file: [data.js](asset:class05/data.js)",
                "[solution_mongodb.txt](asset:class05/solution_mongodb.txt)",
                "MongoDB (deadline December 2nd 2020 23:59 CET)"
              ],
              [
                "-",
                "[NDBI040_06_Neo4j.pdf](asset:class06/NDBI040_06_Neo4j.pdf), [NDBI040_06_Neo4j_2.pdf](asset:class06/NDBI040_06_Neo4j_2.pdf)",
                "Data file: [data.cypher](asset:class06/data.cypher)\nMaven project: [ndbi040-neo4j.zip](asset:class06/ndbi040-neo4j.zip)\nTools: NetBeans IDE, ssh / scp (on macOS / Linux) or PuTTy / WinSCP (on Windows)\nSoftware requirements: Java JDK 8.x or newer",
                "[solution_neo4j.txt](asset:class06/solution_neo4j.txt), [ndbi040-neo4j-solution.zip](asset:class06/ndbi040-neo4j-solution.zip)",
                "Neo4j (deadline December 9th 2020 23:59 CET)"
              ],
              [
                "-",
                "[NDBI040_07_PostgreSQL.pdf](asset:class07/NDBI040_07_PostgreSQL.pdf)",
                "Data file: [data.txt](asset:class07/data.txt)\nEvaluation: PostgreSQL Evaluation (deadline December 27th 2020 23:59 CET)\nTools: Netbeans IDE, pgAdmin or psql (command line)",
                "[solution_postgresql.txt](asset:class07/solution_postgresql.txt)",
                "PostgreSQL (deadline December 16th 2020 23:59 CET)"
              ],
              [
                "-",
                "[NDBI040_08_SciDB.pdf](asset:class08/NDBI040_08_SciDB.pdf), [NDBI040_08_SetupVMWare.pdf](asset:class08/NDBI040_08_SetupVMWare.pdf), [NDBI040_08_SetupVirtualBox.pdf](asset:class08/NDBI040_08_SetupVirtualBox.pdf)",
                "Image: [SciDB 18.1 VirtualBox/VMWare image](https://drive.google.com/drive/folders/1ns5l39SVS9OjJM8-ahHKgXOwguSFjjuo) (download before practical class begins)\nData file: [actors.scidb](asset:class08/actors.scidb), [movies.scidb](asset:class08/movies.scidb), [roles.scidb](asset:class08/roles.scidb)\nSciDB (deadline December 23rd 2020 23:59 CET)\nEvaluation: SciDB Evaluation (deadline January 1st 2021 23:59 CET)\nSoftware requirements: [VirtualBox 6.x](https://www.virtualbox.org/wiki/Downloads) or [VMWare Fusion Player 12.x](https://www.vmware.com/products/fusion/fusion-evaluation.html) / [VMWare Workstation Player (16.x)](https://www.vmware.com/products/workstation-player/workstation-player-evaluation.html)",
                "[solution_scidb.txt](asset:class08/solution_scidb.txt)",
                "-"
              ],
              [
                "-",
                "[NDBI040_09_Elasticsearch.pdf](asset:class09/NDBI040_09_Elasticsearch.pdf)",
                "Data file: [data.txt](asset:class09/data.txt), [bulk.txt](asset:class09/bulk.txt)\nEvaluation: Elasticsearch Evaluation(deadline January 8th 2021 23:59 CET)",
                "[solution_elasticsearch.txt](asset:class09/solution_elasticsearch.txt)",
                "Elasticsearch (deadline December 30th 2020 23:59 CET)"
              ],
              [
                "-",
                "[TBD](#)",
                "Maven project: [TBD](#)\nTools: TBD\nSoftware requirements: TBD",
                "[TBD](#)",
                "-"
              ]
            ]
          }
        ]
      },
      {
        "title": "Recommended Literature",
        "anchor": "literature",
        "blocks": [
          {
            "type": "list",
            "ordered": false,
            "items": [
              {
                "text": "Holubová, Irena - Kosek, Jiří - Minařík, Karel - Novák, David: Big Data a NoSQL databáze.\n\nISBN: 978-80-247-5466-6 (hardcover), 978-80-247-5938-8 (eBook PDF), 978-80-247-5939-5 (eBook EPUB).\n\nGrada Publishing, a.s., 2015."
              }
            ]
          }
        ]
      }
    ],
    "evaluation": {
      "source": "SIS Student Survey",
      "survey_url": "https://is.cuni.cz/studium/anketa/index.php?do=vysledky&skr=2020&sem=3&fak=11320&co=1&ucit=74478&sekce=&povinn=NDBI040&ustav=-1&vyuka=-1&zobraz=Zobraz"
    },
    "class_count": 12,
    "semester": "201",
    "year": "2020/2021",
    "abbrev": "NDBI040",
    "when": [],
    "link": "teaching/201-NDBI040/index.html",
    "external": false,
    "desc": ""
  },
  {
    "id": "192-NPRG036",
    "code": "NPRG036",
    "name": "XML Technologies",
    "academic_year": "2019/2020",
    "term": "summer",
    "sis_term_code": "192",
    "description": "",
    "schedule": [],
    "mobile_friendly": false,
    "external_url": "https://www.ksi.mff.cuni.cz/~svoboda/courses/192-NPRG036/",
    "evaluation": {
      "source": "SIS Student Survey",
      "survey_url": "https://is.cuni.cz/studium/anketa/index.php?do=vysledky&skr=2019&sem=3&fak=11320&co=1&ucit=74478&sekce=&povinn=NPRG036&ustav=-1&vyuka=-1&zobraz=Zobraz"
    },
    "semester": "192",
    "year": "2019/2020",
    "abbrev": "NPRG036",
    "when": [],
    "link": "https://www.ksi.mff.cuni.cz/~svoboda/courses/192-NPRG036/",
    "external": true,
    "desc": ""
  },
  {
    "id": "191-NDBI040",
    "code": "NDBI040",
    "name": "Modern Database Concepts",
    "academic_year": "2019/2020",
    "term": "winter",
    "sis_term_code": "191",
    "description": "",
    "schedule": [],
    "mobile_friendly": false,
    "external_url": "https://www.ksi.mff.cuni.cz/~svoboda/courses/191-NDBI040/",
    "evaluation": {
      "source": "SIS Student Survey",
      "survey_url": "https://is.cuni.cz/studium/anketa/index.php?do=vysledky&skr=2019&sem=3&fak=11320&co=1&ucit=74478&sekce=&povinn=NDBI040&ustav=-1&vyuka=-1&zobraz=Zobraz"
    },
    "semester": "191",
    "year": "2019/2020",
    "abbrev": "NDBI040",
    "when": [],
    "link": "https://www.ksi.mff.cuni.cz/~svoboda/courses/191-NDBI040/",
    "external": true,
    "desc": ""
  }
]
