diff --git a/README.adoc b/README.adoc
index e298c197..19b0ba1d 100644
--- a/README.adoc
+++ b/README.adoc
@@ -3,166 +3,149 @@ CC BY-NC-SA 4.0]]
image:images/banner.png[image]
-== DevOps, Software Evolution and Software Maintenance
+== DevOps, Software Evolution and Software Maintenance (BSc)
=== Content
-This page contains information on the schedule, material, exam, etc. for the elective "DevOps, Software Evolution and Software Maintenance Content" at IT University of Copenhagen, spring 2025 (link:https://learnit.itu.dk/local/coursebase/view.php?ciid=1618[BSc course description on LearnIT] and link:https://learnit.itu.dk/local/coursebase/view.php?ciid=1620[MSc course description on LearnIT]).
+This page contains information on the schedule, material, exam, etc. for the BSc elective "DevOps, Software Evolution and Software Maintenance Content" at IT University of Copenhagen, spring 2026 (link:https://learnit.itu.dk/local/coursebase/view.php?ciid=1896[Course description on LearnIT].
=== Schedule
-Lectures are on Fridays from 10:00 to 12:00 in Auditorium 2 (0A35) and exercises are on Fridays from 12:00 to 14:00 in rooms 5A14-16.
+Lectures are on Tuesdays from 8:00 to 10:00 in rooms 2A12-14 and exercises are on Tuesdays from 10:00 to 12:00 in rooms 2A12-14.
*OBS*: We expect you to be present during the entire time, not only the lecture hours.
.Course schedule *Note*: While times are locked, the topics are subject to change.
-[width="100%",cols="4%,4%,4%,3%,4%,30%,17%,30%",options="header",]
+[width="100%",cols="4%,4%,5%,6%,30%,17%,30%",options="header",]
|=======================================================================
-|# |Date |Time |Lecturer |Preparation |Topic |Exercises |Project Work
+|# |Date |Time |Preparation |Topic |Exercises |Project Work
// w5
|1
-|31/1
-|10:00 - 14:00
-|Helge
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_01/README_PREP.md[Prep. material]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_01/Slides.md[Project start, forming groups, SSH, SCP, and Bash]
+|27/1
+|8:00 - 12:00
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_01/README_PREP.md[Prep. material]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_01/Slides.md[Project start, forming groups, SSH, SCP, and Bash]
|
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_01/README_TASKS.md[Refactor _ITU-MiniTwit_ to work on modern system]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_01/README_TASKS.md[Refactor _ITU-MiniTwit_ to work on modern system]
// w6
|2
-|7/2
-|10:00 - 14:00
-|Helge
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_02/README_PREP.md[Prep. material]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_02/Slides.md[Packaging applications, Containerization with Docker]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_02/README_EXERCISE.md[Using Docker]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_02/README_TASKS.md[Refactor _ITU-MiniTwit_ in another programming language and tech. stack]
+|3/2
+|8:00 - 12:00
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_02/README_PREP.md[Prep. material]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_02/Slides.md[Packaging applications, Containerization with Docker]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_02/README_EXERCISE.md[Using Docker]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_02/README_TASKS.md[Containerize _ITU-MiniTwit_ with Docker]
// w7
|3
-|14/2
-|10:00 - 14:00
-|Mircea
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_03/README_PREP.md[Prep. material]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_03/Slides.md[Provision of local and remote virtual machines]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_03/README_EXERCISE.md[Using Vagrant, VirtualBox, and DigitalOcean]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_03/README_TASKS.md[Continue refactoring, deployment of your _ITU-MiniTwit_ to a remote server.]
+|10/2
+|8:00 - 12:00
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_03/README_PREP.md[Prep. material]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_03/Slides.md[Provision of local and remote virtual machines]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_03/README_EXERCISE.md[Using Vagrant, VirtualBox, and DigitalOcean]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_03/README_TASKS.md[Deployment of _ITU-MiniTwit_ to a remote server, and implementation of simulator API]
// w8
|4
-|21/2
-|10:00 - 14:00
-|Mircea
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_04/README_PREP.md[Prep. material]
-|*Guest Lecture: What is DevOps? (Eficode)*;
-link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_04/Slides.md[Continuous Integration (CI), Continuous Delivery (CD), and Continuous Deployment]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_04/README_EXERCISE.md[Using GitHub Actions CI] (*Simulator test*)
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_04/README_TASKS.md[Continue refactoring, Setup CI & CD for reproducible builds, tests, delivery, and deployment]
+|17/2
+|8:00 - 12:00
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_04/README_PREP.md[Prep. material]
+|*Guest Lecture: "What is DevOps?" by Jan from Eficode*;
+link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_04/Slides.md[Continuous Integration (CI), Continuous Delivery (CD), and Continuous Deployment]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_04/README_EXERCISE.md[Using GitHub Actions CI] (*Simulator test*)
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_04/README_TASKS.md[Setup CI & CD for reproducible builds, tests, delivery, and deployment]
// w9
|5
-|28/2
-|10:00 - 14:00
-|Helge
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_05/README_PREP.md[Prep. material]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_05/Slides.md[What is DevOps and configuration management]
+|24/2
+|8:00 - 12:00
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_05/README_PREP.md[Prep. material]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_05/Slides.md[What is DevOps and configuration management]
|(*Simulator starts*)
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_05/README_TASKS.md[Cleaning and polishing of your _ITU-MiniTwit_, introduction of DB abstraction layer, and entering maintenance]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_05/README_TASKS.md[Cleaning and polishing of your _ITU-MiniTwit_, introduction of DB abstraction layer, and entering maintenance]
// w10
|6
-|7/3
-|10:00 - 14:00
-|Helge
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_06/README_PREP.md[Prep. material]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_06/Slides.md[Monitoring]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_06/README_EXERCISE.md[Using Prometheus and Grafana]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_06/README_TASKS.md[Add monitoring to your _ITU-MiniTwit_ and peer-review]
+|3/3
+|8:00 - 12:00
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_06/README_PREP.md[Prep. material]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_06/Slides.md[Monitoring]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_06/README_EXERCISE.md[Using Prometheus and Grafana]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_06/README_TASKS.md[Add monitoring to your _ITU-MiniTwit_ and peer-review]
// w11
|7
-|14/3
-|10:00 - 14:00
-|Helge
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_07/README_PREP.md[Prep. material]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_07/Slides.md[Software Quality, Maintainability & Technical Debt]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_07/README_EXERCISE.md[Understand tests and SonarQube Quality Model.]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_07/README_TASKS.md[Enhancing CI/CD setup with test suite and static code analysis]
+|10/3
+|8:00 - 12:00
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_07/README_PREP.md[Prep. material]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_07/Slides.md[Software Quality, Maintainability & Technical Debt]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_07/README_EXERCISE.md[Understand tests and SonarQube Quality Model.]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_07/README_TASKS.md[Enhancing CI/CD setup with test suite and static code analysis]
// w12
|8
-|21/3
-|10:00 - 14:00
-|Mircea
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_08/README_PREP.md[Prep. material]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_08/Slides.md[Logging, and Log Analysis]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_08/README_EXERCISE.md[A Basic EFK Stack]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_08/README_TASKS.md[Add logging to your _ITU-MiniTwit_ and UI Testing Each Others Systems]
+|17/3
+|8:00 - 12:00
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_08/README_PREP.md[Prep. material]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_08/Slides.md[Logging and Log Analysis]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_08/README_EXERCISE.md[A Basic EFK Stack]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_08/README_TASKS.md[Add logging to your _ITU-MiniTwit_ and UI Testing Each Others Systems]
// w13
|9
-|28/3
-|10:00 - 14:00
-|Mircea
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_09/README_PREP.md[Prep. material]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_09/Slides.md[Availability]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_09/README_EXERCISE.md[A Basic Swarm]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_09/README_TASKS.md[Isolate components into services/containers/VMs]
+|24/3
+|8:00 - 12:00
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_09/README_PREP.md[Prep. material]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_09/Slides.md[Availability]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_09/README_EXERCISE.md[A Basic Swarm]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_09/README_TASKS.md[Isolate components into services/containers/VMs]
// w14
-|10
-|4/4
-|10:00 - 14:00
-|Mircea
-|-
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_10/TLSTutorial.md[TLS Tutorial]
-|
-|Continue isolation of components into services/containers/VMs and Fix reported problems
-// w15
-|11
-|11/4
-|10:00 - 14:00
-|Mircea
-|
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_11/Slides.md[Security]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_11/README_EXERCISE.md[Pentesting]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_11/README_TASKS.md[Security Hardening]
-// w16
|–
-|18/4
-|-
+|31/3
|-
|-
|Easter Break
|-
| Operations & maintenance still reacting on issue reports and fixing of errors :)
+// w15
+|10
+|7/4
+|8:00 - 12:00
+|-
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_10/Slides.md[Security, Firewall, and TLS]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_10/README_EXERCISE.md[Pentesting]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_10/README_TASKS.md[Security Hardening]
+// w16
+|11
+|14/4
+|8:00 - 12:00
+|
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_11/IaC.pdf[Infrastructure as Code]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_11/README_EXERCISE.md[MiniTwit Infrastructure as Code]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_11/README_TASKS.md[Encode your infrastructure setup]
// w17
|12
-|25/4
-|10:00 - 14:00
-|Mircea
+|21/4
+|8:00 - 12:00
+|
+|*Guest Lecture: DevOps@NetCompany by Tarik*, link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_12/Slides.md[Documentation of Systems and Projects]
+|
|
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_12/IaC.pdf[Infrastructure as Code]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_12/README_EXERCISE.md[MiniTwit Infrastructure as Code]
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_12/README_TASKS.md[Encode your infrastructure setup]
// w18
|13
-|2/5
-|10:00 - 14:00
-|Helge
+|28/4
+|8:00 - 12:00
|
-|*Guest Lecture: DevOps@NetCompany by Tarik*, link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_13/Architectural_Documentation.pdf[Documentation of Systems and Projects]
+|link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_13/Slides.md[Exam prep., Thesis topics, Evaluation, Cookies :)]
|
|*Simulator stops*. Write report.
// w19
|14
-|9/5
-|10:00 - 14:00
-|Helge
+|5/5
+|8:00 - 12:00
+|
|
-|link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_14/Slides.md[Exam prep., Thesis topics, Evaluation, Cookies :)]
|
|Write report.
|=======================================================================
-* Exam submission: Latest Friday *30/5/2025 14:00*
-* Exam period: 25/6/2025 to 27/6/2025
-
+* Exam submission: Latest Friday *22/5/2026 14:00* via WISEflow
=== TA Supervision
@@ -173,6 +156,7 @@ TBA
==== Activity Dashboard
////
+
* link:http://138.68.66.124/status.html[Overview]
* link:http://138.68.66.124/commit_activity_daily.svg[Daily commit activity per group]
* link:http://138.68.66.124/commit_activity_weekly.svg[Weekly commit activity per group]
@@ -203,16 +187,16 @@ There are many more such Ubuntu derivatives, choose one of your liking: link:htt
Since all sessions contain hands-on exercises, we recommend that you have such a Linux version installed on a computer.
(In case you decide to run another operating system, we cannot provide too much support for these during class.) The recommended setup is to have such a Linux installed natively on your machine.
-Find installation instructions link:https://github.com/itu-devops/lecture_notes/blob/master/sessions/session_00/README.adoc[session_00/README.adoc].
+Find installation instructions link:https://github.com/itu-devops/BSc_lecture_notes/blob/master/sessions/session_00/README.md[session_00/README.md].
=== Team
-* *Teachers*: Helge, Mircea
-* *TAs*: David, Patrick, Rasmus
+* *Teachers*: Helge
+* *TAs*: David, Patrick
=== Communication
-Outside teaching sessions you can communicate with each other, and with the teachers via the link:https://teams.microsoft.com/l/channel/19%3AFu7JwCZrkViMXmxr7K5vAiJV5bYYIoFPHPuV9RDiABo1%40thread.tacv2/?groupId=915e499e-87d0-4f62-851d-b966bcfbc491&tenantId=bea229b6-7a08-4086-b44c-71f57f716bdb[the course's Teams channel].
+Outside teaching sessions you can communicate with each other, the TAs, and the teachers via the link:https://teams.microsoft.com/l/team/19%3ANtbHJgbpONeG3FiF2DS0jX2R_qNAcnzAJr8bZ0qtAVA1%40thread.tacv2/conversations?groupId=dccde382-03f7-4b4f-bbe1-252d63a8b953&tenantId=bea229b6-7a08-4086-b44c-71f57f716bdb[the course's Teams channel].
=== Groups
@@ -223,10 +207,6 @@ TBA
TBA
-== Exam Schedule
-
-TBA
-
== Re-exam Schedule
diff --git a/README.html b/README.html
new file mode 100644
index 00000000..604b57d0
--- /dev/null
+++ b/README.html
@@ -0,0 +1,730 @@
+
+
+
DevOps, Software Evolution and Software Maintenance (BSc)
+
+
+
Content
+
+
This page contains information on the schedule, material, exam, etc. for the BSc elective "DevOps, Software Evolution and Software Maintenance Content" at IT University of Copenhagen, spring 2026 (Course description on LearnIT.
+
+
+
+
Schedule
+
+
Lectures are on Tuesdays from 8:00 to 10:00 in rooms 2A12-14 and exercises are on Tuesdays from 10:00 to 12:00 in rooms 2A12-14.
+
+
+
OBS: We expect you to be present during the entire time, not only the lecture hours.
+
+
+
Table 1. Course schedule Note: While times are locked, the topics are subject to change.
Exam submission: Latest Friday 22/5/2026 14:00 via WISEflow
+
+
+
+
+
+
TA Supervision
+
+
TBA
+
+
+
+
Dashboards
+
+
Activity Dashboard
+
+
+
+
Simulator Status Dashboard
+
+
+
+
+
Recordings
+
+
This is not a distance course.
+This term, we will not record the lectures.
+You will have access to all written lecture material through this repository though.
Since all sessions contain hands-on exercises, we recommend that you have such a Linux version installed on a computer.
+(In case you decide to run another operating system, we cannot provide too much support for these during class.) The recommended setup is to have such a Linux installed natively on your machine.
+
+
+
\ No newline at end of file
diff --git a/repositories.py b/repositories.py
index f49f57e5..e942efab 100644
--- a/repositories.py
+++ b/repositories.py
@@ -1,50 +1,50 @@
GROUP_REPOS = [
[
"group a",
- "",
- ["https://github.com//"],
+ "ZeroDownTime",
+ ["https://github.com/ZeroDownTime-ITU/minitwit_project"],
"http(s):///",
"http(s):///",
],
[
"group b",
- "",
- ["https://github.com//"],
+ "catch(RuntimeException){goto f;}",
+ ["https://github.com/JohannesHackl/DevOps26_RE_minitwit.git"],
"http(s):///",
"http(s):///",
],
[
"group c",
- "",
- ["https://github.com//"],
+ "group c",
+ ["https://github.com/jskoven/Devops2026_jklo_jakst_aing_asjo_mbln"],
"http(s):///",
"http(s):///",
],
[
"group d",
- "",
- ["https://github.com//"],
+ "Dense Dino Nuggets",
+ ["https://github.com/Slug-Boi-ITU-Repositories/Dense-Dino-Nuggets"],
"http(s):///",
"http(s):///",
],
[
"group e",
- "",
- ["https://github.com//"],
+ "Jams",
+ ["https://github.com/sebsthiel/minitwit-devops"],
"http(s):///",
"http(s):///",
],
[
"group f",
- "",
- ["https://github.com//"],
+ "if time > 16 {beer++;}",
+ ["https://github.com/TienCamLy/MiniTwit"],
"http(s):///",
"http(s):///",
],
[
"group g",
- "",
- ["https://github.com//"],
+ "DevOpps",
+ ["https://git.marfavi.com/DevOpps/itu-minitwit-migration"],
"http(s):///",
"http(s):///",
],
@@ -57,8 +57,8 @@
],
[
"group i",
- "",
- ["https://github.com//"],
+ "I Terroni",
+ ["https://github.com/stegish/I-Terroni-DevOps"],
"http(s):///",
"http(s):///",
],
@@ -71,8 +71,8 @@
],
[
"group k",
- "",
- ["https://github.com//"],
+ "Pat Myaz",
+ ["https://github.com/ITU-DevOps2026/ITU-minitwit"],
"http(s):///",
"http(s):///",
],
@@ -85,37 +85,37 @@
],
[
"group m",
- "",
- ["https://github.com//"],
+ "Holy C Enjoyers",
+ ["https://github.com/MudiLoodi/minitwit"],
"http(s):///",
"http(s):///",
],
[
"group n",
- "",
- ["https://github.com//"],
+ "Diversity",
+ ["https://github.com/huncut47/diversity"],
"http(s):///",
"http(s):///",
],
[
"group o",
- "",
- ["https://github.com//"],
+ "Rollback and relax",
+ ["https://github.com/alqeren1/devops"],
"http(s):///",
"http(s):///",
],
[
- "group p",
- "",
- ["https://github.com//"],
+ "group a",
+ "EasTops",
+ ["https://github.com/AntohaY/itu-minitwit"],
"http(s):///",
"http(s):///",
],
[
"group q",
- "",
- ["https://github.com//"],
+ "/",
"http(s):///",
],
-]
\ No newline at end of file
+]
diff --git a/sessions/session_00/.gitkeep b/sessions/session_00/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/sessions/session_00/README.md b/sessions/session_00/README.md
new file mode 100644
index 00000000..5bf600fa
--- /dev/null
+++ b/sessions/session_00/README.md
@@ -0,0 +1,78 @@
+## Preparation
+
+Remember to backup your data before starting the installation process and in particular resizing your partitions! Also double check values before repartitioning!
+
+The following links are exemplary guides, you might find others that are more suitable to your personal setup.
+
+## Installing Linux (Pop!_OS) on Harddisk
+
+* Download the OS from https://pop.system76.com/
+* Follow the official installation instructions: https://support.system76.com/articles/install-pop
+
+In case you install Pop!_OS or any similar Linux on you Laptop and you want to connect to ITU's WiFi and Eduroam network, do the following:
+
+* Navigate to: itu.dk/wireless
+* click "Choose another installer to download"
+* click on the "Linux" button
+* On the pop-up saying: "Please use your ITU email address as username." click "Continue"
+* Download the file `eduroam-linux-IUoC-All_users.py`
+* Transfer that file to your Linux computer
+* Open a terminal and run `python3 eduroam-linux-IUoC-All_users.py`
+* Use your full email address as userid when prompted
+
+The process above installs the necessary certificates on your computer.
+
+
+## Installing Linux on Harddisk (Windows Dual Boot)
+
+In case you want to install a Linux next to an existing Windows, the following links might provide helpful information
+
+* https://blnlabs.com/dual-boot-pop-os-and-windows-10/
+* https://www.tecmint.com/install-ubuntu-alongside-with-windows/
+* https://vitux.com/how-to-install-ubuntu-18-04-along-with-windows-10/
+
+
+## Installing Linux on Harddisk (MacOS Dual Boot)
+
+* For older Intel-based Macs without Touchbar: https://www.maketecheasier.com/install-dual-boot-ubuntu-mac/
+* For Intel-based Macs with Touchbar:
+ * First check if the Wifi card of your model is supported:
+https://github.com/Dunedan/mbp-2016-linux#wi-fi
+ * If yes: https://apple.stackexchange.com/a/375863
+ * If not, either:
+ * Install in a Virtual Machine (see below), or
+ * Install on another old computer that you can use for this course.
+* For Macs with M1/M2 processor:
+ * The only Linux distribution that runs natively on "Apple Silicon" is [Asahi Linux](https://asahilinux.org/)
+ * Their installer that is linked from the front-page installs Asahi Linux next to MacOS
+
+
+## Installing Linux on USB Key instead of Harddisk
+
+In case you do not want to install another operating system on your computer's harddisk but on an external drive, follow these instructions: http://ubuntuhandbook.org/index.php/2014/11/install-real-ubuntu-os-usb-drive/
+
+## Installing Linux as Virtual Machine
+
+In case non of the above options of installing Linux are an option for you, you might want to install Linux in a Virtual Machine (VM).
+In lecture three, we will talk more about virtualization.
+Some of the examples in this lecture will likely not work in a Linux VM.
+However, the rest of the course contents should work in a VM
+
+
+### VirtualBox (for both macOS and Windows)
+ * https://support.system76.com/articles/install-in-vm/
+ * Since 2024, VirtualBox [should work](https://blogs.oracle.com/virtualization/oracle-virtualbox-710) on "Apple Silicon" Macs
+
+### UTM (for macOS)
+
+UTM is a frontend for qemu, which also allows to emulate an x86 computer.
+* Install [UTM](https://mac.getutm.app/)
+* Install a virtual machine with Ubuntu for ARM: https://docs.getutm.app/guides/ubuntu/
+
+### VMware Fusion (for macOS "Apple Silicon")
+
+VMware Fusion is a hypervisor for the macOS operating system, and is [offered as a free service](https://blogs.vmware.com/cloud-foundation/2024/11/11/vmware-fusion-and-workstation-are-now-free-for-all-users/).
+
+ * Download the VMware Fusion 13.x https://www.vmware.com/products/desktop-hypervisor/workstation-and-fusion
+ * You have to create an account on the Broadcom homepage.
+ * If in doubt, follow this video: https://www.youtube.com/watch?v=V8M6zgVBtbo
diff --git a/sessions/session_01/README_PREP.md b/sessions/session_01/README_PREP.md
new file mode 100644
index 00000000..9269970f
--- /dev/null
+++ b/sessions/session_01/README_PREP.md
@@ -0,0 +1,9 @@
+# Preparation Material for Session 01
+
+ - Please fill out the small survey on https://www.menti.com/ (the proper link was sent to your ITU email address).
+ - Make sure that you in one way or another have access to a Linux, see our [recommendations](https://github.com/itu-devops/BSc_lecture_notes#recommendation) and [../session_00/README.md](../session_00/README.md).
+ - Read and experiment with https://ryanstutorials.net/bash-scripting-tutorial/. In particular, work with the sections on variables, `if` statements, loops and functions
+ - Understand how programming shell scripts is different to programming in a programming language that you know: https://www.linuxjournal.com/content/understanding-bash-elements-programming
+
+In case you need some introduction to working with Linux:
+ - https://ryanstutorials.net/linuxtutorial/
diff --git a/sessions/session_01/README_TASKS.md b/sessions/session_01/README_TASKS.md
new file mode 100644
index 00000000..1c1cd4e4
--- /dev/null
+++ b/sessions/session_01/README_TASKS.md
@@ -0,0 +1,126 @@
+# Your turn now!
+
+
+
+
+ - [1) Adding Version Control](#1-adding-version-control)
+ - [2) Try to develop a high-level understanding of _ITU-MiniTwit_.](#2-try-to-develop-a-high-level-understanding-of-itu-minitwit)
+ - [3) Migrate _ITU-MiniTwit_ to run on a modern computer running Linux](#3-migrate-itu-minitwit-to-run-on-a-modern-computer-running-linux)
+ - [4) Share your Work on GitHub](#4-share-your-work-on-github)
+ - [5) Preparation for next time](#5-preparation-for-next-time)
+
+
+## 1) Adding Version Control
+
+
+Before starting your refactoring work, convert the contents of the directory `itu-minitwit` into a Git repository and add all files to it so that you can always go back to the beginning of your work, i.e., the very first commit in your repositories should contain the code _as taken over_ without any modification yet.
+
+In case you are in doubt about converting a directory of files into a Git repository, check chapter 2 _"Git Basics"_ from the free online [Pro Git book](https://git-scm.com/book/en/v2) also the [preparation material](../session_02/README_PREP.md) for next week might serve as a starting point.
+
+
+## 2) Try to develop a high-level understanding of _ITU-MiniTwit_.
+
+Throughout the semester you will work on your own version of _ITU-MiniTwit_, which will be in many ways similar to the version you just took over. Therefore, it is worth to understand how it is working. Perhaps it is best to start your investigation on the top of the file `minitwit.py`, followed by the function `timeline()`, the functions `before_request()` and `after_request()`, and then all the other functions.
+
+As described in class, _ITU-MiniTwit_ relies on the web-application framework [Flask](https://palletsprojects.com/p/flask/). The [official documentation](https://flask.palletsprojects.com/en/) as well as the book [Flask Web Development](https://www.oreilly.com/library/view/flask-web-development/9781491991725/) might support you in this task. In case you are in doubt about some Python constructs, the free book [Whirlwind Tour of Python](https://jakevdp.github.io/WhirlwindTourOfPython/) might be helpful.
+
+
+#### Why do we do that? Why do I have to understand other peoples' code?
+
+ > Unfortunately, computer programming education often focuses on how to single-handedly develop programs from scratch in a single language and single execution environment, a development style prevalent in the 1950s and 60s. Nowadays, software development is typically a team-based activity and most often involves extending and maintaining existing systems written in a multitude of languages for diverse execution environments. It’s now even more important to understand code concepts, forms, structures, and idioms to be able to write code that other programmers can read easily.
+ >
+ > [Diomidis Spinellis _"Reading, Writing, and Code: The key to writing readable code is developing good coding style."_](https://dl.acm.org/doi/pdf/10.1145/957717.957782)
+
+Many of the barriers for taking over an existing system are also identified as issues when joining an open-source community in [Steinmacher et al. _"Let Me In: Guidelines for the Successful Onboarding of Newcomers to Open Source Projects"_](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=8254320&tag=1)
+
+
+## 3) Migrate _ITU-MiniTwit_ to run on a modern computer running Linux
+
+By "modern computer", we mean your personal computer running, e.g., Linux.
+
+### What do you need?
+
+ * A modern Python, i.e., version >= 3.12,
+ - There are various ways of installing it, either via the system's package manager (`apt search python3`)
+ - manually from [python.org](https://www.python.org/downloads/)
+ - via [pyenv](https://github.com/pyenv/pyenv)
+ - via [Anaconda](https://www.anaconda.com/products/individual)
+ * The Python dependencies from `itu-minitwit`:
+ - [Flask](https://flask.palletsprojects.com/en/3.0.x/) >= version 3.0.0
+ - [Werkzeug](https://palletsprojects.com/p/werkzeug/) >= version 3.0.0
+ - [Jinja2](https://palletsprojects.com/p/jinja/) >= version 3.0.0
+ * A current C compiler, e.g., `gcc`
+ - Likely it is already part of your Linux installation.
+ - You can check that, for example with:
+ ```bash
+ gcc --version
+ ```
+ - Since the `flag_tool` is a C program, you have to compile it again:
+ * `flag_tool` includes `sqlite3.h`, which is likely not yet installed on your system.
+ * It can be installed (together with the required shared library) via:
+ ```bash
+ sudo apt install libsqlite3-dev
+ ```
+ * To work with the database that you downloaded from the server, you likely need [`sqlite3`](https://sqlite.org/index.html) ((`apt search sqlite3`))
+ - To inspect the database file while refactoring, you might want to use a tool to "look into" your database file, such as the [DB Browser for SQLite](https://sqlitebrowser.org/), which you can install via:
+ ```bash
+ sudo apt install sqlitebrowser
+ ```
+
+### How do I start refactoring _ITU-MiniTwit_?
+
+Your task is to modify as few lines as possible in the given sources of _ITU-MiniTwit_, just enough to make it run on your Linux system with a Python >= 3.12 and the dependencies given above.
+
+ * You will likely want to make use of the tool `2to3`, which is part of your Python installation, and which can help you translating Python 2 programs to Python 3 programs.
+ - You might want to read its help text before using it:
+ ```bash
+ 2to3 --help
+ ```
+ - After applying the `2to3` tool compare the original source code of `minitwit.py`, i.e., the one that you downloaded in class from the old server, with the `minitwit.py3` that is generated by the tool.
+ - You can compare text files with the `diff` command:
+ ```bash
+ diff minitwit.py minitwit.py3
+ ```
+ - Once you are sure that you understand what the `2to3` tool changed, replace the contents of `minitwit.py` with the Python 3 sources.
+ * After refactoring `minitwit.py` to a modern Python 3 version, do the same refactoring with `minitwit_tests.py`.
+ That is, make sure that the tests that can be executed against the original version of `minitwit.py` pass against your refactored version of `minitwit.py` too.
+ **OBS**: Making use of existing test suites during refactoring is one of the most important tasks in software evolution.
+
+ * **Hint**:
+ - When converting `minitwit.py` to Python 3 you might receive an error when reading the SQL script when initializing the database in line: `db.cursor().executescript(f.read())`.
+ Likely, decoding of the file contents into `utf-8` has to be declared explicitly.
+ - Make sure to test this code (by running it), which will only be executed when initializing an empty database.
+ - Also some functions from the `werkzeug` module were moved to another submodule. To resolve the issue Google for the error message and you will find a corresponding change entry.
+
+ * For information, check the runtime dependencies of your compiled `flag_tool` with the `ldd` command:
+ ```bash
+ ldd ~/Desktop/itu-minitwit/flag_tool
+ ```
+ * Lastly, adapt the shell script `control.sh` according to the recommendations of the tool [`shellcheck`](https://www.shellcheck.net/), which is a linter for shell scripts
+ ```bash
+ shellcheck control.sh
+ ```
+ - You can install the tool via: `sudo apt install shellcheck`
+
+## 4) Share your Work on GitHub
+
+ - Create a public repository on GitHub (**Not on github.itu.dk but on github.com**).
+ - Either create an organization for all your team members and let the organization own all repositories that you create during this semester,
+ - or, create a public repository for one of you and invite the other team members as collaborators.
+ - Keep versions of all your refactoring work in that repository.
+ - Once you are done (and latest by **Monday Feb 2nd, at 12:00**) [create a release](https://help.github.com/en/github/administering-a-repository/creating-releases) with your refactored version of _ITU-MiniTwit_.
+
+
+Please share your repositories with us. Send a GitHub pull-request on the file [`repositories.py`](https://github.com/itu-devops/BSc_lecture_notes/blob/master/repositories.py) in which you replace, e.g., `https://github.com//` with the repository URL of your group. In case you use more than one repository, please add them to the corresponding list too.
+
+##### Pull request???
+
+In case you are in doubt about how to send a pull request on GitHub, see:
+
+ * https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-requests
+ * https://git-scm.com/book/en/v2/GitHub-Contributing-to-a-Project
+
+
+## 5) Preparation for next time
+
+Read and work through the [preparation material](../session_02/README_PREP.md) before the next session, I will refer to some of it's contents during the lecture.
diff --git a/sessions/session_01/Slides.html b/sessions/session_01/Slides.html
new file mode 100644
index 00000000..c1059ccb
--- /dev/null
+++ b/sessions/session_01/Slides.html
@@ -0,0 +1,724 @@
+
+
+
+ Slides
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sessions/session_01/Slides.md b/sessions/session_01/Slides.md
new file mode 100644
index 00000000..597bc10e
--- /dev/null
+++ b/sessions/session_01/Slides.md
@@ -0,0 +1,651 @@
+class: center, middle
+
+
+
+# DevOps, Software Evolution and Software Maintenance
+
+Helge Pfeiffer, Associate Professor,
+[Research Center for Government IT](https://www.itu.dk/forskning/institutter/institut-for-datalogi/forskningscenter-for-offentlig-it),
+[IT University of Copenhagen, Denmark](https://www.itu.dk)
+`ropf@itu.dk`
+
+---
+class: center, middle
+
+# About this course
+
+---
+
+## Who are we?
+
+ * **Teachers**: Helge
+ * **TAs**: David, Patrick
+
+
+### How to contact us?
+
+ - Via [Teams](https://teams.microsoft.com/l/channel/19%3ANtbHJgbpONeG3FiF2DS0jX2R_qNAcnzAJr8bZ0qtAVA1%40thread.tacv2/General?groupId=dccde382-03f7-4b4f-bbe1-252d63a8b953&tenantId=bea229b6-7a08-4086-b44c-71f57f716bdb)
+
+---
+
+## Helge
+
+
+
+ * Dipl-Inf. in Software Engineering from Friedrich-Schiller Universität Jena
+ * PhD in Software Engineering from ITU
+ * Software engineer at DMI
+ * Lecturer at Cphbusiness
+ * Since January 2019 back to ITU in the Center for Government IT
+
+---
+
+## Who are you?
+
+
+
+---
+
+## Who are you?
+
+
+
+---
+
+## Our Expectations
+
+ * Having fun with our work.
+ * Hopefully, presenting relevant aspects of software engineering that are representative for your future professional tasks.
+
+--
+
+ > M2. Maintenance typically consumes about 40 to 80 percent (60 percent average) of software costs. Therefore, it is probably the most important life cycle phase.
+ >
+ > ...
+ >
+ > M5. Most software development tasks and software maintenance tasks are the same—except for the additional maintenance task of "understanding the existing product." This task is the dominant maintenance activity, consuming roughly 30 percent of maintenance time. So, you could claim that maintenance is more difficult than development.
+ >
+ > [Robert L. Glass "Frequently Forgotten Fundamental Facts about Software Engineering"](http://www.eng.auburn.edu/~kchang/comp6710/readings/Forgotten_Fundamentals_IEEE_Software_May_2001.pdf)
+
+---
+
+## Our Expectations, continued
+
+
+ * That we learn from your experiences and knowledge. (We are not smarter than you are when it comes to the topics of this course, we only have a good idea on what we shall do together)
+ * That you support each other when working in groups. The entire course and your projects are a team endeavor.
+ * That you work continuously (as we do) on this course.
+ * That you work for the about 10-12 hours per week on this course that you should have allocated for it according to ECTS.
+ * That you work collaboratively in public repositories on GitHub.
+ * That you read carefully our or other's documentation.
+
+--
+
+Note, be prepared for quite a bit of work and many moments of despair 😕
+
+This is unfortunately how learning works.
+At the moment it hurts but once you know how to solve your problems, solutions appear to be easy and straight forward.
+
+ * Focus on your learning.
+
+---
+
+## Do not get stressed by this course!
+
+
+
+--
+
+ * ~~I grade your exams according to the meaning of the grades, i.e., good means good!~~
+ * This year: The exam is a pass/fail exam, i.e., no grades
+ - I hope that that does not diminish your activity in this course
+
+---
+
+## Schedule and Material
+
+ * Schedule: https://github.com/itu-devops/BSc_lecture_notes#schedule
+ * Course repository: https://github.com/itu-devops/BSc_lecture_notes
+
+
+
+---
+
+## Course Book?
+
+No book as such.
+We will link you to relevant material.
+In a few weeks, we will read parts of [_"The DevOps Handbook"_](https://itrevolution.com/product/the-devops-handbook-second-edition/) on which this course is loosely based.
+Sometimes, I will link to chapters from [_DevOps for the Desperate_](https://nostarch.com/devops-desperate).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+---
+
+## LearnIT
+
+Find on [LearnIT](https://learnit.itu.dk/local/coursebase/view.php?ciid=1898) the:
+
+ - official course description,
+ - intended learning outcomes, and
+ - exam description
+
+---
+
+## Getting Discounts
+
+Check the GitHub student developers pack, https://education.github.com/pack.
+
+You can get credits for some of the platforms we are going to use throughout this course.
+
+---
+
+## How to work through this course?
+
+For every week do from left to right what is specified in the course's [schedule](https://github.com/itu-devops/BSc_lecture_notes#schedule).
+
+That is, prepare for the next session with the given material, join the respective session, and afterwards work on the project (see next slide).
+
+---
+
+## Project work
+
+You will run through this course in groups. All project groups have preferably five members. These groups realize the projects together.
+
+The project work forms the basis of this course. That is, you cannot expect to come to lectures listen and read a bit and then pass the exam. This is a hands-on course and you will have to perform _"DevOps, software evolution and software maintenance activities [...] directly on [your] systems"_ (Course Description on LearnIT)
+
+---
+
+### Lectures are not recorded
+
+ * Experience shows, that lectures are watched to a way lower degree than people believe.
+ * Video recordings of lectures are likely not beneficial, see Edwards et al. [_"A study exploring the impact of lecture capture availability and lecture capture usage on student attendance and attainment"_](https://link.springer.com/article/10.1007/s10734-018-0275-9)
+
+
+
+---
+
+### Lectures are not recorded, what can I do?
+
+ * Come to the lecture and exercise sessions.
+ * Take notes!
+ - Either with pen and paper (best for your brain and retention, see e.g., [Mueller et al. _"The Pen Is Mightier Than the Keyboard: Advantages of Longhand Over Laptop Note Taking "_](https://journals.sagepub.com/doi/abs/10.1177/0956797614524581)) or some other technology.
+ * Share your notes with each other.
+ - If you want to, we can establish a note sharing channel, either on Teams, in a Git repository, physically, etc.
+
+---
+
+## Why Linux?
+
+--
+
+### You are a Software Developer
+
+According to Stack Overflow's _2025 Developer Survey_ survey, more than 50% of the respondents use a *nix OS professionally.
+
+
+- Source: https://survey.stackoverflow.co/2025/technology#1-computer-operating-systems
+
+--
+
+### Public servers on the Internet
+
+Depending on the statistics, up to 98.3% of servers on the internet run some kind of Linux or Unix.
+Source: https://en.wikipedia.org/wiki/Usage_share_of_operating_systems#Public_servers_on_the_Internet
+
+---
+
+### *nix on Supercomputers
+
+
+Source: https://en.wikipedia.org/wiki/Usage_share_of_operating_systems#Supercomputers
+
+---
+
+### Practical reasons
+
+Since this is a hands-on course, we provide a lot of code and examples using various technologies.
+
+Unfortunately, we do not have resources to do that consistently over various versions of Windows, Linux, and MacOS.
+
+---
+
+### Digital Sovereignty
+
+ > 15.000 danskere skal i løbet af året springe ud i at lave et skifte på det digitale område.
+ >
+ > »Det handler om uafhængighed. Internettet skulle jo være et neutralt og frit sted, men i det øjeblik, der er platforme, som har monopol og kan slukke for kommunikation eller folks konti, så står man med et demokratisk problem«
+Source: https://www.version2.dk/artikel/15000-danskere-skal-skifte-tech-platform-om-maaneder
+
+
+
+You might want to have a look at this in a free minute: [_A Post American Enshittification Resistant Internet_](https://media.ccc.de/v/39c3-a-post-american-enshittification-resistant-internet#t=80)
+
+
+Image source: https://www.heise.de/news/39C3-Am-Di-Day-weg-von-Tech-Monopolen-aus-den-USA-und-China-11125535.html
+
+
+---
+
+## Groups
+
+ * Each group should have _five_ members.
+ * We will form them **today!**
+ * In [this spreadsheet](https://ituniversity.sharepoint.com/:x:/r/sites/2026BScDevOpsSoftwareEvolutionandSoftwareMaintenancecopy/Shared%20Documents/General/Groups.xlsx?d=w68b4499a92ef4448903040a08bbce6f5&csf=1&web=1&e=0DvaRW)
+
+
+
+---
+
+## Getting bored today?
+
+
+
+Find and establish a communication channel for you and your group members and support them in downloading the code from the remote server (see slides below).
+
+SCP the program `flag_tool` from the remote server, run it on your computer. What happens? Describe to your group mates after the session what you did and why running the program on your computer either works or does not work.
+
+**DO NOT** disturb other people by doing *smart* stuff on the server!
+
+---
+
+class: center, middle
+
+# The Story Begins
+
+---
+
+# The Story
+
+This is fiction, but it is the story for this course 😀
+
+
+
+
+More than a decade ago, in 2012, some unknown young developers at ITU decided to build a small micro-blogging platform _ITU-MiniTwit_ to take over the market from Twitter, which was only six years old at that point.
+
+---
+
+## _ITU-MiniTwit_
+
+
+
+---
+
+They programed in a mix of hot technologies of the time directly on a server with Ubuntu 12.04 (released 26 Apr. 2012, EOL 28 April 2017.).
+
+
+
+--
+
+Now some years later, we decide to resurrect their work and we will continue development from where they left.
+
+---
+
+class: center, middle
+
+# Your Turn!
+
+
+---
+
+## Where is _ITU-MiniTwit_ running?
+
+During the time of this lecture it is running on the machine with the IP `164.92.180.145`.
+
+ - Point your browser to: http://164.92.180.145:5000/public.
+ - You should see an application like this:
+
+
+
+ - Play around with the system
+ - Sign-up
+ - Thereafter, create some tweets
+
+---
+
+## Getting _ITU-MiniTwit_ from the remote machine
+
+The developers back in 2012 did not have a Git repository to version control all the artifacts of their application.
+Git was first released in 2005.
+Neither did they hear about GitHub as a host for Git repositories.
+GitHub was first launched in 2008.
+
+So you have to do what really many people still do today.
+You copy the files over from the remote machine.
+
+ - How do you do this?
+
+---
+
+### Using `scp` to copy files/directories from a remote machine
+
+
+```bash
+$ scp -r student@164.92.180.145:/home/student/itu-minitwit ~/Desktop/
+```
+
+To secure copy from the remote machine, you need the password `uiuiui`.
+
+---
+
+### What kind of files did you download?
+
+
+```bash
+$ cd ~/Desktop/itu-minitwit
+$ ls -la
+total 68
+drwxr-xr-x 4 ropf ropf 4096 Jan 31 12:42 .
+drwxr-xr-x 3 ropf ropf 4096 Jan 31 12:42 ..
+-rwxr-xr-x 1 ropf ropf 590 Jan 31 12:42 control.sh
+-rwxr-xr-x 1 ropf ropf 13032 Jan 31 12:42 flag_tool
+-rw-r--r-- 1 ropf ropf 1895 Jan 31 12:42 flag_tool.c
+-rw-r--r-- 1 ropf ropf 129 Jan 31 12:42 Makefile
+-rwxr-xr-x 1 ropf ropf 8575 Jan 31 12:42 minitwit.py
+-rwxr-xr-x 1 ropf ropf 5078 Jan 31 12:42 minitwit_tests.py
+-rw-r--r-- 1 ropf ropf 466 Jan 31 12:42 schema.sql
+drwxr-xr-x 2 ropf ropf 4096 Jan 31 12:42 static
+drwxr-xr-x 2 ropf ropf 4096 Jan 31 12:42 templates
+```
+
+---
+
+### What are the files `minitwit.py`, `flag_tool`, `control.sh`?
+
+You can check that with the `file` command:
+
+```bash
+$ file minitwit.py
+minitwit.py: Python script text executable, ASCII text
+$ file flag_tool
+flag_tool: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.24, BuildID[sha1]=ac3ffde74553ce2d7d0551bfa4bd684f14978e43, not stripped
+$ file control.sh
+control.sh: ASCII text
+```
+
+Use the `less` command to inspect the files `minitwit.py`, `flag_tool`, and `control.sh`.
+
+ - What do you see?
+
+---
+
+### What happens when you run the `minitwit.py` application on your computer?
+
+```bash
+$ python minitwit.py
+```
+
+```bash
+$ python minitwit.py
+ File "/home/ropf/Desktop/itu-minitwit/minitwit.py", line 97
+ print "We got a visitor from: " + str(request.remote_addr)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?
+```
+
+---
+
+### What happens when you run the `flag_tool` on your computer?
+
+```bash
+$ ./flag_tool -h
+```
+
+--
+
+Depending on your host operating system it may either run (you are on a corresponding Linux):
+
+```bash
+ITU-Minitwit Tweet Flagging Tool
+
+Usage:
+ flag_tool ...
+ flag_tool -i
+ flag_tool -h
+Options:
+-h Show this screen.
+-i Dump all tweets and authors to STDOUT.
+```
+
+--
+
+or it may look like in the following (in case you are on MacOS on an Intel Mac):
+
+```bash
+$ ./flag_tool -h
+-bash: ./flag_tool: cannot execute binary file
+```
+
+ - What does that mean?
+ - Where does the error come from?
+
+---
+
+### What happens when you run the `flag_tool` on your computer?
+
+```bash
+$ ./flag_tool 42
+SQL error: no such table: message
+```
+
+ * What does that mean?
+
+---
+
+## How does _ITU-MiniTwit_ work?
+
+### A client-server application
+
+
+
+---
+
+### A high-level overview over _ITU-MiniTwit_
+
+
+
+---
+
+## Connecting to the server and inspecting _ITU-MiniTwit_ (Bash basics)
+
+Note, in the listings `$` denotes the prompt on your local machine, which might look different in your case.
+`student@webserver:~$` is the prompt on the server machine.
+
+To SSH to the remote machine, you need the password `uiuiui`.
+
+```bash
+$ ssh student@164.92.180.145
+student@webserver:~$ cd itu-minitwit/
+student@webserver:~/itu-minitwit$ ls
+Makefile control.sh flag_tool flag_tool.c minitwit.py minitwit_tests.py schema.sql static templates
+```
+
+---
+
+### Inspecting the database as admin
+
+```bash
+student@webserver:~$ ./control.sh inspectdb
+```
+
+ - What do you see?
+ - How can you navigate through the database?
+ - How can you search for a string?
+ - How do you find its next/previous occurrence?
+
+---
+
+### How does inspecting the database work?
+
+Look into the control script. For example with the `less` command:
+
+```bash
+student@webserver:~$ less -N ./control.sh
+```
+
+ - What do lines 15 and 16 do?
+ - What is the meaning of `|` on line 16?
+ - What are `-N` and `./control.sh` in the above command?
+ - What is the meaning of `./` in it?
+
+---
+
+### Bash Weirdness...
+
+```bash
+if [ $1 = "init" ]; then
+
+ if [ -f "/tmp/minitwit.db" ]; then
+ echo "Database already exists."
+ exit 1
+ fi
+ echo "Putting a database to /tmp/minitwit.db..."
+ python -c"from minitwit import init_db;init_db()"
+```
+
+ - What is the `[ $1 = "init" ]` in the above code?
+ - What does `type test` tell you?
+ - What does `man [` tell you?
+
+https://www.linuxjournal.com/content/understanding-bash-elements-programming
+
+---
+
+### How can I run the `flag_tool` program manually?
+
+```bash
+student@webserver:~$ ./flag_tool
+```
+
+It will not do anything. So try to read its help text
+
+```bash
+student@webserver:~$ ./flag_tool -h
+```
+
+Afterwards run:
+
+```bash
+student@webserver:~$ ./flag_tool -i
+```
+
+What happens?
+
+---
+
+### Another way of searching for strings in text
+
+You may want to use the `grep` command:
+
+```bash
+student@webserver:~$ ./flag_tool -i | grep "idiot"
+student@webserver:~$ ./flag_tool -i | grep "dumb"
+```
+
+ - What does again the `|` do?
+ - What does `grep` do?
+ - What are `"idiot"` and `"dumb"` in the above command?
+
+---
+
+### Flagging a tweet
+
+```bash
+student@webserver:~$ ./flag_tool
+```
+
+ - How does that flagging functionality look like in the control script `control.sh`?
+
+---
+
+### Getting help for a command
+
+In case you are in doubt, usually a command's manual is quite conclusive:
+
+```bash
+student@webserver:~$ man grep
+```
+
+---
+
+### How do I know that _ITU-MiniTwit_ is running?
+
+Since the knowledge of the previous developers is likely lost, you could inspect the list of all running processes and `grep` for the name of the command:
+
+```bash
+student@webserver:~/itu-minitwit$ ps aux | grep minitwit
+student 19871 0.0 1.0 44388 11044 pts/0 S 10:40 0:00 /usr/bin/python /home/student/.local/bin/gunicorn --workers 4 --timeout 120 --bind 0.0.0.0:5000 minitwit:app
+student 19874 0.0 1.6 57760 17240 pts/0 S 10:40 0:00 /usr/bin/python /home/student/.local/bin/gunicorn --workers 4 --timeout 120 --bind 0.0.0.0:5000 minitwit:app
+student 19875 0.0 1.4 55824 14584 pts/0 S 10:40 0:00 /usr/bin/python /home/student/.local/bin/gunicorn --workers 4 --timeout 120 --bind 0.0.0.0:5000 minitwit:app
+student 19876 0.0 1.4 55832 14588 pts/0 S 10:40 0:00 /usr/bin/python /home/student/.local/bin/gunicorn --workers 4 --timeout 120 --bind 0.0.0.0:5000 minitwit:app
+student 19877 0.0 1.4 55844 14596 pts/0 S 10:40 0:00 /usr/bin/python /home/student/.local/bin/gunicorn --workers 4 --timeout 120 --bind 0.0.0.0:5000 minitwit:app
+```
+
+Whenever you run `./control.sh stop` all processes with corresponding names are `pkill`ed and thereby the application is shutdown.
+
+---
+
+## Do you have everything?
+
+
+
+
+
+ - Which files/artifacts are missing in what you have?
+
+---
+
+### Getting the Database
+
+And just to also collect all of your tweets, let's copy the most current database:
+
+```bash
+$ scp student@164.92.180.145:/tmp/minitwit.db ~/Desktop/itu-minitwit
+```
+
+--
+
+Now, you have everything that you need for your task until next week.
+
+
+
+---
+
+
+# What to do now?
+
+ * Do the [project work](../session_01/README_TASKS.md) until the end of the week
+ * And [prepare for the next session](../session_02/README_PREP.md)
diff --git a/sessions/session_01/images/2020_grade_dist.png b/sessions/session_01/images/2020_grade_dist.png
new file mode 100644
index 00000000..9a819174
Binary files /dev/null and b/sessions/session_01/images/2020_grade_dist.png differ
diff --git a/sessions/session_01/images/ITU-minitwit-architecture-highlevel.png b/sessions/session_01/images/ITU-minitwit-architecture-highlevel.png
new file mode 100644
index 00000000..89d5199e
Binary files /dev/null and b/sessions/session_01/images/ITU-minitwit-architecture-highlevel.png differ
diff --git a/sessions/session_01/images/ITU-minitwit-architecture.png b/sessions/session_01/images/ITU-minitwit-architecture.png
new file mode 100644
index 00000000..41df6dc2
Binary files /dev/null and b/sessions/session_01/images/ITU-minitwit-architecture.png differ
diff --git a/sessions/session_01/images/ITU-minitwit-screenshot.png b/sessions/session_01/images/ITU-minitwit-screenshot.png
new file mode 100644
index 00000000..f4e22703
Binary files /dev/null and b/sessions/session_01/images/ITU-minitwit-screenshot.png differ
diff --git a/sessions/session_01/images/names_cloud.png b/sessions/session_01/images/names_cloud.png
new file mode 100644
index 00000000..f9059639
Binary files /dev/null and b/sessions/session_01/images/names_cloud.png differ
diff --git a/sessions/session_01/images/overview.pdf b/sessions/session_01/images/overview.pdf
new file mode 100644
index 00000000..37d1a5e7
Binary files /dev/null and b/sessions/session_01/images/overview.pdf differ
diff --git a/sessions/session_02/README_EXERCISE.md b/sessions/session_02/README_EXERCISE.md
new file mode 100644
index 00000000..558d4241
--- /dev/null
+++ b/sessions/session_02/README_EXERCISE.md
@@ -0,0 +1,26 @@
+# Exercises
+
+
+
+
+## Getting accustomed using Docker and Docker Compose
+
+ - Navigate to https://github.com/itu-devops/flask-minitwit-mongodb/tree/Containerize (**branch `Containerize`**) and work through the scenario given in the [`README.md`](https://github.com/itu-devops/flask-minitwit-mongodb/tree/Containerize) file.
+
+```bash
+$ git clone https://github.com/itu-devops/flask-minitwit-mongodb.git
+$ cd flask-minitwit-mongodb
+$ git checkout Containerize
+```
+ - Make sure with your group fellows, that you understand what you are doing in every step. If in doubt, explain to each other what you think is going on.
+
+Once done reproducing the given scenario, modify the `docker-compose.yml` file to include another container `clidownload`, which is an instance of the image `appropriate/curl`. It should download all tweets from the web-application as HTML text. If in doubt, consult the lecture notes for inspiration.
+
+
+## Create a dependency graph of your application
+
+Create an "as-complete-as-possible" dependency graph for your refactored version of _ITU-MiniTwit_ (task from last week for Sunday).
+
+You might want to use [`debtree`](https://manpages.ubuntu.com/manpages/jammy/man1/debtree.1.html) to create a dependency graph of the Debian packages that your application uses and [`pipdeptree`](https://pypi.org/project/pipdeptree/) for the pure Python dependencies.
+
+For each edge (arrow) that indicates a direct dependency from your application identify if it is a runtime dependency or if it is a build-/compile-time dependency.
diff --git a/sessions/session_02/README_PREP.md b/sessions/session_02/README_PREP.md
new file mode 100644
index 00000000..fbe1556d
--- /dev/null
+++ b/sessions/session_02/README_PREP.md
@@ -0,0 +1,92 @@
+# Preparation Material for Session 02
+
+## Version Control with Git
+
+In case you did not configure your Git installation already, do so as described in [First-Time Git Setup](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup)
+
+In particular, configure your username, email address, and command line editor:
+
+```bash
+$ git config --global user.name ""
+$ git config --global user.email @itu.dk
+```
+
+In case you are not into using VI as editor, you might want to choose `nano`
+
+```bash
+$ git config --global core.editor nano
+```
+
+ * If you are rusty with basic Git concepts, like adding files to version control, viewing your commit history, undoing changes, etc., you might want to check chapter [2. Git Basics](https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell) from the Pro Git book.
+ * Please read the following four sub-chapters of chapter [3. Git Branching on Git branches](https://git-scm.com/book/en/v2/)
+ - [Branches in a Nutshell](https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell)
+ - [Basic Branching and Merging](https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging)
+ - [Branch Management](https://git-scm.com/book/en/v2/Git-Branching-Branch-Management)
+ - [Remote Branches](https://git-scm.com/book/en/v2/Git-Branching-Remote-Branches)
+ * To allow for a better understanding of why Git works the way it does read on [Git objects](https://git-scm.com/book/en/v2/Git-Internals-Git-Objects)
+
+-------------------------------
+
+## Setup Docker and Docker Compose
+
+
+Install Docker and Docker Compose to your computer.
+
+The below is adapted from the official documentation for Ubuntu (updated for 2025): https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository
+
+### Docker
+
+Uninstall old versions
+
+```shell
+for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
+```
+
+Install the docker repository for automatic updates
+```shell
+# Add Docker's official GPG key:
+sudo apt-get update
+sudo apt-get install ca-certificates curl
+sudo install -m 0755 -d /etc/apt/keyrings
+sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
+sudo chmod a+r /etc/apt/keyrings/docker.asc
+
+# Add the repository to Apt sources:
+echo \
+ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
+ $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
+ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
+sudo apt-get update
+```
+
+Install the following tools for docker
+
+```shell
+sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
+```
+
+Check if the Docker engine is up and running:
+
+```bash
+sudo systemctl status docker
+```
+
+or
+
+```shell
+sudo docker run hello-world
+```
+
+To be able to run docker commands as your current user, it has to be added to the respective group. (_notice some versions of the guide writes ${USER}, try this if the following doesn't work._)
+
+```bash
+sudo usermod -aG docker $USER
+```
+
+With the following, double check that your user is in the `docker` group.
+
+```bash
+su - $USER
+id -nG
+exit
+```
\ No newline at end of file
diff --git a/sessions/session_02/README_TASKS.md b/sessions/session_02/README_TASKS.md
new file mode 100644
index 00000000..40d78044
--- /dev/null
+++ b/sessions/session_02/README_TASKS.md
@@ -0,0 +1,59 @@
+-----------
+
+
+# Your turn now!
+
+
+
+ - [1) Replace _ITU-MiniTwit_ with C♯ ASP.Net _Chirp_ application.](#1-replace-itu-minitwit-with-c-asp.net-chirp-application)
+ - [2) Containerize _ITU-MiniTwit_ with Docker.](#2-containerize-itu-minitwit-with-docker)
+ - [3) Preparation for next time](#3-preparation-for-next-time)
+
+
+
+## 1) Replace _ITU-MiniTwit_ with C♯ ASP.Net _Chirp_ application
+
+### Groups with access to a C♯ ASP.Net _Chirp_ application
+
+If you took BDSA earlier and you built a _Chirp_ application in that course, replace the legacy Python _ITU-MiniTwit_ application with your _Chirp_ application.
+Your _Chirp_ application switches name and is called _ITU-MiniTwit_ from now on.
+Refactor your application so that logins without Github OAuth are possible similar to the previous Python-based _ITU-MiniTwit_ application.
+
+That is:
+ - Remove the "login via GitHub" functionality.
+ - Add instead login functionality as in the original _ITU-MiniTwit_ application.
+ That is, use HTTP Session cookies to handle if a user is logged into your system.
+ - Likely, [this documentation](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-8.0) helps you to get started.
+
+
+### Groups without access to a C♯ ASP.Net _Chirp_ application
+
+In case you are a group in which nobody built a _Chirp_ application in BDSA, then continue to use the Python Flask application in a modern up-to-date environment.
+That might be the case for data science or exchange students.
+
+### For all
+
+Create a new *release* with a first version of your replaced _ITU-MiniTwit_ application, latest by **Monday, Feb. 9th, at 12:00**)
+
+
+## Guidelines for using AI code assistants like GitHub Copilot, ChatGPT, etc.
+
+In case you use AI code assistants, you have to do the following:
+
+ - Check that what these systems suggest you to do is in line with what you actually want to do.
+ - Add `GitHub Copilot`, `ChatGPT`, etc. as co-author to all commits in which you incorporate their work.
+ See [this documentation](https://docs.github.com/en/pull-requests/committing-changes-to-your-project/creating-and-editing-commits/creating-a-commit-with-multiple-authors) for how to do it.
+ - Please keep a log with your experiences of using such systems and share your experiences with us.
+ - Only commit code that you actually understand.
+
+
+## 2) Containerize _ITU-MiniTwit_ with Docker
+
+Use Docker to containerize your _ITU-MiniTwit_ application.
+That is, create respective Dockerfiles (and if needed yet Docker Compose files) in your repository.
+These containerize your application and allow all team members to develop your application in a uniform environment.
+
+
+## 3) Preparation for next time
+
+Please [setup the tools needed for the next session](../session_03/README_PREP.md).
diff --git a/sessions/session_02/Slides.html b/sessions/session_02/Slides.html
new file mode 100644
index 00000000..9fb2e089
--- /dev/null
+++ b/sessions/session_02/Slides.html
@@ -0,0 +1,953 @@
+
+
+
+ Slides
+
+
+
+
+