Compare commits

...

20 commits
main ... main

Author SHA1 Message Date
848fffc8e7 typo 2024-08-19 13:24:03 +02:00
2ff9fa71fd adding relme link 2024-08-08 16:57:15 +02:00
c68e29d2a7 typo 2024-08-07 21:45:35 +02:00
5869cc6794 typo in report text 2024-08-06 23:04:50 +02:00
63fc8c0d8c typo 2024-08-06 22:46:25 +02:00
b778e275b3 external liks open in new tab 2024-08-06 22:29:51 +02:00
a62c8c3e16 new headline 2024-08-06 22:25:49 +02:00
dba42b25fb fix 2024-08-06 22:24:28 +02:00
0af479d6ae fix 2024-08-06 22:23:54 +02:00
fc9fa94c18 fix 2024-08-06 22:23:22 +02:00
29fed87c6b adding contact 2024-08-06 22:22:18 +02:00
87fce9e722 typos 2024-08-06 22:16:24 +02:00
61a21d91ad fixes 2024-08-06 21:48:14 +02:00
75a35c6a00 minor fixes before publishing 2024-08-06 21:22:01 +02:00
3cfcd81dd8 typos 2024-08-06 17:18:19 +02:00
a996f62d7f minor text corrections 2024-08-06 11:02:29 +02:00
30a9f7b424 corrections on text 2024-08-06 01:38:20 +02:00
d6164829c1 Kari's changes on the text 2024-08-06 01:26:20 +02:00
ed663866de adding archive content: reports 2024-08-06 01:16:53 +02:00
014ff82daa updates and adding 2024 content 2024-08-03 22:18:19 +02:00
6 changed files with 699 additions and 21 deletions

View file

@ -1,19 +1,19 @@
# fedi.camp_Website
Fedi.Camp Website 2024
Fedi.Camp Website
## Current work in progress
- Linking to ticket system
## Current appearance
- Currently, the website just shows archive content as the 2024 camp is over and the next years gathering isn't in the planning process yet.
## Timetable
The time table is not yet available
The time table needs to be adjusted to 2025 camp sessions and has only example contend as of now.
## Foto Section
The photo section is not part of the repo.
The photo section is not part of the repo. This part is managed by KABI Fancy Media and it's seperated from the public website's repo.
## License
### Adjustments and coding
CC_BY-NC-ND-4.0
https://creativecommons.org/licenses/by-nc-nd/4.0/
### Content
CC-BY-SA-4.0 https://creativecommons.org/licenses/by-sa/4.0/
CC-BY-SA-4.0 https://creativecommons.org/licenses/by-sa/4.0/

View file

@ -22,15 +22,16 @@
<!-- Header -->
<header id="header">
<div class="dropdown">
<!--LANGUAGE SELECTOR IS DISABLED - re-enable it when new camp is in planning process! -->
<!--<div class="dropdown">
<button class="dropbtn">Languages</button>
<div class="dropdown-content">
<a href="index.html">🇩🇪 Deutsch</a>
<!--<a href="index_fr.html">🇫🇷 Français</a>-->
<a href="index_fr.html">🇫🇷 Français</a>
<a href="index_en.html">🇺🇸 English</a>
</div>
</div>
</div>-->
<div class="content">
<div class="inner">
@ -41,17 +42,18 @@
<nav>
<ul>
<li><a href="#announce">Was?</a></li>
<li><a href="#date">Wann/wo?</a></li>
<li><a href="#rsvp">Anmeldung</a></li>
<li><a href="#campinfos">CampInfos</a></li>
<li><a href="#y2023">Archiv</a></li>
<!--<li><a href="#date">Wann/wo?</a></li>-->
<!--<li><a href="#rsvp">Anmeldung</a></li>-->
<!--<li><a href="#campinfos">CampInfos</a></li>-->
<li><a href="#2025">2025?</a></li>
<li><a href="#y2024">Berichte</a></li>
<!--<li><a href="">Online MeetUp</a></li>-->
<!--<li><a href="#contact">Kontakt</a></li>-->
<li><a href="#contact">Kontakt</a></li>
</ul>
</nav>
<!-- The secong line of bottons is for the camp details and onside information -->
<!-- The secong line of buttons is for the camp details and onside information -->
<!--<nav>
<a href="https://fedi.camp/lagerfeuer" class="button primary">zum Lagerfeuer</a>
<p style="color: rgb(106, 255, 0); font-weight: bold">Nächstes Online Meet-Up am Samstag, 06.04.24 um 21 Uhr.</p>
@ -65,13 +67,10 @@
<!-- Announcement -->
<article id="announce">
<h2 class="major">FediCamp 2024</h2>
<h3>Es ist wieder so weit. Das FediCamp geht in die dritte Runde!</h3>
<h2 class="major">FediCamp Konzept</h2>
<p>Nachdem wir in den Jahren 2022 und 2023 das sehr schöne, entspannte und interessante FediCamp durchgeführt haben, soll es dieses Jahr wieder so sein.</p>
<p>Das Fedicamp ist ein Treffen von Personen, die sich über das Fediverse kennengelernt haben.</p>
<p>Wir treffen uns gemeinsam und lernen Leute persönlich kennen, die wir über eine lange Zeit aus dem Fediversum kennen. Gleichzeitig halten wir gegenseitig Vorträge, sitzen am Lagerfeuer und haben eine gute Zeit zusammen. Die Veranstaltung ist Chaos-nah, jede:r gestaltet und wir machen daraus was uns allen gefällt. Gleichzeitig gelten die entsprechenden Regeln - be excellent to each other!</p>
<h2 class="image left"><img src="images/fedilogo.png" alt="Fedilogo" /></h2>
<p>Das Fediverse ist ein Konzept, das eine Vielzahl von dezentralen sozialen Netzwerken umfasst, die miteinander verbunden sind. Es basiert auf offenen Protokollen wie ActivityPub, die es verschiedenen Plattformen ermöglichen, miteinander zu kommunizieren. Nutzer können in diesem Netzwerk auf verschiedenen Plattformen wie Mastodon, PeerTube, Pixelfed und anderen interagieren, Inhalte teilen und sich vernetzen. Das Fediverse fördert die individuelle Kontrolle über Daten und den Schutz der Privatsphäre, da Benutzer die Freiheit haben, ihre eigenen Server zu betreiben oder Plattformen zu wählen, die ihren Bedürfnissen entsprechen. Es bietet eine alternative, nicht kommerzielle und demokratische Art der sozialen Vernetzung, bei der die Nutzer die Kontrolle über ihre Online-Identität behalten.</p>
<h3>Lernen und lachen, chillen und grillen.</h3>
@ -171,12 +170,93 @@
</article>
<!-- 2025-->
<article id="2025">
<h2 class="major">Gibt es ein FediCamp in 2025?</h2>
<h3>JA!</h3>
<p>Der Termin wird im Dezember festgelegt. Schaut gern hin und wieder auf der Website vorbei und kommt in den Matrix-Raum, um keine Informationen zu verpassen!</p>
</article>
<!-- ARCHIVE -->
<!--ARCHIVE 2024 -->
<article id="y2024">
<h2 class="major">So waren die Camps</h2>
<h1>Berichte aus 2024</h1>
<p><b>Berichte und Fotos des ersten FediCamp im Jahre 2022 findet Ihr <a href="#y2022">hier</a>.</b></p>
<p><b>Berichte und Fotos des zweiten FediCamp im Jahre 2023 findet Ihr <a href="#y2023">hier</a>.</b></p>
<p><a href="fc24-fotos/index.html" class="button">Fotos 2024</a></p>
<p>Du warst Teilnehmende oder Teilnehmer? Dann kannst Du die Bilder (und noch mehr) auch im Original und ohne Blurring bekommen. Schreibe dazu eine Mail oder teile das im Matrix-Raum mit!</p><br>
<h2>Das Camp 2024 - Bericht</h2>
<p>Hier seht ihr Berichte der Teilnehmenden.</p>
<h3>raspel</h3>
<p><a href="https://social.tchncs.de/@raspel">@raspel@social.tchncs.de</a></p>
<p>Auch dieses Jahr ging es wieder zum Fedicamp nach Gedelitz. Wir sind am Sonntag morgens losgefahren. Der Weg führte uns über Hitzacker, Dömitz, weiter an der Elbuferstrasse entlang.
In Dömitz gab es eine Festung zu sehen. Wieder auf der westlichen Seite der Elbe haben wir die Reste der alten Eisenbahnbrücke angeschaut. Diesen Teil des Wendland kannte ich nicht. Alles perfekt für ausgedehnte Rad an oder auf dem Deich der Elbe entlang. Nach einem kurzen Stop bei Bekannten in Gorleben, erreichten wir unser Ziel in Gartow.
Am Dienstag ging es nach Gedelitz. Lampen, Strom, Internet und all dieses Gedöns was für ein Gelingen erforderlich ist, wurde verlegt und aufgebaut. Erste Besucher kamen schon am Vortag. Das Wetter machte uns einen Strich durch die Rechnung. Es gab Gewitter und Starkregen. Die Wiese konnte das Wasser so schnell nicht aufnehmen. Zwei Anreisende hatten unterwegs Probleme mit ihren Rädern... Alles löste sich in Wohlgefallen auf. Für alle und mit allen wurde gekocht und gegesssen. Abends gab es viele Gespräche am Lagerfeuer.
Die Tage vergehen wie im Flug... Leute kommen, Leute gehen, es gibt Vorträge und Exkursionen. Zuviele Begnungen, zuviele Ereignisse, ich kann sie gar nicht im Einzelnen wiedergeben. Es waren ungefähr 60 Erwachsene und sieben Kinder auf dem Camp. Manche waren die ganze Zeit dort, andere waren ein paar Tage dort, andere kamen nur für eine kurze Stippvisite vorbei. Alles in Allem einfach grandios wie so unterschiedliche Menschen so gut miteinander umgegangen sind, ohne Zank und Ärger. So etwas erlebt man selten.
Schnell ist die Zeit auf der Wiese in Gedelitz vorbei. Es ist wieder Sonntag. Alle bauen ihre Zelte ab. Die Leute von der Orga bauen die Infrastruktur zurück. Die Küche, der Saal, die sanitären Anlagen müssen gereinigt werden.
Es war einfach wunderbar! Bis zum nächsten Jahr!</p>
<h3>ÜckÜck & Flo</h3>
<p><a target="_blank" href="https://dresden.network/@ueckueck">@ueckueck@dresden.network</a> und <a target="_blank" href="https://dresden.network/@zwecki">@zwecki@dresden.network</a></p>
<p>Hort hier beim Podcast rein, Ihr könnt auch gleich zu Kapitel 8 springen.</p>
<p><a target="_blank" href="https://podcasts.homes/@rebootpolitics/episodes/im-mittelalter-warst-du-tot/chapters">Chapter 8 des Podcasts.</a></p>
<h3>Sandfrog</h3>
<p><a target="_blank" href="https://mastodon.social/@sandfrogy">@sandfrog@mastodon.social</a></p>
<p>Kennt ihr diese Schnapsideen, die man hin und wieder hat, nur halt ohne Schnaps? Nach meinem abgebrochenen Ostsee-Urlaub, hab ich überlegt, was ich denn als Alternative machen könnte, bis mir mal wieder das FediCamp durch die TL scrollte. Preise angeschaut, war recht erträglich (für mich), Tages-Tickets ~15€, also zwei gebucht. Vorweg geschaut, wie weit es ist von mir aus ~140km, kurz überlegt, was meine Fortbewegungsmittel sind, und mich für das Rad entschieden.<br<><br>
Ja, ich weiß, völlig bekloppt, aber das ist genau mein Ding. Der Plan war, zwei Tage hin, zwei Tage da und zwei Tage zurück. Naja, bis der Ehrgeiz und die Zielfixierung einsetzte. Also morgens kurz noch eingekauft und dann gegen 12:00 los. Wetter war sehr schwül und einfach kein Radwetter. 12 Stunden später, einige Ladestops und Essenspausen später, Mist, Akku alle ~10km vor dem Ziel. Es gab noch die Möglichkeit der Notladung über die mitgeführten Powerbank. Ohne Akku und mit ~30kg im Anhänger war das Fahren fast unmöglich, vor allem nach 130km Weg war einfach keine Kraft mehr da. Also kurz in den Matrix-Chat geschrieben, dass es wohl deutlich später wird, war ja schon 0:00 durch. Kurze Zeit später die Meldung: Auto ist auf dem Weg zu dir.<br><br>
Das Camp fing also schon super an. Schnell alles ins Auto gepackt und mich die letzten 10km fahren lassen. Dort angekommen, alle sehr freundlich und hilfsbereit, schnell das Tarp aufgebaut und eingerichtet, viel ging dann auch nicht mehr. Am nächsten Tag bin ich dann in die doch recht große Gruppe aufgenommen worden, hatte da so meine Bedenken vorher, aber das familiäre Klima machte es für mich sehr einfach, und bin direkt gefragt worden, ob ich nicht länger bleiben möchte. Das tat ich dann auch. Aus zwei Tagen wurden die fast komplette Zeit, bis Sa. Abend, den ich für die Rückfahrt genommen habe wegen der 30°C am So.<br><br>
Bei den Temperaturen wollte ich einfach nicht fahren. Es war einfach ein tolles Erlebnis, mit vielen Gesprächen, durchweg netten Menschys, einigen Workshops, viel gutem Essen und einigen Dingen, die ich für mich mitnehme, die mir meine Probleme und Einschränkungen mal wieder deutlich gezeigt haben, aber das hat, glaube ich, keiner mitbekommen. Bin halt nach außen eher der ruhige Typ (glaub ich). Eins steht fest, ich komme wieder. Einfach nur mal ein kurzer Abriss zum FediCamp, das Elend auf der Rückfahrt spare ich euch mal :D</p>
<h3>Tobi</h3>
<p><a target="_blank" href="https://dz.social/@tobi">@tobi@dz.social</a> and <a target="_blank" href="https://kabi.tk">KABI Fancy Media and Communication</a></p>
<p>As a part of the organizing team, I believe the 2024 camp was once again, a resounding success, just like in previous years. We successfully brought together people from various locations and countries, all united under one roof, the sky of the earth. For a few days, participants of all ages — from 4 to 74 — shared an off-time holiday-like setting. Coming from different cities and holding diverse points of views, everyone was united by a shared commitment to open software, personal freedom, environmental care, antifascism, and striving to be good people, caring for one another by sharing, exchanging and learning from everybody.<br><br>
Fedi.Camp is what people make of it. This year, we had fewer workshops and presentations, allowing more time for relaxation and holiday activities. Of course, there were still talks and discussions about several software projects connected by ActivityPub, soldering and building blinky devices, pen-and-paper sessions, cross-golf, and video presentations.<br><br>
In the evenings, the warming bonfire was a highlight, where we relaxed, played music and sang songs together while kids roasted marshmallows and enjoyed building glowing flourescent rings, glasses and other objects. This again created a soothing and communal atmosphere.<br><br>
We were once more reminded of the environmental impact of nuclear power usage during our tour of the nearby atomic storage facility. This sobering experience highlighted the catastrophic nature of running nuclear power plants and producing waste that requires maintenance for 10,000 years and beyond.<br><br>
Strolling through the forest, engaging in tech talks, and relaxing in the sun made this year's Fedi.Camp truly charming. The unique combination of activities and wonderful participants created an unforgettable experience.<br>
</p>
<h4>Insight on network infrastructure</h4>
<p>At 'KABI Fancy Media and Communication,' we once again, built the camp's network infrastructure. Given the lack of reliable mobile coverage and inadequate common landline infrastructure, there is typically no usable internet connection at the camp site.<br><br>
So, we stepped in to ensure connectivity for all. We utilized a combination of Starlink and Vodafone 5G for data uplink. Despite a brief period of heavy rain when even the 5G connection dropped, the internet remained fast and reliably stable.<br><br>
All traffic was routed through our datacenter infrastructure for sanitizing incoming traffic and ensuring privacy. This connection was then distributed using Ubiquiti Cloud Gateway Ultra hardware to form the local network. We deployed a 10.0.0.x IP range net to support up to 512 devices, though we had about 78 concurrent users. Participants brought their cars, phones, laptops, smartwatches, etc. all may require a connection, so it was best to be prepared. The signal was transmitted through a POE (Power over Ethernet) switch and distributed to six Ubiquiti Nano HD access points with WiFi-roaming, providing seamless connectivity as people walked around the camp site. This setup involved approximately 450 meters of Cat6 cables, rain covers, countless cable ties and a few additional POE injectors for the farthest access points to reach a nearby full coverage of the whole camp site, houses and fireplace.<br><br>
In total, we facilitated about 790 gigabytes of internet traffic during the camp. It was fun building it and watching the traffic roar.</p>
</article>
<!-- ARCHIVE 2023 -->
<article id="y2023">
<h2 class="major">Archiv</h2>
<h1>Berichte aus 2023</h1>
<p><b>Berichte und Fotos des ersten FediCamp im Jahre 2022 findet Ihr <a href="#y2022">hier</a>.</b></p>
<p><b>Berichte und Fotos des dritten FediCamp im Jahre 2024 findet Ihr <a href="#y2024">hier</a>.</b></p>
<p><a href="fc23-fotos/index.html" class="button">Fotos 2023</a></p>
<p>Du warst Teilnehmende oder Teilnehmer? Dann kannst Du die Bilder (und noch mehr) auch im Original und ohne Blurring bekommen. Schreibe dazu eine Mail oder teile das im Matrix-Raum mit!</p><br>
<h2>Das Camp 2023 - Bericht</h2>
@ -214,6 +294,7 @@
<h2 class="major">Archiv</h2>
<h1>Berichte aus 2022</h1>
<p><b>Berichte und Fotos des zweiten FediCamp im Jahre 2023 findet Ihr <a href="#y2023">hier</a>.</b></p>
<p><b>Berichte und Fotos des dritten FediCamp im Jahre 2024 findet Ihr <a href="#y2024">hier</a>.</b></p>
<p><a href="fc22-fotos/index.html" class="button">Fotos 2022</a></p>
<h2>Das Camp 2022 - Bericht</h2>
@ -269,6 +350,14 @@
<li>Packpapierverlag: Herrmann vom Packpapierverlag hat in einer spontanen Aktion einen Stand aufgebaut, an dem anarchistische/linke/alternative/öko-fixierte Bücher, Buttons, Aufnäher, Sticker etc. verkauft wurden. Und da das Fedicamp keine sonderlichen definierten "Aufnahmebedingungen" hatte, wurde Herrmann auch direkt in die Gruppe aufgenommen, hörte bei Vorträgen mit, beteiligte sich am Kaffeekonsum... und so weiter und so fort. https://packpapierverlag.de</li></p>
</article>
<!-- Contact -->
<article id="contact">
<h2 class="major">Kontakt</h2>
<p>Hier findet Ihr aktuelle Informationen. Kommt auch gern in den Matrix Raum!</p>
<!--<p><a href="#showmetheway" class="button">Anfahrt</a></p>-->
<a href="https://matrix.to/#/#fedicamp:hyteck.de" class="button">Matrix-Raum</a><br><br><br>
</article>
<!-- Camp Infos -->
<article id="campinfos">
<h2 class="major">Camp Infos</h2>
@ -377,6 +466,7 @@
<a rel="me" href="https://social.tchncs.de/@lady_amalthea"></a>
<a rel="me" href="https://suma-ev.social/@christian"></a>
<a rel="me" href="https://mastodon.xyz/@Profpatsch"></a>
<a rel="me" href="https://fedifreu.de/@chpietsch"></a>
</body>
</html>

247
timetable/eventData.js Normal file
View file

@ -0,0 +1,247 @@
/*
This is the only file to be modified for adding your session at FediCamp.
Please follow the file structure as given in this example and commit your changes to the repo.
That's it!
If you have any questions, ask in the Matrix-Room or ask Tobi.
If you aren't sure what to do, ask someone to help!
You also can put the date & description about your session in the pad (Link in Matrix room).
It will be merged, but maybe not in time.
As locations, please only use the following:
'Camp ground', 'Fire place', 'Lunch table', 'Stage room', 'Mobile'
As start time please only use the following numbers:
10, 12, 14, 16, 18, 20
As days please only use the following days:
'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'
*/
const eventData = {
Wednesday: {
12: {
'Lunch table': {
event: 'Breakfast',
description: 'All-day breakfast',
},
/* other events */
},
14: {
'Camp ground': {
event: 'Microblog und Permacomputing',
description: 'Microblog und Permacomputing - Sustainability (CO2 etc.) - Überlegungen zu verschiedenen (ActivityPub) Ansätzen. Was ist mit dem Jonasschen Prinzip Verantwortung überhaupt drin? Ansprechperson für die Session ist @mro@digitalcourage.social',
},
/* other events */
},
18: {
'Camp ground': {
event: 'Diskussionsrunde Schnittstellen',
description: 'Diskussionsrunde zu offenen Schnittstellen und wie wir das Fediverse resilient gegen Großkonzerne machen. Ansprechperson für die Session ist @reticuleena@digitalcourage.social.',
},
'Lunch table': {
event: 'Foodbar',
description: 'Abendessen und Snacks. Planung findet am Veranstaltungstag statt.',
},
/* other events */
},
20: {
'Fire place': {
event: 'Bonfire',
description: 'Sit-in and talks around the fire.',
},
},
},
Thursday: {
10: {
'Lunch table': {
event: 'Breakfast & Coffee',
description: 'Join us for a fresh morning coffee & snacks.',
},
/* other events */
},
12: {
'Camp ground': {
event: 'Fediverse Charta II',
description: 'Workshop: Wir schreiben einen Entwurf einer „Fediverse-Charta“. Ansprechperson für die Session ist @reticuleena@digitalcourage.social.',
},
},
14: {
'Stage room': {
event: 'Moderationstreffen (FMT)',
description: 'Allgemeines Moderationstreffen mit den Initiatoren des etablierten turnusmäßigen Treffen der Moderator-/innen. Ansprechperson für die Session ist @w4ts0n@nerdculture.de.',
},
},
16: {
'Lunch table': {
event: 'Pen and Paper mit Tealk',
description:
'Zur Auswahl stehen Aborea, Cyberpunk RED, Durance und Warhammer 40k Wrath & Glory. Die Delux edition ist noch unangetastet. Empfohlene Spielerzahl: 3 bis 6 Spielende. Außerdem wir das allseits beliebte Muchkin dabei sein. Ansprechperson für diese Session ist @Tealk@rollenspiel.social.',
},
'Camp ground': {
event: 'Fck Uber',
description:
'So können wir mit dezentralen Netzwerken den großen Konzernen Marktanteile wegnehmen bei Branchen, die stark lokal ausgerichtet sind. Ansprechperson ist @clemensg@digitalcourage.social.',
},
'Mobile': {
event: 'Schweißworkshops',
description: 'Einführung ins Schweißen von @willHelm@links.potsda.mn. Maximal 2 Personen.',
},
},
18: {
'Camp ground': {
event: 'Erotik und nun?',
description: 'Diskussionsrunde: Erotik-Content im Fediverse. Und nun? Ansprechpartner für diese Sessionn ist Digitalcourage.',
/* other events */
},
},
20: {
'Camp ground': {
event: '300.000 Jahre Homo Sapiens ...',
description: '... 50.000 Jahre Sprache, 10.000 Jahre Sesshaftigkeit, 2.500 Jahre Literatur, 500 Jahre Buchdruck, 25 Jahre Web - welche Anfängerfehler passieren uns gerade. Ansprechperson für diese Session ist @mro@digitalcourage.social',
},
},
/* other times */
},
Friday: {
10: {
'Camp ground': {
event: 'Dinge selber machen',
description:'Dinge trotzdem selber machen (oder: Konsum oder Agency?). Vielleicht finden wir ja einen schönen Begriff statt >Agency<. Mit einem Ausflug zu Ivan Illich und den 📖 Tools for Convivality. Ansprechperson für diese Session ist @mro@digitalcourage.social',
},
'Lunch table': {
event: 'Breakfast & Coffee',
description: 'Join us for a fresh morning coffee & snacks.',
},
},
12: {
'Camp ground': {
event: 'Was ist möglich im Fediverse',
description: 'Über die Spezifikationen des ActivityPub-Protokolls. Einführung an drei konkreten Beispielen mit Spielkarten. Ansprechperson ist @sl007@digitalcourage.social.',
},
/* other events */
},
14: {
'Stage room': {
event: 'Gesund Kommerzialisieren',
description: 'Workshop: Gesund kommerzialisieren: nachhaltige Finanzierungskonzepte entwickeln, Billing automatisieren. Ansprechperson für die Session ist @reticuleena@digitalcourage.social.',
},
'Lunch table': {
event: 'Pen and Paper: Mausritter',
description:
'Dieses Mal ein fertiges Abenteuer, dass es zu den GRT gab. ACHTUNG: Es können nicht so viele Mäuse mitspielen! Thema: Ritterliche Abenteuer mit kleinen Mäusen; Dauer 3-4 Stunden. Ansprechperson für diese Session ist @ueckueck@dresden.network.',
},
/* other events */
},
16: {
'Stage room': {
event: 'Talk: Werbetracking erkennen',
description:
'Matthias Eberl zeigt, wie man mit der Netzwerkanalyse des Browsers nach Trackingeinbettungen suchen kann, wie man sie identifiziert und mit welchen Rechtsgrundlagen man dann mit meinem Beschwerdegenerator "Tracktor" dagegen vorgehen kann. Außerdem wird eine einfache Methode gezeigt, um Apps auf verdächtige Verbindungen zu prüfen. Ansprechperson für diese Session ist @rufposten@social.tchncs.de.',
},
'Lunch table': {
event: 'Ownhome',
description:
'Ansprechperson für diese Session ist Clemens',
},
/* other events */
},
18: {
'Camp ground': {
event: 'Fedimins Serverabkommen',
description:
'Workshop: Im Anschluss an den "Fediverse Charta" Workshop reden wir über das Serverabkommen von Fedimins, betrachten den aktuellen Stand und reden darüber. Ansprechperson für die Session ist @tealk@rollenspiel.social.',
},
/* other events */
},
20: {
'Fire place': {
event: 'Bonfire',
description: 'Sit-in and talks around the fire.',
},
'Lunch table': {
event: 'Tidying up',
description: 'Tidying up the kitchen and preparing for the next day.',
},
/* other events */
},
/* other times */
},
Saturday: {
12: {
'Stage room': {
event: 'Workshop Algorithmus',
description:
'Workshop: Der "wichtiges"-Algorithmus fehlt manchen. Wie ließe sich das gesellschaftsverträglich umsetzen? Ansprechperson für die Session ist @reticuleena@digitalcourage.social.',
},
/* other events */
},
14:{
'Mobile': {
event: 'Schweißworkshops',
description: 'Einführung ins Schweißen von @willHelm@links.potsda.mn. Maximal 2 Personen',
},
'Stage room': {
event: 'Flohmarkt',
description:
'Föderierte kleinanzeigen. Ansprechperson: @grindhold@chaos.social',
},
},
16: {
'Camp ground': {
event: 'Lötworkshop',
description:
'Lernt löten. @hilde@dz.social wird durch den Workshop führen und Euch zeigen, wie das alles funktioniert. Lötkolben und weiteres benötigtes Werkzeug wird zur Verfügung gestellt.',
},
/* other events */
},
18: {
'Camp ground': {
event: 'Zu große Instanzen',
description: 'Diskusstionsrunde zum Thema große und zu große Instanzen.',
},
'Lunch table': {
event: 'Preparing BBQ',
description: 'Preparing BBQ & dinner.',
},
/* other events */
},
20: {
'Fire place': {
event: 'Bonfire',
description: 'Sit-in and talks around the fire.',
},
'Lunch table': {
event: 'Tidying up',
description: 'Tidying up the kitchen and preparing for the next day.',
},
/* other events */
},
/* other times */
},
Sunday: {
12: {
'Camp ground': {
event: 'Tearing down',
description: 'Clearing up the camp grounds.',
},
/* other events */
},
14: {
'Lunch table': {
event: 'Coffee',
description: "Let's have a last coffee before traveling home again.",
},
/* other events */
},
/* other times */
},
/* other days */
};

37
timetable/index.html Normal file
View file

@ -0,0 +1,37 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Event Timetable</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div id="landscape-message">
<br><br>
<h1>FediCamp 2024 TimeTable</h1>
<img src="https://fedi.camp/images/fedicamp-logo2024.png" alt="FediCamp Logo" id="logo" />
<h2>Please Rotate Your Device</h2>
<p>For the best viewing experience, please switch to landscape mode.</p>
</div>
<div id="timetable">
<h1 id="headline">FediCamp 2024</h1>
<h2 id="subheadline">Time Table</h2>
<div id="slider-container">
<input type="range" min="0" max="4" value="0" id="slider" />
<div id="slider-day"></div>
<p id="slider-text">Slide to view other days</p>
</div>
<div id="tables-container"></div>
</div>
<div id="overlay"></div>
<script src="eventData.js"></script>
<script src="scripts.js"></script>
</body>
</html>

97
timetable/scripts.js Normal file
View file

@ -0,0 +1,97 @@
/*KABI Fancy Media and Communication */
const locations = ['Camp ground', 'Fire place', 'Lunch table', 'Stage room', 'Mobile'];
const days = ['Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
function generateDayTable(day, events) {
let table = `<table id="${day}" class="day-table"><tr><th>Time</th>`;
for (let location of locations) {
table += `<th>${location}</th>`;
}
table += '</tr>';
for (let hour = 10; hour <= 20; hour += 2) {
table += '<tr><td>' + (hour < 10 ? '0' + hour : hour) + ':00' + '</td>';
for (let location of locations) {
// Check if there is an event at this location and time
let event = events[day] && events[day][hour] && events[day][hour][location] ? events[day][hour][location] : '';
table += '<td>';
if (event) {
table += `<button class="event-button" data-day="${day}" data-hour="${hour}" data-location="${location}">${event.event}</button>`;
}
table += '</td>';
}
table += '</tr>';
}
table += '</table>';
return table;
}
// Doing the overlay shit
function showDescription(day, hour, location) {
let event = eventData[day][hour][location];
let description = event.description;
let overlay = document.getElementById('overlay');
overlay.style.display = 'block';
let content = document.createElement('div');
content.id = 'overlay-content';
let descriptionElement = document.createElement('p');
descriptionElement.innerText = description;
let closeButton = document.createElement('button');
closeButton.innerText = 'Close';
closeButton.addEventListener('click', hideOverlay);
content.appendChild(descriptionElement);
content.appendChild(closeButton);
overlay.appendChild(content);
}
function hideOverlay() {
let overlay = document.getElementById('overlay');
overlay.style.display = 'none';
overlay.innerHTML = '';
}
document.addEventListener('DOMContentLoaded', (event) => {
let tablesContainer = document.getElementById('tables-container');
for (let day of days) {
tablesContainer.innerHTML += generateDayTable(day, eventData);
}
let slider = document.getElementById('slider');
let sliderDay = document.getElementById('slider-day');
slider.addEventListener('input', (event) => {
for (let day of days) {
document.getElementById(day).style.display = 'none';
}
document.getElementById(days[event.target.value]).style.display = 'table';
sliderDay.innerText = days[event.target.value];
});
tablesContainer.addEventListener('click', (event) => {
if (event.target.matches('.event-button')) {
let day = event.target.getAttribute('data-day');
let hour = event.target.getAttribute('data-hour');
let location = event.target.getAttribute('data-location');
showDescription(day, hour, location);
}
});
// show the first table initially
slider.dispatchEvent(new Event('input'));
});

207
timetable/styles.css Normal file
View file

@ -0,0 +1,207 @@
body {
background-color: #F6F6F6;
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
}
#landscape-message {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
text-align: center;
}
#logo {
max-width: 100%;
height: auto;
margin-bottom: 20px;
}
#landscape-message h1 {
margin-top: 0;
}
#landscape-message p {
margin: 10px 0;
}
#timetable {
display: none;
}
@media (orientation: landscape) {
#landscape-message {
display: none;
}
#timetable {
display: block;
}
}
@media (max-height: 600px) {
#headline {
margin-top: 40px;
}
}
@media (max-height: 400px) {
#headline {
margin-top: 20px;
}
}
#timetable {
width: 90%;
margin: 0 auto;
}
#headline,
#subheadline {
text-align: center;
color: #444;
margin-top: 40px;
}
#slider-container {
width: 60%;
margin: 20px auto;
text-align: center;
position: relative;
height: 50px;
}
#slider-text {
color: #444;
font-size: 0.8em;
}
#slider {
display: block;
width: 100%;
margin: 20px 0;
appearance: none;
background: #D3D3D3;
outline: none;
height: 30px;
border-radius: 20px;
}
#slider::-webkit-slider-thumb {
appearance: none;
width: 30px;
height: 30px;
background: #0066CC;
cursor: pointer;
border-radius: 50%;
}
#slider-day {
position: absolute;
width: 100%;
height: 50px;
top: 0;
left: 0;
background: transparent;
color: #000;
display: flex;
justify-content: center;
align-items: center;
transition: none;
pointer-events: none;
font-size: 1.2em;
margin-top: -7px;
}
.day-table {
width: 100%;
border-collapse: collapse;
display: none;
margin-bottom: 20px;
table-layout: fixed;
}
.day-table th,
.day-table td {
border: 1px solid #FFFFFF;
padding: 10px;
text-align: center;
background-color: #ADD8E6;
height: 60px;
word-break: break-word;
width: 20%;
}
.day-table th {
background-color: #ddd;
color: #444;
text-transform: uppercase;
}
.event-button {
background: none;
color: inherit;
border: none;
padding: 0;
font: inherit;
cursor: pointer;
outline: inherit;
}
#overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: none;
z-index: 999;
}
#overlay-content {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: #fff;
padding: 20px;
border-radius: 5px;
text-align: center;
}
#overlay-content p {
margin-bottom: 10px;
}
#overlay-content button {
padding: 10px 20px;
background-color: #0066CC;
color: #fff;
border: none;
border-radius: 5px;
cursor: pointer;
}
@media (max-width: 600px) {
#slider-container {
width: 90%;
}
.day-table,
.day-table th,
.day-table td {
font-size: 0.8em;
}
.day-table td {
height: auto;
}
}