i4Werkzeug Demo

Da WordPress nicht ganz zu dem typischen Arbeitsablauf eines Systemlehrstuhls passt, haben wir nun ein eigenes Plugin, dass den neuen Webauftritt an unsere Bedürfnisse anpasst, insbesondere:

  • Dateien (z.B. PDF-Folien) sollen über NFS bereitgestellt werden, da diese häufig mit Skriptunterstützung generiert und platziert werden — ein händischer Upload in der WordPress-Adminweboberfläche soll verhindert werden.
    Zusätzlich müssen häufiger Listen mit Verweise auf solche Dateien angepasst werden, diese sollen ebenfalls via NFS eingebunden werden können
  • Lehrveranstaltungswebseiten eines Semesters sollen persistent bleiben, d.h. auch nach dem Ablauf des Semesters noch abrufbar sein. Es wird jedes neue Semester eine Kopie der Seiten erstellt, die Verlinkungen sollen dabei automatisch angepasst werden
  • Unter Umständen müssen ganze Verzeichnisbäume integriert werden, beispielsweise via Doxygen generierte Dokumentationen. Das soll auch automatisch vom NFS gehen, alle HTML Dokumente sollen in die Webseite integriert werden

Das Plugin stellt sogenannte Shortcodes zur Verfügung, welche insbesondere mit dem NFS-Pfad /proj/i4wp/extern interagieren.

Übersicht

Folgende Shortcodes sind in lehrstuhlinternen WordPress-Plugin i4werkzeug implementiert:

  • i4nav erlaubt die Anpassung der (automatisch generierten) Seitennavigationsleiste
  • i4semester zur dynamischen Anzeige des Semesternamens
  • i4link genieriert Verweise aus relativen Pfadangaben
  • i4univis erlaubt flexibleres Einbetten von UnivIS-Inhalte als das RRZE-Pendant
  • i4include erlaubt das einbetten von externen Inhalten
  • i4list erstellt eine WordPress-typische Folien oder Aufgabenübersicht aus einer Vorgabe in einem einfachen und übersichtlichen Format
  • i4code verhindert die Interpretation von Shortcodes (wie es für diese Demo-Seite gebraucht)
  • i4hidden-text versteckt Inhalte (wie das RRZE-Pendant, zeigt sie jedoch angemeldeten Nutzern (mit einem visuellen Hinweis) an

Außerdem bieten die vom RRZE bereitgestellten Plugins ebenfalls nützliche Shortcodes an, auf welche (in i4list) zurückgegriffen wird.
Details sind auf den entsprechenden Dokumentationsseiten des RRZEs zu finden.

Bitte bei der Erstellung/Bearbeitung der Seiten genau überlegen, welche Daten hart kodiert werden (Standard beim visuellen WordPress-Editor) und wo lieber auf Shortcodes zurück gegriffen wird – denn die Verwendung der i4Werkzeug-Shortcodes ermöglicht eine Übernahme (Kopie) der Lehrveranstaltungsseitenbäume in zukünftige Semester (mittels Kommandozeilenwerkzeug) ohne das eine händische Anpassung der Webseite notwendig wird!

Navigation

Dieses Plugin ermöglicht es mittels des i4nav-Shortcodes eigene Einträge in die Navigationsleiste einzufügen, sowohl seitenlokale Anker als auch generische Hyperlinks.

Verwendung

Der Shortcode kann wie folgt verwendet werden:

[i4nav name="fooo" (optionale Attribute)](Optinaler Text)[/i4nav]

Die unterstützten Attribute für diesen Shortcode sind:

  • name: String, zugehöriger im Menü angezeigtes Label/Bezeichner
  • order: Integer, Bestimmt die Position des Eintrags im Menü. Interagiert passend mit den Einträgen “Reihenfolge” regulärer Seiten und besitzt dieselbe Semantik (kleinere Zahl = frühere Position, negative Zahlen möglich, Standardwert: 0. Einträge gleicher order werden gemäß Auftrittsreihenfolge in der jeweiligen Seite angezeigt).
  • href: Linkziel, für externe Links. Wechselseitiger Ausschluss mit anchor.
  • anchor: Für seitenlokaler Anker, bestimmt den Wert des id Attributs des generierten Ankers. Wechselseitiger Ausschluss mit href.

Ein gültiger Shortcode besitzt immer ein name Feld sowie entweder einen href oder einen anchor Eintrag. Der optionale Text kann genutzt werden um bei anchor-Einträgen den Ankerkörper zu spezifizieren, etwa:

<h2>[i4nav anchor="aufgaben" name="Aufgaben"]Übungsaufgaben[/i4nav]</h2>

Führt in der gerenderten Seite zu:

<h2><a id="aufgaben">Übungsaufgaben</a></h2>

Einschränkungen

Da i4nav-Shortcodes zum Speicherzeitpunkt einer Seite ausgewertet werden können diese Einträge weder aus inkludierten Dateien übernommen noch durch andere Shortcodes (wie etwa die Funktionalitäten in i4list oder hidden-text) modifiziert oder verborgen werden.

Aktuell ist das Plugin explizit nur im Lehre-Unterbaum aktiv und versteckt dort ferner alle Einträge oberhalb einer Lehrveranstaltung.

Beispiele

Auf dieser Seite befinden sich folgende Verwendungen:

<h2>[i4nav]Übersicht[/i4nav]</h2>
...
<h2>[i4nav anchor="i4nav" name="Seitennavigation"]Navigation[/i4nav]</h2>
...
[i4nav href="https://gitlab.cs.fau.de/i4/infra/wordpress-i4werkzeug/" name="GitLab Repo" order="98"][/i4nav]
[i4nav href=".." name="zur Semesterübersicht" order="98"][/i4nav]
...
<h2>[i4nav anchor="i4semester"]Semesterangaben[/i4nav]</h2>
...
<h2>[i4nav anchor="i4link"]Links[/i4nav]</h2>
...
<h2>[i4nav anchor="i4univis"]UnivIS[/i4nav]</h2>
...
<h2>[i4nav anchor="i4include" name="Einbettung aus dem NFS"]Include[/i4nav]</h2>
...
<h2>[i4nav anchor="i4list" name="Listen (für Folien & Aufgaben)"]List[/i4nav]</h2>
...
<h2 id="i4code">Code</h2>
[i4nav href="#i4code" name="Quelltextangaben"][/i4nav]

Die Resultate sind im Seitenmenü zu dieser Seite zu sehen.

Semesterangaben

Bisher war über SSI-Variablen ein Zugriff auf die Semesterbezeichnungen möglich, diese Funktionalität wird nun durch i4semester abgefackelt.

Verwendung

Der Shortcode kann wie folgt verwendet werden:
[i4link (optionale Attribute)]Semester[/i4link]

Die unterstützten Attribute für diesen Shortcode sind:

  • delta gibt die Jahre (auch halbe Jahre möglich) an, um vom gegebenen Semester abzuweichen — nützlich um z.B. auf das kommende Semester zu verweisen (durch Angabe von +0.5)
  • format gibt an, wie der Semestername ausgegeben werden soll. Mögliche Parameter für das Attribut sind:
    • long für komplett ausgeschrieben (Wintersemester 2021/22)
    • short für die (unverwerfliche) Kurzform (WiSe 2021/22)
    • abbr für die ganz kurze Form (WS21)
    • link für eine klein geschriebene kurze Form (ws21)
    • und, standardmäßig (bei keiner oder ungültiger Angabe): Die Kurzform mit voller Jahreszahl (WS 2021/22)

Als Semesterangabe für den Shortcode kann entweder ein beliebiges der oben genannten Formate verwendet werden, oder current (oder ein beliebig anderer Text, welcher nicht dem Format entspricht), um das derzeit aktuelle Semester (anhand des Datums) auszugeben.
Wird das Semesterfeld leer gelassen, also kein Text angegeben, so wird versucht aus der Seitenhierarchie das Semester zu extrahieren, d.h. eine Lehrveranstaltung unterhalb von /lehre/ws21/... wird zu Wintersemester 2021/22 ausgewertet.

Beispiele

Aktuelles Semester

Quelltext:
Aktuelles Semester: [i4semester]current[/i4semester]

Resultat:
Aktuelles Semester: SS 2022

Folgendes Semester (mit Delta)

Quelltext:
Folgendes Semester, Kurzform: [i4semester delta=“+0.5″ format=“short“]current[/i4semester]

Resultat:
Folgendes Semester, Kurzform: WiSe 2022/23

Explizite Semesterangabe

Quelltext:
WS18 im langen Format: [i4semester format=“long“]WS18[/i4semester]

Resultat:
WS18 im langen Format: Wintersemester 2018/19

Explizite Semesterangabe mit Delta

Quelltext:
Semester 2 Jahre vor SoSe 2017: [i4semester delta=“-2″]SoSe 2017[/i4semester]

Resultat:
Semester 2 Jahre vor SoSe 2017: SS 2015

Semesterangabe aus Pfad

Quelltext:
Semester im Pfad zu dieser Seite (kurzes Format): [i4semester format=“short“][/i4semester]

Resultat:
Semester im Pfad zu dieser Seite (kurzes Format): SoSe 2022

Für externe Verlinkungen (z.B. in den Vorlesungsfolien) gibt es übrigens, unabhängig von diesem Shortcode, auch auf diesem Webauftritt automatische Verweise auf das aktuelle Semester:

Diese Semesterumleitungsregeln sind händisch in einer .htaccess-Datei definiert, Details dazu hat der WordPress-Eintrag in unserem Wiki!

Links

Der Shortcode i4link erlaubt bequemes Verlinken von Unterseiten ohne die in WordPress sonst übliche Verwendung von absoluten URLs. Der Vorteil ist, dass somit insbesondere Seiten von Lehrveranstaltungen bequem (ohne händische Anpassung) in neue Semester kopiert werden können.

Verwendung

Der Shortcode kann wie folgt verwendet werden:
[i4link (optionale Attribute)]Pfad[/i4link]

Die unterstützten Attribute für diesen Shortcode sind:

  • course Angabe einer Lehrveranstaltung (Kurzform, welche auch dem Link entspricht, z.B. bs für Betriebssysteme).
    Es wird nicht geprüft ob die Veranstaltung auch tatsächlich (bereits) existiert.
  • semester explizite Angabe des Semesters (z.B. WS21) oder current für das gemäß heutigem Datums laufenden Semesters.
    Wird dieser Angabe weggelassen, so wird versucht aus der Seitenhierarchie das aktuelle Semester zu bekommen (eine Unterseite vom Lehre / Sommmersemester 2022 verweist automatisch auf Kurse dieses Semester), andernfalls wird auf das aktuelle Semester umgeschwenkt (z.B. bei einer Unterseite von Forschung).
  • name gibt den anzuzeigenden Text des Links an. Ohne dieses Attribut wird schlicht der Pfad (oder, falls leer, Link) angezeigt.
  • extern ist ein boolsches Attribut, welches, wenn wahr, nicht auf WordPress, sondern auf Dateien im NFS (/proj/i4wp/extern/) verweist und sich somit z.B. für Folien im PDF-Format eignet.
    Dies ist unkompliziert möglich, da die WordPress-Seiten-Adressen und die Pfade im NFS bei Lehrveranstaltungen identisch sind.
  • full ist ein boolsches Attribut, welches, wenn wahr, die volle URL inklusive Protokoll und Domain erstellt.
  • raw ist ein boolsches Attribut, welches, wenn wahr, dafür sorgt, dass nicht ein Hyperlink erstellt wird, sondern nur die Zieladresse ausgegeben wird (entsprechend wird in diesem Fall das Attribut name ignoriert).

Der Pfad (unabhängig ob absolut oder relativ) wird bei Angabe der Attribute semester und/oder course von der Semester- bzw. Lehrveranstaltungsseite aus interpretiert.
Sofern diese beiden Attribute fehlen, wird ein ein absoluter Pfad (beginnend mit /) als Wurzel verstanden, ein relativer Pfad hingegen von der aktuellen Seite aus.

Beispiele

Lehrveranstaltung

Quelltext:
[i4link course=“bst“ name=“Übung zur Betriebssystemtechnik“]uebung[/i4link] im [i4semester format=“long“][/i4semester] (zu dem diese WordPress-Seite gehört)

Resultat:
Übung zur Betriebssystemtechnik im Sommersemester 2022 (zu dem diese WordPress-Seite gehört)

Externe Datei zu einer Lehrveranstaltung

Quelltext:
[i4link extern=true semester=“current“ course=“bs“ name=“Folie (PDF aus dem NFS) des Bootseminars in Betriebssystem“]uebung/folien/seminar-boot.pdf[/i4link] im aktuell laufenden [i4semester format=“long“]current[/i4semester]

Resultat:
Folie (PDF aus dem NFS) des Bootseminars in Betriebssystem im aktuell laufenden Sommersemester 2022

URL ohne Verlinkung

Quelltext:
Die URL zu dieser Seite lautet [i4link raw=true][/i4link]

Resultat:
Die URL zu dieser Seite lautet /lehre/ss22/demo

Seitenrelative Adressen

Quelltext:
Relative URLs von dieser Seite ausgehend sind auch möglich (hier wieder Betriebssystemtechnik): [i4link raw=true full=true]../bst[/i4link]

Resultat:
Relative URLs von dieser Seite ausgehend sind auch möglich (hier wieder Betriebssystemtechnik): https://sys.cs.fau.de/lehre/ss22/demo/../bst

Seitenrelative Adressen, Teil 2

Quelltext:
Relative Adresierung (auf NFS): [i4link extern=true raw=true full=true]vl1a.pdf[/i4link]

Resultat:
Relative Adressierung (auf NFS): https://sys.cs.fau.de/extern/lehre/ss22/demo/vl1a.pdf

Absolute Adressen

Quelltext:
Der Bereich Forschung liegt unter [i4link raw=true full=true]/forschung[/i4link] (absoluter Pfad).

Resultat:
Der Bereich Forschung liegt unter https://sys.cs.fau.de/forschung (absoluter Pfad).

UnivIS

Wir holen viele Informationen aus UnivIS, aber leider fehlt dem RRZE-UnivIS-Plugin die für uns notwendige Flexibilität, weshalb wir mit dem i4univis-Shortcode unsere eigene Zugriffsmöglichkeit haben.

Verwendung

Der Shortcode erlaubt eine direkte Angabe aller Parameter der UnivIS PRG Schnittstelle:

[i4univis (PRG Attribute)]optionale Überschrift[/i4univis]

Es ist somit sehr einfach die univis-Tags auf der alten Webseite in das neue Plugin zu überführen:

Aus

<univis>
  search thesis advisor="Bernhard Heinloth" status="finished"
  show compact sort=date lang=en codeset=utf8
</univis>

wird

[i4univis search="thesis" advisor="Bernhard Heinloth" status="finished" show="compact" sort="date" lang="en" codeset="utf8"][/i4univis]

Neben den von der PRG-Schnittstelle unterstützten Attributen gibt es im Plugin folgende Erweiterungen:

  • codeset wird bei Fehlen des Attributs automatisch auf utf8 gesetzt.
  • sem kann unter Angabe des Wertes auto anhand der Seitenhierarchie automatisch das Semester wählen. Dies ist für die Lehrveranstaltungen (im Zusammenspiel mit dem semesterweisen Kopieren der WordPress-Seiten) nützlich.

Beispiele

Publikationsliste

Im Gegensatz zur Option task="publikationen" des RRZE-Plugins kann bei unserem Plugin mittels show="elong" eine ausführliche Darstellung (mit DOI & Links auf die Paper) angezeigt werden.

Quelltext:
[i4univis search=“publications“ author=“Heinloth,Bernhard“ sort=“date“ year=“2019″ show=“elong“][/i4univis]

Resultat:

Heinloth, Bernhard ; Ammon, Marco ; Nguyen, Dustin ; Hönig, Timo ; Sieh, Volkmar ; Schröder-Preikschat, Wolfgang:
Cocoon: Custom-Fitted Kernel Compiled on Demand.
In: ACM (Hrsg.) : Proceedings of the 10th Workshop on Programming Languages and Operating Systems
(10th Workshop on Programming Languages and Operating Systems (PLOS 2019), Huntsville, ON, Canada, 27.10.2019).
New York, NY, USA : ACM, 2019, S. 1-7. - ISBN 978-1-4503-7017-2
Stichwörter: PAX, InvasIC
[doi>10.1145/3365137.3365398] (BibTeX)

Ziegler, Andreas ; Geus, Julian ; Heinloth, Bernhard ; Hönig, Timo ; Lohmann, Daniel:
Honey, I Shrunk the ELFs: Lightweight Binary Tailoring of Shared Libraries.
In: ACM Transactions on Embedded Computing Systems 18 (2019), Nr. 5s, S. 102:1-102:23
Stichwörter: InvasIC; CADOS; Shared Libraries; Binary Tailoring; Linux
[doi>10.1145/3358222] (BibTeX)

Abschlussarbeiten

Im Beispiel für die englischsprachige Kontaktseite (keine äquivalente Option im RRZE-Plugin)
Quelltext:

<h4>Supervised Theses</h4>
[i4univis search="thesis" department="Lehrstuhl für Informatik 4" show="compact" advisor="Heinloth,Bernhard" sort="date" lang="en"][/i4univis]
<h4>Own Thesis</h4>
[i4univis search="thesis" show="compact" title="Automatic Tailoring of the Multi-Purpose Linux Operating System on Embedded Devices" lang="en"][/i4univis]

Resultat:

Supervised Theses

Analysis of Interrupt Handling Overhead in the Linux Kernel
Student: Luis Gerhorst (handed in on 03.12.2018, Thesis file...)
Supervisors: Prof. Dr.-Ing. habil. Wolfgang Schröder-Preikschat, Benedict Herzog, M. Sc., Stefan Reif, M. Sc., Bernhard Heinloth, M. Sc., Prof. Dr.-Ing. Timo Hönig

Boot-time Target Optimization for Operating Systems based on LLVM for X86 Architecture
Student: Dustin Nguyen (handed in on 31.01.2019 )
Supervisors: Prof. Dr.-Ing. habil. Wolfgang Schröder-Preikschat, Dr.-Ing. Volkmar Sieh, Bernhard Heinloth, M. Sc.

Compiler-Based Target-Optimization of Operating-System Functions
Student: Marco Ammon (handed in on 31.01.2020 )
Supervisors: Prof. Dr.-Ing. habil. Wolfgang Schröder-Preikschat, Bernhard Heinloth, M. Sc., Dustin Nguyen, M. Sc.

Efficient One-Shot Function Tracing in the Linux Kernel
Student: Thomas Preisner (handed in on 02.04.2019 )
Supervisors: Prof. Dr.-Ing. habil. Wolfgang Schröder-Preikschat, Andreas Ziegler, M. Sc., Bernhard Heinloth, M. Sc.

RISCy StuBS - A Multithreaded Operating System for RISC-V
Student: Lorenz Kästle (handed in on 29.04.2020 )
Supervisors: Prof. Dr.-Ing. habil. Wolfgang Schröder-Preikschat, Bernhard Heinloth, M. Sc., Christian Eichler, M. Sc.

Sandkasten: a seccomp-based user sandbox to restrict file and process access (sandkasten)
Student: Simon Ruderich (handed in on 16.07.2018, Thesis file...)
Supervisors: Bernhard Heinloth, M. Sc., Andreas Ziegler, M. Sc.

StuBS - ARMv7-based Educational Operating System for Raspberry Pi
Student: Maximilian Ott (handed in on 18.09.2019 )
Supervisors: Prof. Dr.-Ing. habil. Wolfgang Schröder-Preikschat, Bernhard Heinloth, M. Sc., Christian Eichler, M. Sc.

Zielhardwareoptimierung von Betriebssystemen zur Bootzeit auf Basis des LLVM-Compilers auf der Aarch64-Architektur
Student: Sebastian Endres (handed in on 29.08.2019 )
Supervisors: Prof. Dr.-Ing. habil. Wolfgang Schröder-Preikschat, Dr.-Ing. Volkmar Sieh, Bernhard Heinloth, M. Sc.

Own Thesis

Automatic Tailoring of the Multi-Purpose Linux Operating System on Embedded Devices
Student: Bernhard Heinloth (handed in on 10.09.2014, Thesis file...)
Supervisors: Prof. Dr.-Ing. habil. Wolfgang Schröder-Preikschat, Prof. Dr.-Ing. habil. Daniel Lohmann

Kurze Lehrveranstaltungsinformationen

Es können mehrere Veranstaltungen in einem Shortcode abgefragt werden.

Quelltext:
[i4univis search=“lectures“ id=“40473378|40257034|41223861″ show=“lshort“ sem=“2021w“ noimports=“true“][/i4univis]

Resultat:

Erweiterte Übungen zu Betriebssysteme (EÜ BS)

Dozent/in
Bernhard Heinloth, M. Sc.
Angaben
Übung
Online/Präsenz
4 SWS, ECTS-Studium, ECTS-Credits: 5, Sprache Deutsch
Asynchrone Lehrveranstaltung
Zeit und Ort: Mi 16:00 - 18:00, 01.153-113 CIP; Fr 14:00 - 16:00, 01.153-113 CIP
Studienfächer / Studienrichtungen
WPF IuK-MA-ES-INF ab 1
WPF IuK-MA-REA-INF ab 1
WPF IuK-MA-REA-INF ab 1
WPF INF-BA-V-VSB ab 5
WPF INF-MA ab 1
WPF ICT-MA-ES 1-4

Übungen zu Betriebssysteme (Ü BS)

Dozent/in
Bernhard Heinloth, M. Sc.
Angaben
Übung
Online/Präsenz
2 SWS, benoteter Schein, ECTS-Studium, ECTS-Credits: 2,5, Sprache Deutsch
Zeit und Ort: Mi 14:15 - 15:45, 0.031-113
Studienfächer / Studienrichtungen
WF IuK-BA ab 5
WPF IuK-MA-ES-INF ab 1
WPF IuK-MA-REA-INF ab 1
WPF INF-BA-V-VSB ab 5
WPF INF-MA ab 1
WPF ICT-MA-ES 1-4

Übungen zu Betriebssysteme (Rechnerübungen) (RÜ BS)

Dozent/in
Bernhard Heinloth, M. Sc.
Angaben
Übung
Online/Präsenz
, Sprache Deutsch
Zeit und Ort: Mi 14:00 - 16:00, 01.153-113 CIP; Fr 12:00 - 14:00, 01.153-113 CIP; Einzeltermin am 11.1.2022 10:00 - 14:00, 01.153-113 CIP
Studienfächer / Studienrichtungen
WF IuK-BA ab 5
WPF IuK-MA-ES-INF ab 1
WPF INF-BA-V-VSB ab 5
WPF INF-MA ab 1
WPF IuK-MA-REA-INF ab 1

Stundenplan

Eine (automatisch per Stylesheet angepasster) Stundenplanübersicht. Im Beispiel wird durch sem="auto" anhand der Seitenhierarchie das Semester für SPiC erkannt (hier also Sommersemester 2022). Beim RRZE-Plugin fehlt diese Option vollständig.
Quelltext:
[i4univis search=“lectures“ department=“Lehrstuhl für Informatik 4″ name=“Systemnahe Programmierung in C“ show=“plan“ sem=“auto“]Stundenplan[/i4univis]

Resultat:

Stundenplan

Mo Di Mi Do Fr
08:00
08:15 - 09:45
RÜ SPiC
(Kindermann)
01.153-113 CIP
08:15 - 09:45
RÜ SPiC
(Reitemeyer)
01.153-113 CIP
08:15 - 09:45
RÜ SPiC
(Gebert)
01.153-113 CIP
08:15 - 09:45
Ü SPiC
(Hausladen)
00.151-113
08:15 - 09:45
RÜ SPiC
(N.N.)
01.153-113 CIP
08:15 - 09:45
Ü SPiC
(N.N.)
02.134-113
08:15 - 09:45
Ü SPiC
(Reitemeyer)
0.031-113
09:00
10:00
10:15 - 11:45
RÜ SPiC
(N.N.)
01.153-113 CIP
10:15 - 11:45
SPiC
(Sieh)
H7
10:15 - 11:45
RÜ SPiC
(Stephan)
01.153-113 CIP
10:15 - 11:45
Ü SPiC
(Sieh)
0.031-113
10:15 - 11:45
Ü SPiC
(von der Haar)
02.134-113
10:15 - 11:45
RÜ SPiC
(von der Haar)
01.153-113 CIP
10:15 - 11:45
Ü SPiC
(Gebert)
00.151-113
11:00
12:00
12:15 - 13:45
RÜ SPiC
(N.N.)
01.153-113 CIP
12:15 - 13:45
Ü SPiC
(N.N.)
01.151-128
12:15 - 13:45
Ü SPiC
(Kindermann)
00.151-113
12:15 - 13:45
RÜ SPiC
(Ott)
01.153-113 CIP
12:15 - 13:45
Ü SPiC
(Stephan)
0.031-113
12:15 - 13:45
Ü SPiC
(N.N.)
01.151-128
13:00
14:00
14:15 - 15:45
RÜ SPiC
(N.N.)
01.153-113 CIP
14:15 - 15:45
Ü SPiC
(Ott)
0.031-113
14:15 - 15:45
Ü SPiC
(N.N.)
01.151-128
14:15 - 15:45
SPiC
(nur 27.4.)
(Sieh)
H7
15:00
16:00
16:15 - 17:45
RÜ SPiC
(Hausladen)
01.153-113 CIP
16:15 - 17:45
RÜ SPiC
(N.N.)
01.153-113 CIP
17:00

Überschneidung: Mo von 12:15 bis 13:45
Überschneidung: Mo von 12:15 bis 13:45
Überschneidung: Mo von 12:15 bis 13:45
Überschneidung: Mo von 14:15 bis 15:45
Überschneidung: Mo von 14:15 bis 15:45
Überschneidung: Mo von 14:15 bis 15:45
Überschneidung: Do von 10:15 bis 11:45
Überschneidung: Do von 10:15 bis 11:45
Überschneidung: Do von 10:15 bis 11:45
Überschneidung: Do von 12:15 bis 13:45
Überschneidung: Do von 12:15 bis 13:45
Überschneidung: Do von 12:15 bis 13:45
Überschneidung: Fr von 08:15 bis 09:45
Überschneidung: Fr von 08:15 bis 09:45
Überschneidung: Fr von 08:15 bis 09:45
Überschneidung: Fr von 10:15 bis 11:45

Ungültige Angaben

Bei Fehlern wird eine entsprechende Warnung mit der (generierten) PRG-Zieladresse angezeigt
Quelltext:
[i4univis search=“foo“ bar=“baz“][/i4univis]

Resultat:

Die Antwort-Daten des UnivIS-Aufrufs (http://univis.uni-erlangen.de/prg?bar=baz&codeset=utf8&search=foo) sind ungültig!

Include

Der Shortcode i4include ist quasi das Herzstück, ermöglicht es doch zeitgemäßes Einbetten von Webseiten in WordPress aus dem NFS (ohne iframes).

Achtung: Dieses Plugin sollte mit Bedacht und Maß eingesetzt werden — es ist nicht dazu da, um bestehende www4-Webseiten einfach 1:1 einzublenden!

Die einzubettende Seiten sollten nur grundlegende HTML-Elemente beinhalten (ohne Styles, Header oder Footer) und werden dann — dynamisch, beim Aufruf der Webseite — an der Stelle des Shortcodes integriert.

Benutzungshinweise

  • Eingeblendete Inhalte sind nicht über die WordPress-Suche auffindbar
  • WordPress wendet das FAU-TechFak-Template-Stylesheet an, welches nur schwer zu neutralisieren ist — CSS bietet jenseits vom Überschreiben keine geeigneten Möglichkeiten um temporär Regeln zu deaktivieren . Entsprechend sollte nicht gegen, sondern mit den vorgegeben Styles gearbeitet werden, auch um einen einheitlichen Webauftritt zu gewährleisten!
  • WordPress führt weiterhin (unabhängig vom Attribut shortcodes) seine Standard-Textersetzungen durch, so wird zum Beispiel ein newline-Zeichen zum einem HTML-br-Element umgewandelt. Entsprechend muss der einzubettende Inhalt etwas angepasst werden
  • Komplexe HTML Konstruktionen sollten vermieden werden, da sie meist das responsive Design zerstören.
    Das trifft allerdings auch auf weniger komplexe Elemente wie Tabellen zu, welche ab einer gewissen Größe besser anders dargestellt werden sollten (z.B. via Accordions.
  • Insbesondere die fortgeschrittene Variante mit dynamic ist etwas komplexer und ressourcenhungriger — bitte nur verwenden, wenn die Technik dahinter wirklich verstanden wurde. Andernfalls ist mindestens ein Kuchen fällig!
  • Die WordPress Vorschaufunktion ist bei aktiviertem dynamic nicht verfügbar!
  • Die erlaubten Dateien sind (anhand ihrer Dateiendung) beschränkt, diese sind in den Konstanten EXT_EMBED sowie EXT_BINARY im Pluginquelltext definiert (und sollten die üblichen relevanten Typen abdecken).
  • Der Pfad muss auf eine erlaubte (EXT_EMBED) Datei (nicht Ordner) zeigen!

Verwendung

Der Shortcode kann wie folgt verwendet werden:
[i4include (optionale Attribute)]Pfad[/i4include]

Die unterstützten Attribute für diesen Shortcode sind:

  • course Angabe einer Lehrveranstaltung (Kurzform, welche auch dem Link entspricht, z.B. bs für Betriebssysteme).
    Es wird nicht geprüft ob die Veranstaltung oder der dazugehörige Pfad auch tatsächlich (bereits) existiert.
  • semester explizite Angabe des Semesters (z.B. WS21) oder current für das gemäß heutigem Datums laufenden Semesters.
    Wird dieser Angabe weggelassen, so wird versucht aus der Seitenhierarchie das aktuelle Semester zu bekommen (eine Unterseite vom Lehre / Sommmersemester 2022 verweist automatisch auf Kurse dieses Semester), andernfalls wird auf das aktuelle Semester umgeschwenkt (z.B. bei einer Unterseite von Forschung).
  • dynamic ist ein boolsches Attribut, welches, wenn wahr, dynamisch weitere Inhalte aus dem Arbeitsordner des angegeben Pfads einbetten kann — dies können sowohl weitere HTML-Datei sein (die in die WordPress-Seite eingebettet werden) oder Inhalte wie Bilder. Um dies technisch zu ermöglichen, wird die URL der WordPress-Seite beim Aufruf umgeschrieben, wodurch auch nur maximal ein dynamischer i4include Shortcode pro WordPress-Seite erlaubt ist.
  • shortcodes ist ein boolsches Attribut, welches, wenn wahr, die interpretation von Shortcodes im Zieldokument erlaubt.
    Bitte beachten: Rekursive dynamische i4include Shortcodes sind natürlich nicht erlaubt!
  • showerrors ist ein boolsches Attribut, welches, wenn wahr, eine sprechende Fehlermeldung anzeigt.
    Dies kann für die Fehlersuche bei der Seitenerstellung genutzt werden, ohne den Parameter wird lediglich Einbettung fehlgeschlagen bei einem Fehler angezeigt (die Details werden dann im Webserver geschrieben).
  • raw verhindert, dass Leerzeilen (also doppelte Zeilenenden, \n\n) vom WordPress-internen wpautop automatisch zu einem Absatz konvertiert werden (Standard: false, d.h. \n\n wird zu <p>...</p>).

Der Pfad des Shortcodes verweist standardmäßig auf eine Datei im Unterverzeichnis von /proj/i4wp/extern, allerdings können auch andere Ordner oder gar Webseiten von Webservern (sofern im Plugin durch den regulären Ausdruck ALLOWED_PATH_REGEX erlaubt) angezeigt werden. In solchen Fällen fungiert WordPress als Proxy, d.h. alle Dateien (ink. Binärdateien) werden getunnelt, was ziemlich ressourcenintensiv ist – nur die erste Variante erlaubt die direkte weitergabe der Dateien durch den Webserver (es wird dennoch eine HTTP-Umleitung durch WordPress durchgeführt).

Beispiele

Einfaches Einbetten

Quelltext:
[i4include]lehre/ss22/demo/index.html[/i4include]

Resultat:

Hallo Welt!

Beispiel HTML Element:
:(){ :|:& };:

Beispiel Shortcode:
[alert style="success"]Sofern dies in einer grünen Box zu sehen ist sind Shortcodes aktiv[/alert]

Ursprung:
/proj/i4wp/extern/lehre/ss22/demo

Einbetten mit Shortcodes

Quelltext:
[i4include shortcodes=“true“ course=“demo“]index.html[/i4include]

Resultat:

Hallo Welt!

Beispiel HTML Element:
:(){ :|:& };:

Beispiel Shortcode:

Sofern dies in einer grünen Box zu sehen ist sind Shortcodes aktiv

Ursprung:
/proj/i4wp/extern/lehre/ss22/demo

Ungültiger Pfad

Quelltext:
[i4include showerrors=“true“]notfound.html[/i4include]

Resultat:

i4include Fehler: Der Inhalt kann nicht angezeigt werden – das Einbetten des Pfads /proj.stand/i4wp/extern/notfound.html ist nicht erlaubt!

Nicht erlaubter Pfad

Quelltext:
[i4include showerrors=“true“]/etc/shadow[/i4include]

Resultat:

i4include Fehler: Der Inhalt kann nicht angezeigt werden – das Einbetten des Pfads /etc/shadow ist nicht erlaubt!

Datei einer Lehrveranstaltung

Quelltext:
[i4include shortcodes=true course=“bs“ semester=“WS22″]semplan.html[/i4include]

Resultat:

KW Mo Di Mi Do Fr Themen
42 18.10 19.10 20.10 21.10 22.10 Organisation und Einleitung

Einführung in die Arbeitsumgebung
VL1 TÜ A0
43 25.10 26.10 27.10 28.10 29.10 Einstieg in die Betriebssystementwicklung
VL2 TÜ A1
Aus- und Eingabe
44 01.11 02.11 03.11 04.11 05.11 (Ur)Laden des x86er
Allerheiligen Sem1
45 08.11 09.11 10.11 11.11 12.11 Unterbrechungen, Hardware
VL3
     
46 15.11 16.11 17.11 18.11 19.11 Unterbrechungen – Software
VL4 TÜ A2
Interruptbehandlung
47 22.11 23.11 24.11 25.11 26.11 Unterbrechungen – SoftIRQ
VL5 Sem2
Fehlersuche mit dem GDB
48 29.11 30.11 01.12 02.12 03.12 Unterbrechungen – Synchronisation
VL6 TÜ A3
Pro-/Epilogmodell
49 06.12 07.12 08.12 09.12 10.12 IA-32: Die 32-Bit-Intel-Architektur
VL7 Sem3
Programmierung in Assembler
50 13.12 14.12 15.12 16.12 17.12 Koroutinen und Programmfäden
VL8 TÜ A4
Threadumschaltung
51 20.12 21.12 22.12 23.12 24.12 Scheduling
VL9
       
52 27.12 28.12 29.12 30.12 31.12
Vorlesungsfrei
01 03.01 04.01 05.01 06.01 07.01
Vorlesungsfrei
02 10.01 11.01 12.01 13.01 14.01 Betriebssystem-Architekturen
VL10 TÜ A5
Zeitscheibenscheduling
03 17.01 18.01 19.01 20.01 21.01 Fadensynchronisation
VL11
       
04 24.01 25.01 26.01 27.01 28.01 Gerätetreiber
VL12 TÜ A6
Ereignisbearbeitung und Synchronisation
05 31.01 01.02 02.02 03.02 04.02 Interprozesskommunikation
VL13
       
06 07.02 08.02 09.02 10.02 11.02 Zusammenfassung, Ausblick & Fragestunde
Eine Anwendung
VL14 TÜ A7    
Q&A

Dynamisches Einbetten

Quelltext:
[i4include dynamic=“true“ course=“bs“ semester=“WS22″]uebung/aufgabe1/a1.html[/i4include]

Resultat siehe /lehre/ws22/bs/uebung/aufgabe-1

Ursprung:
/proj/i4wp/extern/lehre/ws22/bs/uebung/aufgabe1/...

Einbetten vom www4-Home-Ordner

Quelltext:
[i4include]/proj/i4www/home/heinloth/spam.htm[/i4include]

Resultat:

Lovely Spam! Wonderful Spam!
Lovely Spam! Wonderful Spam

Spa-a-a-a-a-a-a-am
Spa-a-a-a-a-a-a-am
Spa-a-a-a-a-a-a-am
Spa-a-a-a-a-a-a-am

Lovely Spam! (Lovely Spam!)
Lovely Spam! (Lovely Spam!)
Lovely Spam!
Spam, Spam, Spam, Spam!

(Quelle)

Einbetten von einem Webserver

Quelltext:
[i4include]https://www4.cs.fau.de/~heinloth/spam.htm[/i4include]

Resultat:

Lovely Spam! Wonderful Spam!
Lovely Spam! Wonderful Spam

Spa-a-a-a-a-a-a-am
Spa-a-a-a-a-a-a-am
Spa-a-a-a-a-a-a-am
Spa-a-a-a-a-a-a-am

Lovely Spam! (Lovely Spam!)
Lovely Spam! (Lovely Spam!)
Lovely Spam!
Spam, Spam, Spam, Spam!

(Quelle)

Ursprung:
/proj/i4www/home/heinloth/spam.htm

List

Ein häufiger Anwendungsfall in der Lehre ist das zeitgesteuerte Anzeigen von Vorlesungs-/Übungsfolien und Aufgaben.
Bisher mussten dafür vor allem große (breite) Tabellen herhalten, allerdings sollte darauf aufgrund des responsiven Webdesign zugunsten von Accordions verzichtet werden.

Außerdem wurde je nach Veranstaltung teilweise mittels SSI ein zeitgesteuertes Anzeigen implementiert. Diese Funktionalität (bzw. genauer: ein Verstecken) wird über den i4Hidden-Text Shortcode ermöglicht.

Diese Shortcodes sind allerdings verhältnismäßig umständlich zu schreiben (und nicht sehr fehlertolerant):

[collapsibles]
[i4hidden-text end="2021-10-17"]
[collapse title="1. Vorlesung" name="vl-1"]
Vorlesung am Montag, 18. Oktober 2021

<i>Bitte an 3G Nachweis denken!</i>
[accordion]
[accordion-item title="Organisation" name="vl-1-1"]
<a href="[i4link]vl1a.pdf[/i4link]">Folie zur Organisation</a>
[/accordion-item]
[accordion-item title="Einführung" name="vl-1-2"]
<a href="[i4link]vl1b.pdf[/i4link]">Folie zur Einführung</a>
[/accordion-item]
[/accordion]
[/collapse]
[/i4hidden-text]
[i4hidden-text end="2021-10-24"]
[collapse title="2. Vorlesung" name="vl-2"]
Vorlesung am Montag, 25. Oktober 2021
...
[/collapse]
[/i4hidden-text]
[/collapsibles]

Der Shortcode i4list schafft hier Abhilfe, in dem er die gleiche Ausgabe wie folgt erstellen kann:

[i4list name="Vorlesung" showdate=true uncover=1]
2021-10-18 1. Vorlesung

*Bitte an 3G Nachweis denken!*

## Organisation
[Folie zur Organisation](vl1a.pdf)

## Einführung
[Folie zur Einführung](vl1b.pdf)


2021-10-25 2. Vorlesung
...
[/i4list]

Das Resultat sieht dann wie folgt aus:

1. Vorlesung

Vorlesung am Montag, 18. Oktober 2021

Bitte an 3G Nachweis denken!

Organisation

Einführung

2. Vorlesung

Vorlesung am Montag, 25. Oktober 2021

Die unterstützten Attribute für diesen Shortcode sind:

  • name Der Name für die Veranstaltung, wird für internes ID-Feld verwendet.
  • showdate ist ein boolsches Attribut, welches, wenn wahr, bei Einträgen mit Datumsnotation zuerst den namen gefolgt von einem lesbaren Datum in der Form Wochentag, Tag. Monat Jahr ausgibt.
  • shortcodes ist ein boolsches Attribut, wenn wahr, die frühzeitige Evaluation von Shortcodes (z.B. von i4include) durchführt und das Ergebnis bei der Interpretation der Markupsprache berücksichtigt. Ohne Angabe dieses Attributs werden Shortcodes lediglich im Nachgang ausgewertet.
  • uncover blendet, falls angegben, den Eintrag die angegbenen Anzahl an Tagen vor der Veranstaltung ein.
    So bedeutet uncover=2, dass der Eintrag 2 Tage vor dem angegebenen Datum sichtbar sein soll. Für angemeldete Nutzer ist der Eintrag weiterhin jederzeit sichtbar!
  • load steuert, ob die Collapsibles eingeklappt oder ausgeklappt sein sollen.
    Unterstützte Werte sind none (default, alles eingeklappt), all bzw. open (alles ausgeklappt) und last (die Elemente mit dem aktuellsten, sichtbaren Datum werden ausgeklappt).

Als Inhalt wird eine sehr (sehr) vereinfachte Untermenge von Markdown verwendet:

[i4list]

# Markdown Codes

[absoluter Link](https://www4.cs.fau.de/Lehre/SS21/V_BST/Evaluation/SS13_bst_v.pdf)
[relativer Link](../bst/evaluation/SS13_bst_v.pdf)

Ich wollte mal __unterstreichen__, dass das ziemlich **fett** und voll *schräg* ist!

---

Einkaufsliste:
 * Eier
 * Schmalz
 * Zucker
 * Salz
 * Milch
 * Mehl
 * Safran

---

 1. Foo
 2. Bar
    Baz
 3. usw

# Videos
Es reicht einfach die URL einzufügen, und schon wird ein Video daraus
https://www.fau.tv/clip/id/36104

[/i4list]

wird zu

Markdown Codes

absoluter Link
relativer Link

Ich wollte mal unterstreichen, dass das ziemlich fett und voll schräg ist!


Einkaufsliste:

  • Eier
  • Schmalz
  • Zucker
  • Salz
  • Milch
  • Mehl
  • Safran

  1. Foo
  2. Bar
    Baz
  3. usw

Videos

Es reicht einfach die URL einzufügen, und schon wird ein Video daraus

Code

Dieses Plugin zeigt den Inhalt des Shortcodes in einem code-Tag an, ohne darin enthaltene Shortcodes zu interpretieren. Wird primär für diese Seite hier verwendet.

Quelltext:

[i4code][i4semester][/i4semester][/i4code]

Resultat:
[i4semester][/i4semester]

Responsive Tabellen

Wir haben das CSS um eine responsive, d.h. mobilfreundliche, Tabellendarstellung erweitert. Dies kann beispielsweise genutzt werden, um Tabellen für die Vorlesungsfolien, Materialien o.Ä. zu erstellen.

Die Tabelle besteht dabei aus mehreren Teilen:

1) Header

Um eine Tabelle als responsiv zu definieren, einfach die CSS-Klasse i4responsivetable zuweisen.
Anonsten definiert der Tabellen Kopf wie gewohnt die Struktur. Wichtig ist hier, dass Spaltenbeschriftungen zweifach angegeben werden müssen:
Die <th> definieren dabei die Spaltenbeschriftung in der regulären, breiten Anzeige, wohingegen die CSS-Variablen die Bezeichner der responsiven, gefaltenen Tabelle darstellen.

<table class="i4responsivetable" style="
            --colheader1: 'Kapitel:';
            --colheader2: 'Thema:';
            --colheader3: 'Datum:';
            --colheader4: 'Folien:';
        ">
<thead>
	<tr>
		<th>Kapitel</th>
		<th>Thema</th>
		<th>Datum</th>
		<th>Folien</th>
	</tr>
</thead>
<!-- ... -->
</table>

2) Tabellenkörper

Hier handelt es sich um ganz reguläre HTML-Tabellenzeilen, bestehend aus einem <tr> und <td>-Tag:

<tbody>
	<tr>
		<td>1</td>
		<td>Organisation</td>
		<td>25.04.​2022</td>
		<td>
			<p><a href="...">1x1</a>, <a href="...">2x2</a>, <a href="...">animiert</a></p>
		</td>
	</tr>
	<tr><!-- ... --></tr>
	<!-- ... -->
</tbody>

3) Optional: Abschnitte

Abschnitte erlauben es, die Tabelle nochmals zu untergliedern. Hierzu einfach der entsprechenden Tabellenzeile die CSS-Klasse part_number zuweisen, und optional leere Spalten in einen colspan zusammenfassen.

<tr class="part_number">
	<td>3</td>
	<td colspan="3">Abschnitt: Grundlagen</td>
</tr>

Beispiel

Hier eine exemplarische Tabelle für Vorlesungsfolien. Um die responsive Darstellung zu betrachten entweder das Browserfenster kleinerziehen, oder die Entwicklerwerkzeuge des eigenen Browsers nutzen (Rechtsklick, Inspect, oben in der Leiste nach einem Smartphone/Tabletsymbol suchen).

Kapitel Thema Datum Folien
1 Organisation 25.04.​2022

1×1, 2×2, animiert

2 Einleitung 25.04.​2022

1×1, 2×2, animiert

3 Abschnitt: Grundlagen
3-1 WordPress System – Rotierende Autoren 02.05.​2022

1×1, 2×2, animiert

3-2 Struktureller Aufbau tabellarischen Scheiterns 09.05.​2022

1×1, 2×2, animiert

Ferner existiert eine angepasste Version von semplan.py, welche automatisch konforme Vorlesungs- und Übungspläne sowie Aufgabenlisten erstellt.

Hidden-Text

Es handelt sich hier um eine erweiterte Fassung des Hidden-Text Shortcodes der RRZE-Elements. Anders als das Original ermöglichen sie es angemeldeten Benutzern, ausgeblendete Elemente, unabhängig von etwaigen Zeitbeschränkungen zu betrachten. Dies kann hilfreich sein, um Veröffentlichungen (etwa Semesterterminpläne) im vornhinein zu prüfen.

Quelltext:

[i4hidden-text end="2020-01-01"]Aufgeblendet[/i4hidden-text]
[i4hidden-text end="2099-01-01"]Versteckt[/i4hidden-text]

Resultat:
Um den Effekt zu beobachten sollten Sie sich anmelden!
Aufgeblendet

Friedrich-Alexander-Universität Erlangen-Nürnberg