Die Sitzung soll in wenigen Sekunden beginnen und du wurdest zum Protokollieren erwählt?
Öffne ein Schreibprogramm deiner Wahl (wie Word oder Google Docs) und erstelle das Protokoll darin. Exportiere das Dokument am Ende als PDF und gib es an jemanden weiter der es hier hochladen kann (oder lass es dir zeigen/versuche es selbst).
Markdown ist besser, aber eine einfache PDF ist ausreichend.
# Empfohlene Arbeitsumgebung (Subjektiv)
<small>Meinung von @gerret</small>
Persönlich empfehle ich [Visual Studio Code](https://code.visualstudio.com/) mit folgenden Extensions:
*[Git Graph](https://marketplace.visualstudio.com/items?itemName=mhutchie.git-graph) als Grafische Schnittstelle für Git
*[YAML](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml) kann `meeting.yml` prüfen
So eingerichtet hat VSCode alles um mit Git, YAML und Markdown (inkl. Vorschau) zu arbeiten.
Bei einigen Editoren wie Obsidian muss man vorsichtig sein, sie zeigen einen Zeilenumbruch tatsächlich in einer neuen Zeile an. **Dies ist in "Standard"-Markdown nicht der Fall!**
# Workflow mit Git
## Grundlagen
Git wird verwendet, damit man sehen kann, wer wann was geändert hat. Kurz zusammengefasst ist Git eine (oder mehrere) Zeitleiste an Momentaufnahmen ("Commits") aller Dateien in diesem Arbeitsbereich ("Repository").
Damit ergibt sich ein **wichtiger Unterschied zu normaler Dateiverwaltung:**
> Beim Erstellen/Ändern einer Datei ist nicht nur wichtig, in welchem Ordner sie ist, sondern auch an welchem Punkt in der Zeitleiste.
Eine weitere wichtige Sache, die sich daraus ergibt: wenn man versucht Dateien auf GitLab hochzuladen, in der Erwartung es würde wie normaler Cloudspeicher funktionieren, geht mit großer Sicherheit einiges schief.
Daher: [Installiere dir Git auf deinem Computer](https://git-scm.com/downloads) und lass dir zeigen, wie du die Repository synchronisieren kannst.
## Erstellen eines Protokolls
Vor dem Beginn eines neuen Protokolls sollte man auf den `main`-Branch wechseln. {height="16"} Dies ist die "Zeitleiste" welche alle genehmigten Protokolle enthält.
Und weil es so wichtig ist noch einmal:
**Vor dem Beginn eines neuen Protokolls sollte man auf den `main`-Branch wechseln.** Wenn du von einem anderen Branch startest, hast du noch nicht genehmigte Protokolle dabei!
Von hier sollte man eine neue Branch für das Protokoll erstellen. Als Name ist etwas wie `draft/<Datum>` zu empfehlen:

Jetzt kannst du das Protokoll schreiben, indem du die Dateien `meeting.yml` und `index.md` in einem neuem Ordner erstellst.
## Committen der Änderungen
Ist das Protokoll fertig, kannst du deine Änderungen (und bitte nur die relevanten!!!) comitten, d.h. eine neue Momentaufnahme in der Zeitleiste (die du erstellt hast!) erzeugen.
Hier in VSCode:

In der "Source Control"-Seitenleiste habe ich die Änderungen, die zum Protokoll gehören zum Committen markiert (durch Klicken auf "+" zu "Staged Changes" hinzugefügt). Nun kann man als commit message eine Beschreibung der Änderungen hinzufügen und bestätigen.
Man sieht hier also wer etwas geändert hat (@gerret), wann (:scream:) und was (`index.md` und `meeting.yml`) — zusammen mit einer selbst geschriebenen Beschreibung in Worten.
## Review auf GitLab
Nachdem zu deine Branch nach GitLab synchronisiert hast, kannst du einen Merge Request erstellen. Wenn ein Merge Request akzeptiert wird, wird deine Branch/"Zeitleiste" mit der `main`-Branch zusammengeführt: Alle deine Änderungen werden dann in die `main`-Branch aufgenommen.
Es eignet sich also perfekt dazu, um andere über deine Änderungen drübergucken zu lassen bevor sie unwiederruflich "offiziell" werden. Wenn also noch kleiner Fehler im Protokoll sind, können sie jetzt noch bequem behoben werden.

# Bestandteile des Protokolls:
## meeting.yml
`meeting.yml` enthält allgemeine Informationen über die Sitzung in maschinenlesbarer Form. Informationen von hier landen beispielsweise im Dokument unter "Regularien" oder könnten benutzt werden um "_alle Protokolle mit Sitzungleitung X_" zu suchen.
```yml
# Grundlegende Informationen
date:2022-02-02# Datum
type:vv# weglassen wenn's keine VV ist
start:14:17# Startzeit
end:16:10# Endzeit
chairperson:# Sitzungsleitung
name:Frederik Simon Busse
yes:13
no:0# Kann weggelassen werden
recorder:# Protokoll
name:Gerret Bultmann
yes:13# Auch in Sitzungen notwendig, auch wenn nicht von Satzung/GO vorgeschrieben
# Wer war dabei?
members:
# Sitzungsleitung und Protokollant müssen auch hier auftauchen
-name:Frederik Simon Busse
-name:Gerret Bultmann
-name:<Name>
-name:<Name 2>
events:# Später dazugekommen oder früher gegangen?
-join:14:15# In der Reihenfolge wie tatsächlich abgelaufen
-leave:14:27
-name:<Name 3>
guest:yes# Ist diese Person kein Mitglied der FS Informatik?
note:AI# Irgendwelche Notizen zu dieser Person; Beispiel: von welcher Fachschaft
# Optional: Anhänge; müssen im selben Ordner wie `meeing.yml` sein
attachments:
-file:Satzung Informatik 2022-02-02.pdf
title:Satzung der Fachschaft Informatik der Ruhr-Universität Bochum
description:Die auf der Vollversammlung angenommene Satzung der Fachschaft Informatik
-file:GO Informatik 2022-02-02.pdf
title:Geschäftsordnung der Fachschaft Informatik an der Ruhr-Universität Bochum
description:Die auf der Vollversammlung angenommene Geschäftsordnung der Fachschaft Informatik
```
## index.md
`index.md` enthält den eigentlichen Inhalt des Protokolls. Zum formatieren wird Markdown verwendet, welches ziemlich einfach zu lernen ist (wird u.a. auch in Element und Discord genutzt):
* Du kannst es in einem normalen Texteditor bearbeiten
* Absätze werden surch zwei Zeilenumbrüche getrennt
Mehr hier: https://www.markdownguide.org/basic-syntax/
### Regularien
Um die Informationen aus `meeting.yml` in das Dokument zu holen muss folgender Abschnitt hinzugefügt werden:
```md
# Regularien
Anwesende
~ {{ attendanceNames }}
Beschlussfähigkeit
~ Der Mindestanteil von 1/3 ist erreicht... Oder auch nicht?
Beginn
~ {{ startTime }} Uhr
Ende
~ {{ endTime }} Uhr
Protokoll
~ {{ recorderDetail }}
Sitzungsleitung
~ {{ chairpersonDetail }}
```
Es können auch eigene Einträge hinzugefügt werden:
```md
Tagesordnung:
~ Nur eine Zeile
```
```md
Tagesordnung:
: Mehr
* als
* ein
Absatz
```
Diese Syntax nennt sich [Definitionsliste](https://pandoc.org/MANUAL.html#definition-lists) und ist eine Erweiterung die vom Standard abweicht.
## Protokoll xx-xx-xxxx.pdf oder Protokoll VV xx-xx-xxxx.pdf
[[_TOC_]]
# Im absoluten Notfall
Die Sitzung soll in wenigen Sekunden beginnen und du wurdest zum Protokollieren erwählt?
Öffne ein Schreibprogramm deiner Wahl (wie Word oder Google Docs) und erstelle das Protokoll darin. Exportiere das Dokument am Ende als PDF und gib es an jemanden weiter der es hier hochladen kann (oder lass es dir zeigen/versuche es selbst).
Markdown ist besser, aber eine einfache PDF ist ausreichend.
# Empfohlene Arbeitsumgebung (Subjektiv)
<small>Meinung von @gerret</small>
Persönlich empfehle ich [Visual Studio Code](https://code.visualstudio.com/) mit folgenden Extensions:
*[Git Graph](https://marketplace.visualstudio.com/items?itemName=mhutchie.git-graph) als Grafische Schnittstelle für Git
*[YAML](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml) kann `meeting.yml` prüfen
So eingerichtet hat VSCode alles um mit Git, YAML und Markdown (inkl. Vorschau) zu arbeiten.
Bei einigen Editoren wie Obsidian muss man vorsichtig sein, sie zeigen einen Zeilenumbruch tatsächlich in einer neuen Zeile an. **Dies ist in "Standard"-Markdown nicht der Fall!**
# Workflow mit Git
## Grundlagen
Git wird verwendet, damit man sehen kann, wer wann was geändert hat. Kurz zusammengefasst ist Git eine (oder mehrere) Zeitleiste an Momentaufnahmen ("Commits") aller Dateien in diesem Arbeitsbereich ("Repository").
Damit ergibt sich ein **wichtiger Unterschied zu normaler Dateiverwaltung:**
> Beim Erstellen/Ändern einer Datei ist nicht nur wichtig, in welchem Ordner sie ist, sondern auch an welchem Punkt in der Zeitleiste.
Eine weitere wichtige Sache, die sich daraus ergibt: wenn man versucht Dateien auf GitLab hochzuladen, in der Erwartung es würde wie normaler Cloudspeicher funktionieren, geht mit großer Sicherheit einiges schief.
Daher: [Installiere dir Git auf deinem Computer](https://git-scm.com/downloads) und lass dir zeigen, wie du die Repository synchronisieren kannst.
## Erstellen eines Protokolls
Vor dem Beginn eines neuen Protokolls sollte man auf den `main`-Branch wechseln. {height="16"} Dies ist die "Zeitleiste" welche alle genehmigten Protokolle enthält.
Und weil es so wichtig ist noch einmal:
**Vor dem Beginn eines neuen Protokolls sollte man auf den `main`-Branch wechseln.** Wenn du von einem anderen Branch startest, hast du noch nicht genehmigte Protokolle dabei!
Von hier sollte man eine neue Branch für das Protokoll erstellen. Als Name ist etwas wie `draft/<Datum>` zu empfehlen:

Jetzt kannst du das Protokoll schreiben, indem du die Dateien `meeting.yml` und `index.md` in einem neuem Ordner erstellst.
## Committen der Änderungen
Ist das Protokoll fertig, kannst du deine Änderungen (und bitte nur die relevanten!!!) comitten, d.h. eine neue Momentaufnahme in der Zeitleiste (die du erstellt hast!) erzeugen.
Hier in VSCode:

In der "Source Control"-Seitenleiste habe ich die Änderungen, die zum Protokoll gehören zum Committen markiert (durch Klicken auf "+" zu "Staged Changes" hinzugefügt). Nun kann man als commit message eine Beschreibung der Änderungen hinzufügen und bestätigen.
Man sieht hier also wer etwas geändert hat (@gerret), wann (:scream:) und was (`index.md` und `meeting.yml`) — zusammen mit einer selbst geschriebenen Beschreibung in Worten.
## Review auf GitLab
Nachdem zu deine Branch nach GitLab synchronisiert hast, kannst du einen Merge Request erstellen. Wenn ein Merge Request akzeptiert wird, wird deine Branch/"Zeitleiste" mit der `main`-Branch zusammengeführt: Alle deine Änderungen werden dann in die `main`-Branch aufgenommen.
Es eignet sich also perfekt dazu, um andere über deine Änderungen drübergucken zu lassen bevor sie unwiederruflich "offiziell" werden. Wenn also noch kleiner Fehler im Protokoll sind, können sie jetzt noch bequem behoben werden.

# Bestandteile des Protokolls:
## meeting.yml
`meeting.yml` enthält allgemeine Informationen über die Sitzung in maschinenlesbarer Form. Informationen von hier landen beispielsweise im Dokument unter "Regularien" oder könnten benutzt werden um "_alle Protokolle mit Sitzungleitung X_" zu suchen.
```yml
# Grundlegende Informationen
date:2022-02-02# Datum
type:vv# weglassen wenn's keine VV ist
start:14:17# Startzeit
end:16:10# Endzeit
chairperson:# Sitzungsleitung
name:Frederik Simon Busse
yes:13
no:0# Kann weggelassen werden
recorder:# Protokoll
name:Gerret Bultmann
yes:13# Auch in Sitzungen notwendig, auch wenn nicht von Satzung/GO vorgeschrieben
# Wer war dabei?
members:
# Sitzungsleitung und Protokollant müssen auch hier auftauchen
-name:Frederik Simon Busse
-name:Gerret Bultmann
-name:<Name>
-name:<Name 2>
events:# Später dazugekommen oder früher gegangen?
-join:14:15# In der Reihenfolge wie tatsächlich abgelaufen
-leave:14:27
-name:<Name 3>
guest:yes# Ist diese Person kein Mitglied der FS Informatik?
note:AI# Irgendwelche Notizen zu dieser Person; Beispiel: von welcher Fachschaft
# Optional: Anhänge; müssen im selben Ordner wie `meeing.yml` sein
attachments:
-file:Satzung Informatik 2022-02-02.pdf
title:Satzung der Fachschaft Informatik der Ruhr-Universität Bochum
description:Die auf der Vollversammlung angenommene Satzung der Fachschaft Informatik
-file:GO Informatik 2022-02-02.pdf
title:Geschäftsordnung der Fachschaft Informatik an der Ruhr-Universität Bochum
description:Die auf der Vollversammlung angenommene Geschäftsordnung der Fachschaft Informatik
```
## index.md
`index.md` enthält den eigentlichen Inhalt des Protokolls. Zum formatieren wird Markdown verwendet, welches ziemlich einfach zu lernen ist (wird u.a. auch in Element und Discord genutzt):
* Du kannst es in einem normalen Texteditor bearbeiten
* Absätze werden surch zwei Zeilenumbrüche getrennt
Mehr hier: https://www.markdownguide.org/basic-syntax/
### Regularien
Um die Informationen aus `meeting.yml` in das Dokument zu holen muss folgender Abschnitt hinzugefügt werden:
```md
# Regularien
Anwesende
~ {{ attendanceNames }}
Beschlussfähigkeit
~ Der Mindestanteil von 1/3 ist erreicht... Oder auch nicht?
Beginn
~ {{ startTime }} Uhr
Ende
~ {{ endTime }} Uhr
Protokoll
~ {{ recorderDetail }}
Sitzungsleitung
~ {{ chairpersonDetail }}
```
Es können auch eigene Einträge hinzugefügt werden:
```md
Tagesordnung:
~ Nur eine Zeile
```
```md
Tagesordnung:
: Mehr
* als
* ein
Absatz
```
Diese Syntax nennt sich [Definitionsliste](https://pandoc.org/MANUAL.html#definition-lists) und ist eine Erweiterung die vom Standard abweicht.
## Protokoll xxxx-xx-xx.pdf oder Protokoll VV xxxx-xx-xx.pdf
Ja, die Dateinamen stehen fest und hängen vom Typ der Sitzung ab. Normalerweise sollten sie aus `index.md` generiert werden. Wenn aber keine `index.md` existiert, reicht es aus wenn es PDF-Dateien mit diesen Namen gibt.