Compare commits

..
32 changed files with 310 additions and 476 deletions

View file

@ -9,6 +9,11 @@ charset = utf-8
end_of_line = lf end_of_line = lf
insert_final_newline = true insert_final_newline = true
[*.{js,yaml}] [*.py]
indent_style = space
indent_size = 4
[*.yaml]
indent_style = space indent_style = space
indent_size = 2 indent_size = 2

View file

@ -1,9 +1,6 @@
name: deploy blog name: deploy blog
on: on:
workflow_dispatch: workflow_dispatch:
schedule:
- cron: '0 10 * * *' # daily at 10:00
push: push:
branches: branches:
- staging - staging
@ -11,44 +8,46 @@ on:
jobs: jobs:
deploy: deploy:
runs-on: alpine-latest runs-on: ubuntu-latest
steps: steps:
- name: Install dependencies - name: Install dependencies
run: apk --no-cache add hugo git openssh-client rsync run: apk --no-cache add hugo python3 py3-pip git openssh-client rsync
- name: Check versions - name: Check versions
run: | run: |
cat /etc/os-release cat /etc/os-release
git version git version
hugo version hugo version
rsync --version python --version
ssh -V
- name: Set envionment vars
run: echo "GIT_BRANCH=${{ forgejo.event_name == 'schedule' && 'production' || forgejo.ref_name }}" >> "$FORGEJO_ENV"
- name: Checkout repository - name: Checkout repository
run: | run: |
git clone -b $GIT_BRANCH --recursive https://git.berlin.ccc.de/cccb-website-team/www.git . git clone -b ${{ forgejo.ref_name }} --recursive https://git.berlin.ccc.de/cccb-website-team/www.git .
git status git status
- name: Install Python depenndencies
run: python -m pip install -r requirements.txt --break-system-packages
- name: Render site - name: Render site
run: ./build.sh run: ./build.sh
- name: Setup SSH - name: Setup SSH
env:
SSH_PRIVATE_KEY: ${{ forgejo.ref_name == 'production' && secrets.SSH_PRIVATE_KEY_PRODUCTION || secrets.SSH_PRIVATE_KEY_STAGING }}
run: | run: |
mkdir -p ~/.ssh mkdir -p ~/.ssh
printf "%s" "${{ secrets.KNOWN_HOSTS }}" | base64 -d > ~/.ssh/known_hosts printf "%s" "${{ secrets.KNOWN_HOSTS }}" | base64 -d > ~/.ssh/known_hosts
printf "%s" "${{ env.GIT_BRANCH == 'production' && secrets.SSH_PRIVATE_KEY_PRODUCTION || secrets.SSH_PRIVATE_KEY_STAGING }}" | base64 -d > ~/.ssh/id_ed25519 printf "%s" "$SSH_PRIVATE_KEY" | base64 -d > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519
ssh-keygen -f ~/.ssh/id_ed25519 -y > ~/.ssh/id_ed25519.pub ssh-keygen -f ~/.ssh/id_ed25519 -y > ~/.ssh/id_ed25519.pub
cat ~/.ssh/id_ed25519.pub cat ~/.ssh/id_ed25519.pub
- name: Rsync rendered site - name: Rsync rendered site
env:
DEPLOY_DIR: ${{ forgejo.ref_name == 'production' && '/srv/http/www/' || '/srv/http/www-staging/' }}
# TODO: add --delete # TODO: add --delete
run: rsync -var -e 'ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=yes' ./public/ deploy@www.berlin.ccc.de:${{ env.GIT_BRANCH == 'production' && '/srv/http/www/' || '/srv/http/www-staging/' }} run: rsync -var -e 'ssh -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=yes' ./public/ deploy@www.berlin.ccc.de:$DEPLOY_DIR
- name: Cleanup - name: Cleanup
if: ${{ always() }} if: ${{ always() }}
run: rm -rf ~/.ssh run: rm -rf ~/.ssh

1
.gitattributes vendored Normal file
View file

@ -0,0 +1 @@
*.ics text eol=crlf

133
.gitignore vendored
View file

@ -1,9 +1,8 @@
# Created by https://www.toptal.com/developers/gitignore/api/windows,linux,macos,hugo,pycharm+all,vim,direnv static/all.ics
# Edit at https://www.toptal.com/developers/gitignore?templates=windows,linux,macos,hugo,pycharm+all,vim,direnv
### direnv ###
.direnv
.envrc .envrc
*.swp
# Created by https://www.toptal.com/developers/gitignore/api/windows,linux,macos,hugo
# Edit at https://www.toptal.com/developers/gitignore?templates=windows,linux,macos,hugo
### Hugo ### ### Hugo ###
# Generated files by hugo # Generated files by hugo
@ -44,6 +43,7 @@ hugo.linux
# Icon must end with two \r # Icon must end with two \r
Icon Icon
# Thumbnails # Thumbnails
._* ._*
@ -67,114 +67,6 @@ Temporary Items
# iCloud generated files # iCloud generated files
*.icloud *.icloud
### PyCharm+all ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# AWS User-specific
.idea/**/aws.xml
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# SonarLint plugin
.idea/sonarlint/
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
### PyCharm+all Patch ###
# Ignore everything but code style settings and run configurations
# that are supposed to be shared within teams.
.idea/*
!.idea/codeStyles
!.idea/runConfigurations
### Vim ###
# Swap
[._]*.s[a-v][a-z]
!*.svg # comment out if you don't need vector files
[._]*.sw[a-p]
[._]s[a-rt-v][a-z]
[._]ss[a-gi-z]
[._]sw[a-p]
# Session
Session.vim
Sessionx.vim
# Temporary
.netrwhist
# Auto-generated tag files
tags
# Persistent undo
[._]*.un~
### Windows ### ### Windows ###
# Windows thumbnail cache files # Windows thumbnail cache files
Thumbs.db Thumbs.db
@ -201,4 +93,17 @@ $RECYCLE.BIN/
# Windows shortcuts # Windows shortcuts
*.lnk *.lnk
# End of https://www.toptal.com/developers/gitignore/api/windows,linux,macos,hugo,pycharm+all,vim,direnv # End of https://www.toptal.com/developers/gitignore/api/windows,linux,macos,hugo
# NixOS:
.envrc
shell.nix
.direnv
# Python
.venv
# murmeldin
overview.md
/result

1
.python-version Normal file
View file

@ -0,0 +1 @@
3.11

View file

@ -27,20 +27,10 @@ This is the website of the CCCB.
5. Point your browser to: <http://localhost:1313/> 5. Point your browser to: <http://localhost:1313/>
Every change you make on the project will be reflected in your browser as long as `hugo serve` is running. To ready your site for upload, run `./build.sh`, which also generates `all.ics`
and adds the calendar table to `index.html`.
The *"Nächste Veranstaltungen"* table on the home page is generated by post-processing in `./build.sh`, not by Hugo, so Every change you make on the project will be reflected in your browser
it is **not** visible under `hugo serve`. To preview the fully built site (including the home-page calendar), or to as long as `hugo serve` is running.
ready the site for upload, run:
```shell
./build.sh
python3 -m http.server -d public 1313
```
`build.sh` replaces the `CALENDAR` placeholder in `index.html` with the upcoming-events table. It depends on Python
with the `icalendar`, `python-dateutil`, and `pytz` packages, plus a `de_DE.UTF-8` locale (used to format weekday
names). Inside `nix develop` these are provided automatically.
To build with *nix*: `nix build '.?submodules=1#production-content'` To build with *nix*: `nix build '.?submodules=1#production-content'`
@ -51,8 +41,7 @@ To build with *nix*: `nix build '.?submodules=1#production-content'`
3. Commit (and push) your change. 3. Commit (and push) your change.
4. ~~GitHub Actions is running the release workflow.~~ 4. ~~GitHub Actions is running the release workflow.~~
- If successful, check [Staging Website](https://staging.berlin.ccc.de/) if change is correct. - If successful, check [Staging Website](https://staging.berlin.ccc.de/) if change is correct.
5. Create a merge request to merge changes from `staging` to `production` branch. Ask somebody to check merge request or 5. Create merge request to merge changes from `staging` to `production` branch. Ask somebody to check merge request or if small change, merge yourself.
if small change, merge yourself.
6. ~~GitHub Actions is running the release workflow.~~ 6. ~~GitHub Actions is running the release workflow.~~
- If successfull, check [Website](https://berlin.ccc.de/) if change is correct. - If successfull, check [Website](https://berlin.ccc.de/) if change is correct.
7. Profit! 7. Profit!
@ -61,12 +50,9 @@ To build with *nix*: `nix build '.?submodules=1#production-content'`
- After entering the shell with `nix develop`, hugo is available and `hugo serve` should work - After entering the shell with `nix develop`, hugo is available and `hugo serve` should work
- Python including required packages will be available, so the `build.sh` should work without a venv - Python including required packages will be available, so the `build.sh` should work without a venv
- You can build the staging and production builds with `nix build .#staging-content` and - You can build the staging and production builds with `nix build .#staging-content` and `nix build .#production-content`
`nix build .#production-content` - Do not update the nixpkgs branch - 25.05 contains a newer hugo version that is incompatible with the theme (last checked June 2025)
- Do not update the nixpkgs branch - 25.05 contains a newer hugo version that is incompatible with the theme (last
checked June 2025)
--- ---
Made with ❤️ and [Hugo](https://gohugo.io). Made with ❤️ and [Hugo](https://gohugo.io).

View file

@ -131,12 +131,6 @@ document.addEventListener('DOMContentLoaded', function() {
else if (rruleStr.includes("FREQ=MONTHLY") && rruleStr.includes("BYDAY")) { else if (rruleStr.includes("FREQ=MONTHLY") && rruleStr.includes("BYDAY")) {
const bydayMatch = rruleStr.match(/BYDAY=([^;]+)/); const bydayMatch = rruleStr.match(/BYDAY=([^;]+)/);
if (bydayMatch) { if (bydayMatch) {
const intervalMatch = rruleStr.match(/INTERVAL=(\d+)/);
const interval = intervalMatch ? parseInt(intervalMatch[1]) : 1;
const monthsFromStart = (year - startDate.getFullYear()) * 12 + (month - startDate.getMonth());
if (monthsFromStart < 0 || monthsFromStart % interval !== 0) {
return [];
}
const bydays = bydayMatch[1].split(','); const bydays = bydayMatch[1].split(',');
const dayMap = { const dayMap = {
'MO': 1, 'TU': 2, 'WE': 3, 'TH': 4, 'FR': 5, 'SA': 6, 'SU': 0 'MO': 1, 'TU': 2, 'WE': 3, 'TH': 4, 'FR': 5, 'SA': 6, 'SU': 0
@ -431,7 +425,7 @@ document.addEventListener('DOMContentLoaded', function() {
} }
// ICS-Datei abrufen und Events verarbeiten // ICS-Datei abrufen und Events verarbeiten
fetch('/calendars/all.ics') fetch('/all.ics')
.then(response => response.text()) .then(response => response.text())
.then(data => { .then(data => {
events = parseICS(data); events = parseICS(data);
@ -442,7 +436,9 @@ document.addEventListener('DOMContentLoaded', function() {
currentMonth = today.getMonth(); currentMonth = today.getMonth();
// Process events for current month // Process events for current month
updateEventsForMonth(currentYear, currentMonth); updateEventsForMonth(currentYear, currentMonth);
}) })
.catch(err => console.error('Fehler beim Laden der ICS-Datei:', err)); .catch(err => console.error('Fehler beim Laden der ICS-Datei:', err));
})(); })();

View file

@ -9,11 +9,11 @@ function timeDistanceDE(pastDate) {
const hours = Math.floor(minutes / 60) const hours = Math.floor(minutes / 60)
const days = Math.floor(hours / 24) const days = Math.floor(hours / 24)
if (days === 1) return `since ${days}d` if (days = 1) return `since ${days}d`
if (days > 1) return `since ${days}d` if (days > 1) return `since ${days}d`
if (hours === 1) return `since ${hours}h` if (hours = 1) return `since ${hours}h`
if (hours > 1) return `since ${hours}h` if (hours > 1) return `since ${hours}h`
if (minutes === 1) return `since ${minutes}min` if (minutes = 1) return `since ${minutes}min`
if (minutes > 1) return `since ${minutes}min` if (minutes > 1) return `since ${minutes}min`
return `gerade eben` return `gerade eben`
} }

View file

@ -1,7 +1,12 @@
#!/bin/sh #!/bin/sh
set -ex set -e
set -x
rm -rf public/ # delete old generated files rm -rf public/ # delete old generated files
hugo $(cat .hugo-params) hugo $(cat .hugo-params)
./tools/merge_cals.py
upcoming="$(tools/gen_upcoming.py static/all.ics 20 5 | tr '\n' ' ')"
cp static/all.ics public/all.ics
sed -i "s#CALENDAR#$upcoming#g" public/index.html

View file

@ -28,7 +28,7 @@ filename = "sitemap.xml"
priority = 0.5 priority = 0.5
[permalinks] [permalinks]
post = "/post/:year/:month/:day/:slug/" post = "/post/:year/:month/:day/:title/"
[outputs] [outputs]
home = ["html", "rss", "json"] home = ["html", "rss", "json"]

View file

@ -25,9 +25,6 @@ description: "Startseite CCCB mit Kurzkalender"
### Nächste Veranstaltungen ### Nächste Veranstaltungen
<table id="upcoming" class="table table-condensed"> CALENDAR
</table>
Weitere Termine findest du im [Veranstaltungskalender](/verein/calendar/). Weitere Termine findest du im [Veranstaltungskalender](/verein/calendar/).
<script type="module" src="/js/upcoming.js"></script>

View file

@ -1,15 +0,0 @@
---
title: "Kein DI.Day am 5. Juli im CCCB"
date: 2026-07-04T12:00:00+02:00
showHero: false
tags: ["di.day", "Ankündigung"]
---
**Kurzfristige Änderung:** Der [Digital Independence Day](/veranstaltungen/didit/) findet am **Sonntag, dem 5. Juli 2026, nicht** im Chaos Computer Club Berlin (Marienstraße 11) statt.
Wer trotzdem am DI.Day teilnehmen und den Weg in die digitale Unabhängigkeit weitergehen möchte, ist herzlich bei den anderen Berliner Veranstaltungen willkommen:
- [„Let's DID it!" mit Linux & Sommerfest der BELUG](https://f.termine.di.day/events/ee48fdda-a134-4f27-932e-b87c7a9fa24a) in der c-base
- [DI.Day im Stadtschloss Moabit](https://f.termine.di.day/events/41ab17fe-05ab-4308-9abb-d38d9485fd4f)
Weitere Termine und Orte findet ihr wie immer auf [termine.di.day](https://termine.di.day/).

View file

@ -1,57 +0,0 @@
---
title: "Aktionstag gegen Überwachung"
date: 2026-08-11T12:00:00+02:00
showHero: false
tags: ["Überwachung", "Ankündigung"]
---
### Was?
KI-gestützte Überwachungskameras sollen jetzt auch nach Berlin kommen.
Das [im Dezember 2025 verschärfte Berliner Polizeigesetz](https://www.beck-aktuell.de/heute-im-recht/rechtspolitik-gesetzgebung/berlin-verschaerfung-polizeigesetz-2025-12-04) erlaubt der Polizei, solche Kameras an öffentlichen Plätzen aufzuhängen. Erste Versuche laufen schon.
Darüber wollen wir reden.
Deshalb laden wir am 23. August zum Aktionstag gegen Überwachung in den Club ein.
### Worum geht es?
Die KI-Videoüberwachung soll [ein Jahr lang an sechs sogenannten „kriminalitätsbelasteten Orten" getestet werden](https://taz.de/KI-Videoueberwachung-in-Berlin/!6160851/), darunter am Alexanderplatz, am Roten Rathaus und am Alten Stadthaus. Vor dem Abgeordnetenhaus kommt mobile Technik dazu.
Diese Kameras zeichnen nicht nur auf. Sogenannte Verhaltensscanner sollen automatisch melden, wenn sich jemand „auffällig" verhält. Trainiert wird das Ganze [mit den Daten von Passant:innen, die einfach nur vorbeilaufen](https://netzpolitik.org/2026/ki-gestuetzte-videoueberwachung-in-berlin-so-wehrt-man-sich-gegen-verhaltensscanner/).
In Mannheim läuft so ein System seit 2018, in Hamburg seit 2023. Dort hält die Software [eine Umarmung schon mal für einen Ringkampf](https://taz.de/Kuenstliche-Intelligenz-im-Einsatz/!6099559/). In Mannheim gab es laut Polizei [jeden Tag Fehlalarme im „niedrigen zweistelligen Bereich"](https://netzpolitik.org/2023/intelligente-videoueberwachung-polizei-hamburg-will-ab-juli-verhalten-automatisch-scannen/). Wer sich hinlegt oder taumelt, löst Alarm aus. Was überhaupt als „auffällig" gilt, entscheidet der Algorithmus. Warum das [Menschen diskriminieren kann, erklärt der Verfassungsblog](https://verfassungsblog.de/berlin-asog-novelle-kbos/).
Die Kameras sind außerdem nur ein Teil der Gesetzesänderung. Das neue ASOG erlaubt auch [längere Datenspeicherung und weitere Überwachungsbefugnisse](https://www.telepolis.de/article/Berliner-Polizeigesetz-Koalition-weitet-Ueberwachung-aus-11083345.html). Die Berliner Datenschutzbeauftragte hat das kritisiert. Wir auch: Der CCC war dazu bereits im Innenausschuss des Abgeordnetenhauses.
Ihr braucht kein Vorwissen. Kommt einfach vorbei.
### Programm
**13:00 Uhr: Open Space** \
Wir fangen mit offenem Austausch an. Bringt eure Fragen mit, egal ob ihr euch schon lange mit dem Thema beschäftigt oder gerade zum ersten Mal davon hört.
**15:00 Uhr: Vortrag** \
Was in Berlin geplant ist, was die Technik wirklich kann und was das für uns alle heißt.
**16:00 Uhr: Podiumsdiskussion** \
Danach diskutieren wir auf dem Podium, wie wir uns gegen die KI-Videoüberwachung wehren können. Fragen aus dem Publikum sind ausdrücklich erwünscht.
### Wo?
📍 **Chaos Computer Club Berlin, Marienstraße 11, 10117 Berlin**
🚈 Etwa 5 Minuten ab dem S-Bahnhof Friedrichstraße
### Wann?
**📆 Sonntag, 23. August 2026** \
**ab 13:00 Uhr**
### Zum Weiterlesen
- taz: [KI-Videoüberwachung in Berlin: Verhaltensscanner bald auch vor dem Abgeordnetenhaus](https://taz.de/KI-Videoueberwachung-in-Berlin/!6160851/)
- netzpolitik.org: [So wehrt man sich gegen Verhaltensscanner](https://netzpolitik.org/2026/ki-gestuetzte-videoueberwachung-in-berlin-so-wehrt-man-sich-gegen-verhaltensscanner/) (mit Tools und Material für die Zivilgesellschaft)
- Verfassungsblog: [„Try harder hilft selten": die ASOG-Novelle verfassungsrechtlich eingeordnet](https://verfassungsblog.de/berlin-asog-novelle-kbos/)
- taz: [Reform des Berliner Polizeigesetzes: Riskantes Manöver](https://taz.de/Reform-des-Berliner-Polizeigesetzes/!6096087/)
- Telepolis: [Berliner Polizeigesetz: Koalition weitet Überwachung aus](https://www.telepolis.de/article/Berliner-Polizeigesetz-Koalition-weitet-Ueberwachung-aus-11083345.html)
- beck-aktuell: [Kameras und KI-Einsatz: Berlin verschärft Polizeigesetz](https://www.beck-aktuell.de/heute-im-recht/rechtspolitik-gesetzgebung/berlin-verschaerfung-polizeigesetz-2025-12-04)

View file

@ -1,6 +1,5 @@
--- ---
title: "Der Neujahresempfang 2026 #NJE26" title: "Der Neujahresempfang 2026 #NJE26"
slug: "neujahresempfang-2026"
date: 2026-03-05T12:00:00+01:00 date: 2026-03-05T12:00:00+01:00
showHero: false showHero: false
tags: ["NJE", "Ankündigung"] tags: ["NJE", "Ankündigung"]

View file

@ -1,23 +0,0 @@
---
title: "Aktionstag gegen Überwachung"
subtitle: "KI-Überwachungskameras in Berlin: Vortrag, Podium und Austausch"
date: 2026-08-11T12:00:00+02:00
dtstart: 20260823T130000
dtend: 20260823T180000
menu:
main:
parent: "Veranstaltungen"
tag: ["Veranstaltung"]
---
**Am 23. August lädt der Chaos Computer Club Berlin zum Aktionstag gegen Überwachung.**
KI-gestützte Überwachungskameras sollen jetzt auch nach Berlin kommen. Das neue Berliner Polizeigesetz erlaubt es, sie an öffentlichen Plätzen aufzuhängen. Erste Versuche laufen schon, Verhaltenstracking inklusive. Darüber wollen wir reden.
Das Programm:
- **13:00 Uhr:** Open Space, offener Austausch untereinander
- **15:00 Uhr:** Vortrag zu den KI-Kameras und dem neuen Berliner Polizeigesetz
- **16:00 Uhr:** Podiumsdiskussion
📍 Chaos Computer Club Berlin, Marienstraße 11, 10117 Berlin

View file

@ -26,7 +26,7 @@ draft: true
{{< alert "circle-info" >}} {{< alert "circle-info" >}}
Wenn ihr neu seid und den CCCB zum ersten Mal besuchen wollt, kommt am besten an einem Donnerstag zum [Club Discordia](/veranstaltungen/clubdiscordia/), da samstags nicht immer genug Leute da sind, um euch zu empfangen. Wenn ihr neu seid und den CCCB zum ersten Mal besuchen wollt, kommt am besten an einem Donnerstag zum [Club Discordia](/page/clubdiscordia/), da samstags nicht immer genug Leute da sind, um euch zu empfangen.
Generell sind aber alle, die schon mal im Club waren, herzlich eingeladen, an den Bastelabenden vorbeizukommen. Generell sind aber alle, die schonmal im Club waren, herzlich eingeladen, an den Bastelabenden vorbeizukommen.
{{< /alert >}} {{< /alert >}}

View file

@ -1,22 +0,0 @@
---
title: "Di.Day"
subtitle: "Digital Independence Day im CCCB"
date: 2026-01-04T12:23:00+01:00
dtstart: 20260104T122300
dtend: 20260104T174200
rrule: "FREQ=MONTHLY;INTERVAL=2;BYDAY=1SU;WKST=MO;UNTIL=20260503T235959Z"
menu:
main:
parent: "Veranstaltungen"
tag: ["Veranstaltung"]
---
In Berlin wird der [Digital Independence Day](https://diday.org) an verschiedenen Orten von einer breiten Zahl von Initiativen getragen.
Der CCCB beteiligt sich an dieser Graswurzelbewegung und ruft dazu auf, zu demokratiefreundlichen digitalen Alternativen zu wechseln, um die Abhängigkeit von großen Technologiekonzernen zu verringern.
Am ersten Sonntag im Monat gibt es praktische Hilfe beim Wechsel zu datenschutzfreundlichen Diensten, beim Einrichten von Linux oder beim Betrieb von Smartphones ohne große Tech-Konzerne. Egal, ob Anfänger:in oder Fortgeschrittene:r. Kommt vorbei und bringt eure Geräte und Fragen mit.
Die Aktiven im CCCB unterstützen dabei auf verschiedenen Veranstaltungen in Berlin.
Weitere Informationen zu konkreten Veranstaltungen gibt es im Terminkalender unter [https://events.diday.org/](https://events.diday.org/) bzw [https://events.diday.org/organisation/cccb](https://events.diday.org/organisation/cccb).

View file

@ -2,12 +2,13 @@
title: "Neujahresempfang" title: "Neujahresempfang"
subtitle: "#NJE 26" subtitle: "#NJE 26"
date: 2025-03-05T18:00:00+02:00 date: 2025-03-05T18:00:00+02:00
dtstart: 20260523T180000 dtstart: 20250523T180000
dtend: 20260524T100000 dtend: 20250524T100000
rrule: "FREQ=MOTHLY;BYDAY=4SA;WKST=MO"
menu: menu:
main: main:
parent: "Veranstaltungen" parent: "Veranstaltungen"
tag: ["Veranstaltung"] tag: ["Veranstaltung"]
--- ---
Am 23. Mai lädt der Chaos Computer Club Berlin zum Neujahresempfang. [Hier geht es zur Infoseite!](https://berlin.ccc.de/post/2026/03/05/neujahresempfang-2026/) Am 23. Mai lädt der Chaos Computer Club Berlin zum Neujahresempfang. [Hier geht es zur Infoseite!](https://berlin.ccc.de/post/2026/03/05/der-neujahresempfang-2026-%23nje26/)

View file

@ -2,9 +2,9 @@
title: "OpenWrt" title: "OpenWrt"
subtitle: "OpenWrt Stammtisch" subtitle: "OpenWrt Stammtisch"
date: 2025-01-08T20:00:00+02:00 date: 2025-01-08T20:00:00+02:00
dtstart: 20251119T200000 dtstart: 20250115T200000
dtend: 20251119T230000 dtend: 20250115T230000
rrule: "FREQ=MONTHLY;INTERVAL=3;BYDAY=3WE;WKST=MO" rrule: "FREQ=MONTHLY;BYDAY=3WE;WKST=MO"
menu: menu:
main: main:
parent: "Veranstaltungen" parent: "Veranstaltungen"
@ -13,7 +13,7 @@ tag: ["Veranstaltung"]
![Verschiedene Platinen im CCCB](/img/club/42300970272_667569d239.jpg) ![Verschiedene Platinen im CCCB](/img/club/42300970272_667569d239.jpg)
**Jeden 3. Mittwoch im Februar, Mai, August und November ab 20 Uhr** treffen sich die OpenWrt begeisterten und die es werden wollen zum OpenWrt Stammtisch im CCCB. **Jeden 3. Mittwoch im Monat ab 20 Uhr** treffen sich die OpenWrt begeisterten und die es werden wollen zum OpenWrt Stammtisch im CCCB.
Das OpenWrt Meetup richtet sich an alle die OpenWrt benutzen oder benutzen wollen aber auch Leute die an OpenWrt entwickeln. Das OpenWrt Meetup richtet sich an alle die OpenWrt benutzen oder benutzen wollen aber auch Leute die an OpenWrt entwickeln.

View file

@ -16,7 +16,7 @@ tag: ["Veranstaltung"]
**Jeden 2. und 4. Samstag im Monat ist ab 17 Uhr Spieleabend im Club.** **Jeden 2. und 4. Samstag im Monat ist ab 17 Uhr Spieleabend im Club.**
{{< alert "circle-info" >}} {{< alert "circle-info" >}}
Wenn ihr neu seid und den CCCB zum ersten Mal besuchen wollt, kommt am besten an einem Donnerstag zum [Club Discordia](/veranstaltungen/clubdiscordia/), da samstags nicht immer genug Leute da sind, um euch zu empfangen. Wenn ihr neu seid und den CCCB zum ersten Mal besuchen wollt, kommt am besten an einem Donnerstag zum [Club Discordia](/page/clubdiscordia/), da samstags nicht immer genug Leute da sind, um euch zu empfangen.
Generell sind aber alle, die schon mal im Club waren, herzlich eingeladen, an den Spieleabenden vorbeizukommen. Generell sind aber alle, die schonmal im Club waren, herzlich eingeladen, an den Spieleabenden vorbeizukommen.
{{< /alert >}} {{< /alert >}}

Some files were not shown because too many files have changed in this diff Show more