Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
cd03f2e
Add missing directory
HelgeCPH Jan 6, 2026
8b0348e
Automatic release of teaching material.
HelgeCPH Jan 6, 2026
9021b0d
Automatic release of teaching material.
HelgeCPH Jan 6, 2026
95e6503
Automatic release of teaching material.
HelgeCPH Jan 21, 2026
1bceddb
Automatic release of teaching material.
HelgeCPH Jan 21, 2026
7e46753
Automatic release of teaching material.
HelgeCPH Jan 27, 2026
fb542a9
Automatic release of teaching material.
HelgeCPH Jan 27, 2026
4f26e9c
Automatic release of teaching material.
HelgeCPH Jan 27, 2026
32e5972
Update repositories.py
Anders0106 Jan 27, 2026
7808808
Group a - Ducks.py
MathiasJohneck Jan 27, 2026
5fdc293
Update group b repository link and name
ITU-mikcl Jan 27, 2026
bf41ba3
Add group k DevBobs to repositories.py
esser2002 Jan 27, 2026
e19fd41
Update repositories.py
KaramTNC Jan 28, 2026
1300a7e
Update repositories.py
Beeveelutions Jan 29, 2026
9b72c70
Update repositories.py
YUMJiHyeon Jan 30, 2026
d061f12
Add group n information
BenjaminSSL Jan 30, 2026
935bfdf
Update repositories.py
TienCamLy Jan 30, 2026
3f7cbbe
Added group e details
tropaadigselv Feb 1, 2026
ca9494d
Update repository details for 'Jackhammers'
RonoITU Feb 1, 2026
9433fb2
Update repository link for group i
21Philip Feb 1, 2026
e95d888
Added name and Organization/repo link to file for group l
shonix Feb 1, 2026
d7c40c1
Update repository group name and URL
sebseb10 Feb 2, 2026
e889fa3
Automatic release of teaching material.
HelgeCPH Feb 2, 2026
866f30e
Merge pull request #642 from Anders0106/patch-1
HelgeCPH Feb 2, 2026
b9caf26
Merge pull request #643 from MathiasJohneck/patch-1
HelgeCPH Feb 2, 2026
706f06d
Merge pull request #644 from ITU-mikcl/patch-1
HelgeCPH Feb 2, 2026
1cc1e65
Merge pull request #645 from esser2002/patch-1
HelgeCPH Feb 2, 2026
d8ba69d
Merge pull request #646 from KaramTNC/patch-1
HelgeCPH Feb 2, 2026
1156277
Merge pull request #647 from Beeveelutions/patch-1
HelgeCPH Feb 2, 2026
28e35fb
Merge pull request #648 from YUMJiHyeon/patch-1
HelgeCPH Feb 2, 2026
d08dd6f
Merge pull request #649 from BenjaminSSL/patch-1
HelgeCPH Feb 2, 2026
8635eeb
Merge pull request #650 from TienCamLy/patch-1
HelgeCPH Feb 2, 2026
221d7f6
Merge pull request #653 from tropaadigselv/master
HelgeCPH Feb 2, 2026
5269b34
Merge pull request #654 from RonoITU/RonoITU-patch-1
HelgeCPH Feb 2, 2026
3bbab61
Merge pull request #655 from 21Philip/patch-1
HelgeCPH Feb 2, 2026
bef47dd
Merge pull request #656 from shonix/master
HelgeCPH Feb 2, 2026
421b4ec
Update repository details for Gruppe g
Bennyboomblaster Feb 2, 2026
7bda2c9
Automatic release of teaching material.
HelgeCPH Feb 3, 2026
a9bbd96
Update group name to 'Team Connie'
JIngeholm Feb 3, 2026
203c032
Automatic release of teaching material.
HelgeCPH Feb 3, 2026
3ae8ed2
Automatic release of teaching material.
HelgeCPH Feb 3, 2026
d22f465
Merge branch 'master' into master
sebseb10 Feb 3, 2026
a113e9f
Update GitHub repository link for group e
tropaadigselv Feb 3, 2026
e566df5
Automatic release of teaching material.
HelgeCPH Feb 3, 2026
cb12a75
Automatic release of teaching material.
HelgeCPH Feb 3, 2026
4944f33
Automatic release of teaching material.
HelgeCPH Feb 4, 2026
cbb7be5
Automatic release of teaching material.
HelgeCPH Feb 4, 2026
2c66c1e
Automatic release of teaching material.
HelgeCPH Feb 5, 2026
756d04c
Automatic release of teaching material.
HelgeCPH Feb 5, 2026
5fbe242
Fix formatting for GruppeOG entry in repositories.py
PatNei Feb 5, 2026
1fcf3e1
Merge pull request #660 from Bennyboomblaster/patch-1
PatNei Feb 5, 2026
9a7053a
Merge pull request #663 from tropaadigselv/master
PatNei Feb 5, 2026
da92f04
Merge pull request #661 from JIngeholm/patch-1
PatNei Feb 5, 2026
91fa730
Automatic release of teaching material.
HelgeCPH Feb 5, 2026
9ee2c20
Automatic release of teaching material.
HelgeCPH Feb 10, 2026
d07aa1b
Update repositories.py with group l second repository
shonix Feb 10, 2026
7e3d191
Automatic release of teaching material.
HelgeCPH Feb 10, 2026
6207944
Merge pull request #662 from sebseb10/master
PatNei Feb 10, 2026
e7c76ae
Automatic release of teaching material.
HelgeCPH Feb 10, 2026
c77051b
Automatic release of teaching material.
HelgeCPH Feb 10, 2026
35042fb
Merge branch 'itu-devops:master' into master
shonix Feb 11, 2026
2d5ca4e
Update repositories.py Group l updated repository with correct python…
shonix Feb 11, 2026
9232803
Merge pull request #666 from shonix/master
PatNei Feb 11, 2026
05805d9
Update repositories group o.py
mariamoller2 Feb 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
204 changes: 92 additions & 112 deletions README.adoc

Large diffs are not rendered by default.

730 changes: 730 additions & 0 deletions README.html

Large diffs are not rendered by default.

60 changes: 30 additions & 30 deletions repositories.py
Original file line number Diff line number Diff line change
@@ -1,50 +1,50 @@
GROUP_REPOS = [
[
"group a",
"<name>",
["https://github.com/<organization|user>/<repository_name>"],
"ZeroDownTime",
["https://github.com/ZeroDownTime-ITU/minitwit_project"],
"http(s)://<TBA>/<FrontEndURL>",
"http(s)://<TBA>/<APIURL>",
],
[
"group b",
"<name>",
["https://github.com/<organization|user>/<repository_name>"],
"catch(RuntimeException){goto f;}",
["https://github.com/JohannesHackl/DevOps26_RE_minitwit.git"],
"http(s)://<TBA>/<FrontEndURL>",
"http(s)://<TBA>/<APIURL>",
],
[
"group c",
"<name>",
["https://github.com/<organization|user>/<repository_name>"],
"group c",
["https://github.com/jskoven/Devops2026_jklo_jakst_aing_asjo_mbln"],
"http(s)://<TBA>/<FrontEndURL>",
"http(s)://<TBA>/<APIURL>",
],
[
"group d",
"<name>",
["https://github.com/<organization|user>/<repository_name>"],
"Dense Dino Nuggets",
["https://github.com/Slug-Boi-ITU-Repositories/Dense-Dino-Nuggets"],
"http(s)://<TBA>/<FrontEndURL>",
"http(s)://<TBA>/<APIURL>",
],
[
"group e",
"<name>",
["https://github.com/<organization|user>/<repository_name>"],
"Jams",
["https://github.com/sebsthiel/minitwit-devops"],
"http(s)://<TBA>/<FrontEndURL>",
"http(s)://<TBA>/<APIURL>",
],
[
"group f",
"<name>",
["https://github.com/<organization|user>/<repository_name>"],
"if time > 16 {beer++;}",
["https://github.com/TienCamLy/MiniTwit"],
"http(s)://<TBA>/<FrontEndURL>",
"http(s)://<TBA>/<APIURL>",
],
[
"group g",
"<name>",
["https://github.com/<organization|user>/<repository_name>"],
"DevOpps",
["https://git.marfavi.com/DevOpps/itu-minitwit-migration"],
"http(s)://<TBA>/<FrontEndURL>",
"http(s)://<TBA>/<APIURL>",
],
Expand All @@ -57,8 +57,8 @@
],
[
"group i",
"<name>",
["https://github.com/<organization|user>/<repository_name>"],
"I Terroni",
["https://github.com/stegish/I-Terroni-DevOps"],
"http(s)://<TBA>/<FrontEndURL>",
"http(s)://<TBA>/<APIURL>",
],
Expand All @@ -71,8 +71,8 @@
],
[
"group k",
"<name>",
["https://github.com/<organization|user>/<repository_name>"],
"Pat Myaz",
["https://github.com/ITU-DevOps2026/ITU-minitwit"],
"http(s)://<TBA>/<FrontEndURL>",
"http(s)://<TBA>/<APIURL>",
],
Expand All @@ -85,37 +85,37 @@
],
[
"group m",
"<name>",
["https://github.com/<organization|user>/<repository_name>"],
"Holy C Enjoyers",
["https://github.com/MudiLoodi/minitwit"],
"http(s)://<TBA>/<FrontEndURL>",
"http(s)://<TBA>/<APIURL>",
],
[
"group n",
"<name>",
["https://github.com/<organization|user>/<repository_name>"],
"Diversity",
["https://github.com/huncut47/diversity"],
"http(s)://<TBA>/<FrontEndURL>",
"http(s)://<TBA>/<APIURL>",
],
[
"group o",
"<name>",
["https://github.com/<organization|user>/<repository_name>"],
"Rollback and relax",
["https://github.com/alqeren1/devops"],
"http(s)://<TBA>/<FrontEndURL>",
"http(s)://<TBA>/<APIURL>",
],
[
"group p",
"<name>",
["https://github.com/<organization|user>/<repository_name>"],
"group a",
"EasTops",
["https://github.com/AntohaY/itu-minitwit"],
"http(s)://<TBA>/<FrontEndURL>",
"http(s)://<TBA>/<APIURL>",
],
[
"group q",
"<name>",
["https://github.com/<organization|user>/<repository_name>"],
"<DevTroopers",
["https://github.com/leosakharoff/itu-minitwit"],
"http(s)://<TBA>/<FrontEndURL>",
"http(s)://<TBA>/<APIURL>",
],
]
]
Empty file added sessions/session_00/.gitkeep
Empty file.
78 changes: 78 additions & 0 deletions sessions/session_00/README.md
Original file line number Diff line number Diff line change
@@ -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
9 changes: 9 additions & 0 deletions sessions/session_01/README_PREP.md
Original file line number Diff line number Diff line change
@@ -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/
126 changes: 126 additions & 0 deletions sessions/session_01/README_TASKS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
# Your turn now!

<img src="https://media.giphy.com/media/13GIgrGdslD9oQ/giphy.gif" width=50%/>


- [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/<gh_id>/<proj_id>` 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.
Loading