Primer día en la plaza
-Borrador
-Crónica de la primera jornada pendiente de aprobar en asamblea.
-Las fotos se suben limpias de metadatos: tools/limpia-img.sh.
diff --git a/README.md b/README.md index 80f62b1..7e4df7d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # acampada26s.net -Web de la acampada del 26S en Madrid. Comunicados, directo y cómo organizarse. +Web de la acampada del 26S en Madrid. Comunicados, directo, cómo organizarse +y dónde están los colectivos. HTML y CSS. Sin JavaScript en el navegador, sin cookies, sin analítica y sin peticiones a terceros. La tipografía va dentro del repo. @@ -14,69 +15,95 @@ cae o la tiran, el pub y lo publicado siguen en la red. ``` site/ lo que se sirve (copiar tal cual a /var/www/acampada26s.net) deploy/ nginx y timer de systemd -tools/ limpiar imágenes y regenerar el directo +tools/ generador desde OASIS y limpieza de imágenes ``` -## Publicar un comunicado +## Qué sale de dónde -1. Copiar `site/comunicados/2026-09-26-convocatoria.html` a - `site/comunicados/AAAA-MM-DD-titulo.html` y cambiar título, fecha y texto. -2. Añadir un `
Borrador
-Crónica de la primera jornada pendiente de aprobar en asamblea.
-Las fotos se suben limpias de metadatos: tools/limpia-img.sh.
Resumen de la primera jornada y de las asambleas convocadas.
-Por qué acampamos, dónde y cómo sumarse.
-Todavía no hay comunicados.
+La acampada publica en su propio pub de OASIS, una red social libre sobre Secure Scuttlebutt. Sin servidores de empresa y sin cuentas que puedan cerrar desde fuera. Lo que se publica en la plaza aparece en Directo.
-La acampada se organiza en OASIS, una red social libre sobre Secure Scuttlebutt. No hay empresa detrás ni cuentas que se puedan cerrar desde fuera. Al instalarla entras solo en La Plaza, el pub común, y desde ahí llegas a la acampada.
acampada26s.net:8008:@CAMBIAR.ed25519~CAMBIAR
- A partir de ahí puedes leer, publicar y hablar con el resto de la acampada aunque esta web se caiga.
+Directo es lo que la acampada va subiendo al pub. Se ve sin instalar nada.
+ +Las comisiones se crean como tribus dentro de OASIS.
+ + +Los debates se abren como foros dentro de OASIS.
+ +Centros sociales y colectivos de Madrid. Aquí también hay información y asambleas.
+¿Falta tu colectivo? Escribe a la comisión de comunicación en OASIS.
{html.escape(limpia(p['text']))}
\n" - "{p}
") + return "\n".join(out) + + +def nombre(c): + h = hashlib.sha256(c["key"].encode()).hexdigest()[:8] + return f"{fecha(c['ts']):%Y-%m-%d}-{h}.html" + + +def cambia(doc, clave, contenido): + ini, fin = f"", f"" + i, j = doc.find(ini), doc.find(fin) + if i < 0 or j < i: + sys.exit(f"faltan las marcas {clave}:inicio / {clave}:fin") + return doc[:i + len(ini)] + "\n" + contenido + "\n " + doc[j:] + + +def escribe(ruta, texto): + try: + with open(ruta, encoding="utf-8") as f: + if f.read() == texto: + return + except FileNotFoundError: + pass + fd, tmp = tempfile.mkstemp(dir=os.path.dirname(ruta), prefix=".tmp.") + try: + with os.fdopen(fd, "w", encoding="utf-8") as f: + f.write(texto) + os.chmod(tmp, 0o644) + os.replace(tmp, ruta) + except BaseException: + os.unlink(tmp) + raise + + +def lista_comunicados(cs): + if not cs: + return "Todavía no hay comunicados.
" + li = [] + for c in cs: + t = fecha(c["ts"]) + titulo, resto = partir(c["texto"]) + ext = plano(resto) + if len(ext) > EXTRACTO: + ext = ext[:EXTRACTO].rsplit(" ", 1)[0] + "…" + li.append( + "{html.escape(ext)}
\n" if ext else "") + + "{vacio}
" + li = [] + for it in items: + s = sub(it) + li.append(f"Borrador
-Texto de la convocatoria pendiente de aprobar en asamblea.
-Lugar, hora y motivos van aquí.
-