Skip to content
Snippets Groups Projects
Commit cb26ccc0 authored by Lukas Ruge's avatar Lukas Ruge
Browse files

Add ability to generate frab.xml from conference and media data

parent 425af860
No related branches found
No related tags found
No related merge requests found
Pipeline #7116 passed
Showing
with 383 additions and 27 deletions
---
layout: [frab]
title: nbsp
---
\ No newline at end of file
---
layout: [frab]
title: nook2022
---
\ No newline at end of file
---
layout: conference
title: Nobreakspace
acronym: nbsp
base_url: https://chaotikum.org/
---
\ No newline at end of file
---
layout: conference
title: Night of open Knowledge 2022
acronym: nook2022
base_url: https://2022.nook-luebeck.de/
---
\ No newline at end of file
...@@ -58,11 +58,11 @@ timezone: Europe/Berlin # Timezone for blog posts and alike ...@@ -58,11 +58,11 @@ timezone: Europe/Berlin # Timezone for blog posts and alike
# 5. Collections # 5. Collections
collections: collections:
posts: posts:
title: Posts # Needed for Siteleaf title: Posts
output: true output: true
feature_image: "/assets/f11.jpg" feature_image: "/assets/f11.jpg"
projects: projects:
title: Projekte # Needed for Siteleaf title: Projekte
output: true output: true
feature_image: "https://chaotikum.org/assets/3ddrucker.jpg" feature_image: "https://chaotikum.org/assets/3ddrucker.jpg"
permalink: project/:path/ permalink: project/:path/
...@@ -79,11 +79,20 @@ collections: ...@@ -79,11 +79,20 @@ collections:
output: false output: false
press: press:
output: false output: false
conferences:
title: conferences
output: true
permalink: conferences/:path/
conferencefrab:
title: conferencefrab
output: true
permalink: conferences/:title.xml
events: events:
title: Events title: Events
output: true output: true
permalink: event/:path.xml permalink: event/:path.xml
# 6. Jekyll collections settings # 6. Jekyll collections settings
defaults: defaults:
- -
......
<section class="section typeset">
<ul class="list list--posts">
{% assign sorted = site.conferences | sort: 'title' | reverse %}
{% for conference in sorted %}
<li class="item item--post">
<article class="article article--post">
<h2><a href="{{ site.baseurl }}{{ conference.url }}">{{ conference.title | markdownify | remove: '<p>' | remove: '</p>' }}</a></h2>
</article>
</li>
{% endfor %}
</ul>
</section>
\ No newline at end of file
...@@ -2,10 +2,10 @@ ...@@ -2,10 +2,10 @@
<section class="section typeset"> <section class="section typeset">
<ul class="list list--posts"> <ul class="list list--posts">
{% assign sorted = site.media | sort: 'date' | reverse %} {% assign sorted = site.media | sort: 'release_date' | reverse %}
{% for media in sorted %} {% for media in sorted %}
{% capture releasedate %}{{media.date | date: '%s'}}{% endcapture %} {% capture release_date %}{{media.release_date | date: '%s'}}{% endcapture %}
{% if releasedate < nowunix %} {% if release_date < nowunix %}
<li class="item item--post"> <li class="item item--post">
<article class="article article--post"> <article class="article article--post">
<h2><a href="{{ site.baseurl }}{{ media.url }}">{{ media.title | markdownify | remove: '<p>' | remove: '</p>' }}</a></h2> <h2><a href="{{ site.baseurl }}{{ media.url }}">{{ media.title | markdownify | remove: '<p>' | remove: '</p>' }}</a></h2>
......
---
layout: default
---
{% include site-header.html %}
{% include twittercard.html %}
<main class="main container">
<div class="content">
<h4> {{ page.title }}</h4>
</div>
</main>
{% include site-footer.html %}
---
layout: default
nofeature: true
---
{% include site-header.html %}
<main class="main container">
<div class="content">
{% include conference-list.html %}
</div>
</main>
{% include site-footer.html %}
\ No newline at end of file
---
layout: nil
---
<?xml version="1.0" encoding="utf-8"?>
{% capture nowunix %}{{'now' | date: '%s'}}{% endcapture -%}
{% comment -%}
Finding the conference.
{% endcomment -%}
{% for c in site.conferences -%}
{% if c.acronym == page.title -%}
{% assign conference = c -%}
{% endif -%}
{% endfor -%}
{% comment -%}
Finding the first and last talk to establish the variables "earliest" and "latest". Then converting this into a duration in days.
{% endcomment -%}
{% capture earliest %}{{'now' | date: '%s'}}{% endcapture -%}
{% capture latest %}0{% endcapture -%}
{% assign conference_media = site.media | where_exp: "video", "video.conferences contains conference.acronym" -%}
{% for video in conference_media -%}
{% if video.event and video.event != '' -%}
{% for e in site.events -%}
{% if e.uid == video.event -%}
{% assign event = e -%}
{% endif -%}
{% endfor -%}
{% endif -%}
{% if video.recording_date and recording_date.event != ''-%}
{% assign recording_date = video.recording_date -%}
{% elsif event -%}
{% assign recording_date = event.eventdate -%}
{% else -%}
{% if conference.date and recording_date.event != ''%}
{% assign recording_date = conference.date -%}
{% else -%}
{% assign recording_date = earliest -%}
{% endif -%}
{% endif -%}
{% capture recordingdate %}{{recording_date | date: '%s'}}{% endcapture -%}
{% if recordingdate < earliest -%}
{% assign earliest = recordingdate -%}
{% endif -%}
{% if recordingdate > latest -%}
{% assign latest = recordingdate -%}
{% endif -%}
{% endfor -%}
{% capture earliestday %} {{earliest | date: '%Y-%m-%d'}}{% endcapture -%}
{% capture earliestdaydate %}{{earliestday | date: '%s'}}{% endcapture -%}
{% capture latestday %} {{latest | date: '%Y-%m-%d'}}{% endcapture -%}
{% capture latestdaydate %}{{latestday | date: '%s'}}{% endcapture -%}
{% assign seconds = latestdaydate | minus: earliestdaydate -%}
{% assign hours = seconds | divided_by: 60 | divided_by: 60 -%}
{% assign days = hours | divided_by: 24 -%}
{% assign days = days | plus: 1 -%}
{% assign eventcounter = 1 -%}
<schedule>
<version>0.1</version>
<conference>
<acronym>{{conference.acronym}}</acronym>
<title>{{conference.title}}</title>
<start>{{earliest | date: '%Y-%m-%d' }}</start>
<end>{{latest | date: '%Y-%m-%d' }}</end>
<days>{{days}}</days>
<timeslot_duration>00:15</timeslot_duration>
<base_url>{{conference.base_url}}</base_url>
</conference>
{% comment -%}
- The Loop over all videos in the conference is first sorted by room, then by date in the hope to reduce repeating rooms. This probebly does nor work and we should use grouoping by rooms inseide of recoeding dates, bit this also does not work and I don't relay have a solution here. It's probably fine for rooms to repeat inside a day i guess.
{% endcomment -%}
{% capture currentday %}{{earliest | date: '%Y-%m-%d' }}{% endcapture -%}
{% assign daynumber = 1 -%}
{% assign sorted_conference_media = conference_media | sort: 'room' -%}
{% assign sorted_conference_media2 = sorted_conference_media | sort: 'release_date' -%}
{% comment -%}
- A day is supposed to have a start and an end. This is probably just helpfull for visualisation in fahrplan apps in not essential... but if we want it, its an extra loop per day I guess...
{% endcomment -%}
<day index="1" date="{{earliest | date: '%Y-%m-%d'}}">
{% for video in sorted_conference_media2 -%}
{% capture release_date %}{{media.release_date | date: '%s'}}{% endcapture -%}
{% if video.file and video.file != '' and nowunix > release_date -%}
{% if eventcounter > 1 -%}
</event>
{% endif -%}
{% comment -%}
some fields may be done via the event.xml and can be left out of the video markdown file. However, if added in the markdown file of the video, they overwrite the information in the event.
{% endcomment -%}
{% if video.event and video.event != '' -%}
{% for e in site.events -%}
{% if e.uid == video.event -%}
{% assign event = e -%}
{% endif -%}
{% endfor -%}
{% endif -%}
{% if video.recording_date and video.recording_date != ''-%}
{% assign recording_date = video.recording_date -%}
{% elsif event -%}
{% assign recording_date = event.eventdate -%}
{% else -%}
{% if conference.date and recording_date.event != ''%}
{% assign recording_date = conference.date -%}
{% else -%}
{% assign recording_date = earliest -%}
{% endif -%}
{% endif -%}
{% if video.duration and video.duration != ''-%}
{% assign duration = video.duration -%}
{% elsif event -%}
{% capture eventstart %}{{event.eventdate | date: '%s'}}{% endcapture -%}
{% capture eventend %}{{event.eventend | date: '%s'}}{% endcapture -%}
{% assign seconds = eventend | minus: eventstart -%}
{% assign minutes = seconds | divided_by: 60 -%}
{% assign hours = minutes | divided_by: 60 -%}
{% assign minutes = minutes | modulo: 60 -%}
{% if minutes == 0 -%}
{% capture min %}00{% endcapture -%}
{% elsif minutes < 10 -%}
{% capture min %}0{{minutes}}{% endcapture -%}
{% else -%}
{% capture min %}{{minutes}}{% endcapture -%}
{% endif -%}
{% if hours == 0 -%}
{% capture duration %}00:{{min}}{% endcapture -%}
{% elsif hours < 10 -%}
{% capture duration %}0{{hours}}:{{min}}{% endcapture -%}
{% else -%}
{% capture duration %}{{hours}}:{{min}}{% endcapture -%}
{% endif -%}
{% else -%}
{% capture duration %}00:00{% endcapture -%}
{% endif -%}
{% capture recordingday %}{{recording_date | date: '%Y-%m-%d' }}{% endcapture -%}
{% if currentday != recordingday -%}
{% capture current_room %}{% endcapture -%}
{% capture currentday %}{{recordingday | date: '%Y-%m-%d' }}{% endcapture -%}
{% capture recordingdate %}{{currentday | date: '%s'}}{% endcapture -%}
{% assign seconds = recordingdate | minus: earliestdaydate -%}
{% assign hours = seconds | divided_by: 60 | divided_by: 60 -%}
{% assign day = hours | divided_by: 24 -%}
{% assign day = day | plus: 1 -%}
</room>
</day>
<day index="{{day}}" date="{{recording_date | date: '%Y-%m-%d'}}">
{% endif -%}
{% if current_room != video.room -%}
{% if current_room and current_room != '' -%}
</room>
<room name="{{video.room}}">
{% else -%}
<room name="{{video.room}}">
{% endif -%}
{% capture current_room %}{{video.room }}{% endcapture -%}
{% endif -%}
{% comment -%}
!!!!!!!!!!!!!! eventcounter als ID ist schlecht! Wie kriegen wir eine eindeutige unveränderliche ID?
{% endcomment -%}
<event id="{{eventcounter}}" guid="{{video.uid}}">
<date>{{video.recording_date | date: '%Y-%m-%dT%H:%M:%S'}}</date>
<start>{{video.recording_date | date: '%Y-%m-%dT%H:%M:%S'}}</start>
<duration>{{duration}}</duration>
<room>{{video.room}}</room>
<slug>{{ video.title | slugify }}</slug>
<url>{{video.url}}</url>
<recording>
{% if video.licence and video.licence != '' -%}
<license>Attribution-NonCommercial-NoDerivatives 4.0 International</license>
{% else -%}
<license>Attribution-NonCommercial-NoDerivatives 4.0 International</license>
{% endif -%}
{% if video.optout and video.optout != '' -%}
<optout>{{video.optout}}</optout>
{% else -%}
<optout>false</optout>
{% endif -%}
</recording>
<title>{{ video.title }}</title>
{% if video.subtitle and video.subtitle != '' -%}
<subtitle>{{ video.subtitle }}</subtitle>
{% endif -%}
<track/>
<type>Talk</type>
{% if video.language and video.language != '' -%}
<language>{{video.language}}</language>
{% else -%}
<language>de</language>
{% endif -%}
<abstract/>
<description> {{video.content | strip_html }} </description>
<logo/>
<persons>
{% for person in video.persons -%}
<person>{{person}}</person>
{% endfor -%}
</persons>
<links/>
<attachments/>
{% if video.file and video.file != '' -%}
<video_download_url>{{video.file}}</video_download_url>
{% endif -%}
{% assign eventcounter = eventcounter | plus: 1 -%}
{% endif %}
{% endfor -%}
</event>
</room>
</day>
</schedule>
\ No newline at end of file
--- ---
layout: [video] layout: video
date: 2020-12-11 20:00:00 +0200 release_date: 2020-12-11 20:00:00 +0200
recording_date: 2020-12-11 20:00:00 +0200
duration: "02:00"
room: bbb
title: "MuonPi Community-basierte verteilte Messung kosmischer Strahlung [Freitalk N8]" title: "MuonPi Community-basierte verteilte Messung kosmischer Strahlung [Freitalk N8]"
license: license:
image: "freitalk-muonpi-community-basierte-verteilte-messung-kosmischer-strahlung.jpg" image: "freitalk-muonpi-community-basierte-verteilte-messung-kosmischer-strahlung.jpg"
...@@ -11,6 +14,8 @@ mccc: "https://media.ccc.de/v/2020-12-11-freitalk-muonpi-community-basierte-vert ...@@ -11,6 +14,8 @@ mccc: "https://media.ccc.de/v/2020-12-11-freitalk-muonpi-community-basierte-vert
archive: "https://archive.org/details/2020-12-11-freitalk-muonpi-community-basierte-verteilte-messung-kosmischer-strahlung" archive: "https://archive.org/details/2020-12-11-freitalk-muonpi-community-basierte-verteilte-messung-kosmischer-strahlung"
file: "https://video.chaotikum.net/freitalk/2020-12-11/2020-12-11-freitalk-muonpi-community-basierte-verteilte-messung-kosmischer-strahlung.mp4" file: "https://video.chaotikum.net/freitalk/2020-12-11/2020-12-11-freitalk-muonpi-community-basierte-verteilte-messung-kosmischer-strahlung.mp4"
event: b3707d4d-7eda-46f5-bb61-cfd02142a5cd event: b3707d4d-7eda-46f5-bb61-cfd02142a5cd
conferences:
- nbsp
nofeature: true nofeature: true
--- ---
Bei MuonPi geht es um die Entwicklung eines verteilten Sensornetzwerkes für Myonenschauer. Die Myonen werden in einem aktiven Sensormaterial detektiert. Diese Messungen werden dann von einer Sensor-Platine an einem Raspberry Pi ausgewertet und mit sehr genauen Timestamps versehen. Dadurch lassen sich die Daten aus verteilten Messungen zusammen rechnen, um Informationen zu der Schauergeometrie und -energie zu erhalten. Bei MuonPi geht es um die Entwicklung eines verteilten Sensornetzwerkes für Myonenschauer. Die Myonen werden in einem aktiven Sensormaterial detektiert. Diese Messungen werden dann von einer Sensor-Platine an einem Raspberry Pi ausgewertet und mit sehr genauen Timestamps versehen. Dadurch lassen sich die Daten aus verteilten Messungen zusammen rechnen, um Informationen zu der Schauergeometrie und -energie zu erhalten.
......
--- ---
layout: [video] layout: video
date: 2023-01-15 19:00:00 +0200 release_date: 2023-01-15 19:00:00 +0200
recording_date: 2022-12-29 21:00:00 +0200
room: Augenprüfraum
title: "Fabi likes P5" title: "Fabi likes P5"
license: CC-BY-NC-ND-40 persons:
- "Fabi"
image: "https://video.chaotikum.net/5min/2022-12-29/2022-12-29-5min-i-like-p5.png" image: "https://video.chaotikum.net/5min/2022-12-29/2022-12-29-5min-i-like-p5.png"
#https://www.uuidgenerator.net/ #https://www.uuidgenerator.net/
uid: 67dbaaf2-a392-40da-985f-3f2750326bde uid: 67dbaaf2-a392-40da-985f-3f2750326bde
...@@ -12,6 +15,8 @@ archive: "" ...@@ -12,6 +15,8 @@ archive: ""
file: "https://video.chaotikum.net/5min/2022-12-29/2022-12-29-5min-i-like-p5.mov" file: "https://video.chaotikum.net/5min/2022-12-29/2022-12-29-5min-i-like-p5.mov"
event: a6d3e790-0918-47b0-9409-2858b9d0bf9a event: a6d3e790-0918-47b0-9409-2858b9d0bf9a
nofeature: true nofeature: true
conferences:
- nbsp
--- ---
P5 ist eine Javascript-Bibliothek. Fabi stellt sie kurz vor und demonstriert, dass beim Aufeinandertreffen eines MIDI-Controllers und P5 schnell etwas Schönes geschaffen werden kann. P5 ist eine Javascript-Bibliothek. Fabi stellt sie kurz vor und demonstriert, dass beim Aufeinandertreffen eines MIDI-Controllers und P5 schnell etwas Schönes geschaffen werden kann.
......
--- ---
layout: [video] layout: video
date: 2022-05-18 20:00:00 +0200 release_date: 2022-05-18 20:00:00 +0200
recording_date: 2022-05-18 15:00:00 +0200
duration: "00:05"
room: Parkplatz
title: "10 Jahre Chaotikum e.V. - Grillparty" title: "10 Jahre Chaotikum e.V. - Grillparty"
license: "CC-BY-NC" license: "CC-BY-NC"
uid: 5e6b423d-9315-4df5-aa9f-66ae0969952c uid: 5e6b423d-9315-4df5-aa9f-66ae0969952c
yt: "https://www.youtube.com/watch?v=5vmi21ztI8k" yt: "https://www.youtube.com/watch?v=5vmi21ztI8k"
event: 627afb6e-f88f-4b73-8d84-290d8925c0dc event: 627afb6e-f88f-4b73-8d84-290d8925c0dc
nofeature: true nofeature: true
conferences:
- nbsp
--- ---
Am 14. Mai 2022 feierte der Chaotikum e.V. seinen 10 Geburtstag. Am 14. Mai 2022 feierte der Chaotikum e.V. seinen 10 Geburtstag.
......
--- ---
layout: [video] layout: video
date: 2022-12-25 20:00:00 +0200 release_date: 2022-12-25 20:00:00 +0200
recording_date: 2022-11-12 recording_date: 2022-11-12 20:00:00 +0200
duration: "45:00"
room: Audimax
title: "How to: Capture the Flag" title: "How to: Capture the Flag"
peolple: subtitle: Einführung in die Welt des kompetetiven Findens von Sicherheitslücken.
persons:
- "wupo" - "wupo"
license: license:
image: "https://video.chaotikum.net/nook22/how-to-capture-the-flag.png" image: "https://video.chaotikum.net/nook22/how-to-capture-the-flag.png"
...@@ -14,6 +17,8 @@ mccc: "https://media.ccc.de/v/how-to-capture-the-flag" ...@@ -14,6 +17,8 @@ mccc: "https://media.ccc.de/v/how-to-capture-the-flag"
file: "https://video.chaotikum.net/nook22/how-to-capture-the-flag.mov" file: "https://video.chaotikum.net/nook22/how-to-capture-the-flag.mov"
event: 46370f56-bfc1-413e-b220-431eec727d47 event: 46370f56-bfc1-413e-b220-431eec727d47
nofeature: true nofeature: true
conferences:
- nook2022
--- ---
https://2022.nook-luebeck.de/talks/how-to-capture-the-flag/ https://2022.nook-luebeck.de/talks/how-to-capture-the-flag/
Einführung in die Welt des kompetetiven Findens von Sicherheitslücken. Einführung in die Welt des kompetetiven Findens von Sicherheitslücken.
......
--- ---
layout: [video] layout: video
date: 2023-01-02 20:00:00 +0200 release_date: 2023-01-02 20:00:00 +0200
recording_date: 2022-11-12 recording_date: 2022-11-13 15:00:00 +0200
duration: "45:00"
room: Audimax
title: "AlekSIS®, das Schul-Informations-System" title: "AlekSIS®, das Schul-Informations-System"
peolple: subtitle: Freiheit, transparenz und offene Organisation in der Schule
persons:
- "Dominik George" - "Dominik George"
- "Frank Poetzsch-Heffter StD" - "Frank Poetzsch-Heffter StD"
license: license:
...@@ -15,6 +18,8 @@ mccc: "https://media.ccc.de/v/aleksis-das-schul-informations-system" ...@@ -15,6 +18,8 @@ mccc: "https://media.ccc.de/v/aleksis-das-schul-informations-system"
file: "https://video.chaotikum.net/nook22/aleksis-das-schul-informations-system.mov" file: "https://video.chaotikum.net/nook22/aleksis-das-schul-informations-system.mov"
event: 46370f56-bfc1-413e-b220-431eec727d47 event: 46370f56-bfc1-413e-b220-431eec727d47
nofeature: true nofeature: true
conferences:
- nook2022
--- ---
https://2022.nook-luebeck.de/talks/how-to-capture-the-flag/ https://2022.nook-luebeck.de/talks/how-to-capture-the-flag/
Einführung in die Welt des kompetetiven Findens von Sicherheitslücken. Einführung in die Welt des kompetetiven Findens von Sicherheitslücken.
......
--- ---
layout: [video] layout: video
date: 2023-01-07 19:00:00 +0200 release_date: 2023-01-07 19:00:00 +0200
recording_date: 2022-12-29 20:00:00 +0100
duration: "00:05"
room: Augenprüfraum
title: "NeoRaider über Linux User-Namespaces und den unshare-Befehl" title: "NeoRaider über Linux User-Namespaces und den unshare-Befehl"
persons:
- "NeoRaider"
license: CC-BY-NC-ND-40 license: CC-BY-NC-ND-40
image: "https://video.chaotikum.net/5min/2022-12-29/2022-12-29-5min-linux-user-namespaces.png" image: "https://video.chaotikum.net/5min/2022-12-29/2022-12-29-5min-linux-user-namespaces.png"
#https://www.uuidgenerator.net/ #https://www.uuidgenerator.net/
...@@ -12,5 +17,7 @@ archive: "" ...@@ -12,5 +17,7 @@ archive: ""
file: "https://video.chaotikum.net/5min/2022-12-29/2022-12-29-5min-linux-user-namespaces.mov" file: "https://video.chaotikum.net/5min/2022-12-29/2022-12-29-5min-linux-user-namespaces.mov"
event: a6d3e790-0918-47b0-9409-2858b9d0bf9a event: a6d3e790-0918-47b0-9409-2858b9d0bf9a
nofeature: true nofeature: true
conferences:
- nbsp
--- ---
Namespaces bieten unter Linux die Möglichkeit im gleichen Kernel effektiv ein eigenes Linux-System zu haben und sind daher die Grundlage für Container wie Docker. Wer so weit nicht gehen will, kann aber mit dem unshare-Befehl leichtgewichtiger arbeiten. Namespaces bieten unter Linux die Möglichkeit im gleichen Kernel effektiv ein eigenes Linux-System zu haben und sind daher die Grundlage für Container wie Docker. Wer so weit nicht gehen will, kann aber mit dem unshare-Befehl leichtgewichtiger arbeiten.
--- ---
layout: [video] layout: video
date: 2022-01-08 19:00:00 +0200 release_date: 2022-01-08 19:00:00 +0200
recording_date: 2022-12-29 20:00:00 +0100
duration: "00:05"
room: Augenprüfraum
title: "TVLuke über die Zahlen, Daten, Fakten der NooK 2022" title: "TVLuke über die Zahlen, Daten, Fakten der NooK 2022"
persons:
- "TVLuke"
license: CC-BY-NC-ND-40 license: CC-BY-NC-ND-40
image: "https://video.chaotikum.net/5min/2022-12-29/2022-12-29-5min-nook2022.png" image: "https://video.chaotikum.net/5min/2022-12-29/2022-12-29-5min-nook2022.png"
#https://www.uuidgenerator.net/ #https://www.uuidgenerator.net/
......
--- ---
layout: [video] layout: video
date: 2023-01-14 19:00:00 +0200 release_date: 2023-01-14 19:00:00 +0200
room: Parkplatz
title: "Jakob über Simon Tatham's Portable Puzzle Collection und Loopy" title: "Jakob über Simon Tatham's Portable Puzzle Collection und Loopy"
license: CC-BY-NC-ND-40 persons:
- "Jakob"
image: "https://video.chaotikum.net/5min/2022-12-29/2022-12-29-5min-simon-tathams-portable-puzzle-collection-und-loopy.png" image: "https://video.chaotikum.net/5min/2022-12-29/2022-12-29-5min-simon-tathams-portable-puzzle-collection-und-loopy.png"
#https://www.uuidgenerator.net/ #https://www.uuidgenerator.net/
uid: c7f1466b-3445-4d44-bae4-49cb0706e7be uid: c7f1466b-3445-4d44-bae4-49cb0706e7be
...@@ -12,6 +14,8 @@ archive: "" ...@@ -12,6 +14,8 @@ archive: ""
file: "https://video.chaotikum.net/5min/2022-12-29/2022-12-29-5min-simon-tathams-portable-puzzle-collection-und-loopy.mov" file: "https://video.chaotikum.net/5min/2022-12-29/2022-12-29-5min-simon-tathams-portable-puzzle-collection-und-loopy.mov"
event: a6d3e790-0918-47b0-9409-2858b9d0bf9a event: a6d3e790-0918-47b0-9409-2858b9d0bf9a
nofeature: true nofeature: true
conferences:
- nbsp
--- ---
Die Portable Puzzle Collection von Simon Tatham hat es Jakob angetan, insbesondere das Spiel "Loopy". Daher stellt er es vor und spielt zusammen mit den Anwesenden eine Runde. Die Portable Puzzle Collection von Simon Tatham hat es Jakob angetan, insbesondere das Spiel "Loopy". Daher stellt er es vor und spielt zusammen mit den Anwesenden eine Runde.
......
---
layout: conferences
collectionpage: conferences
permalink: /conferences/
nofeature: true
aside: false
---
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment