Compare commits

..

No commits in common. "master" and "e4ebd01164016f65f9ce0693aab5110b41fd1bfd" have entirely different histories.

36 changed files with 272 additions and 624 deletions

View File

@ -1,38 +0,0 @@
---
kind: pipeline
name: default
platform:
os: linux
arch: amd64
steps:
- name: build
image: plugins/hugo
settings:
hugo_version: 0.88.1
url: https://negromate.rocks/hmdemo/
validate: true
when:
branch:
- master
- name: deploy
image: drillster/drone-rsync
settings:
hosts:
- 192.168.20.2
key:
from_secret: rsync_ssh_key
source: public/
target: /var/www/html/hmdemo
user: hm
when:
branch:
- master
---
kind: signature
hmac: eedaf25fc6dd13b10beb6533dd58eda860b7b8b6a5af7df2169bcc4e9c711c5e
...

View File

@ -1,61 +1,14 @@
# Página web del hackmeeting # Página web del hackmeeting
La principal ventaja de esta web con respecto a la que hay actualmente es que
no necesita mantenimiento, mantiene la posibilidad de editar contenido por
varias personas y simplifica el backup.
El flujo de trabajo típico para añadir contenido a la web sería este:
1. Crear o editar un fichero en la carpeta `content`
2. Comprobar en local que la modificación es correcta
3. Hacer un commit con las modificaciones
4. Subir el commit al repositorio de git
5. Compilar la web
6. Enviar los ficheros al servidor web.
Los pasos 5 y 6 se pueden automatizar con alguna herramienta de integración
continua. En este ejemplo se usa drone.io. Para simplificar el resto de los
pasos la idea es preparar scripts u otro tipo de programas, que ayuden a
generar el contenido de manera más interactiva.
Este proceso puede ser demasiado complicado para personas sin experiencia en
git o markdown, sobre todo las integrantes del grupo local, que además no
conocen el funcionamiento de esta herramienta. Propongo instaurar el rol de
"madrina(s) de grupo local", gente que se encargue de asistir al grupo local y
en caso necesario de encargarse de subir los contenidos a la web.
Los datos que son más útiles para el grupo local se guardan en ficheros csv,
que es fácil de modificar en una hoja de cálculo, y permite un postpropceso
sencillo para obtener datos interesantes. Por ejemplo la cantidad de asistentes
que hay apuntados para cenar el sábado.
## Crear contenido ## Crear contenido
Hay una serie de comandos auxiliares para gestionar el contenido de la web de Por ejemplo, para crear un nodo que se llame `nodo1` para el 2019:
manera sencilla.
Todos estos comandos aceptan un parámetro opcional: el año en el que estamos hugo new 2019/nodos/nodo1.md -k nodo
trabajando. Si no se indica año se asume el actual.
Para crear un nodo:
bin/nuevo_nodo
Para gestionar la asistencia:
bin/asistencia
Para gestionar las necesidades:
bin/necesidades
Para crear una página corriente:
bin/nueva_pagina
Para empezar un nuevo hackmeeting: Para empezar un nuevo hackmeeting:
bin/nuevo_hackmeeting hugo new 2022 -k hm
## Mini intro a Hugo ## Mini intro a Hugo
@ -80,39 +33,3 @@ Los ficheros estáticos están en la carpeta `static`, se copian tal cual a la
carpeta `public`. carpeta `public`.
Más información: https://gohugo.io/documentation/ Más información: https://gohugo.io/documentation/
## Estructura básica del contenido
Cada año creamos una carpeta nueva dentro de `content`, usando el archetypes `hm`.
Esta carpeta tiene la página inicial, el manifiesto, el listado de nodos y la
página de asistencia.
## Shortcodes
Estos son los shortcodes definidos para el hackmeeting:
### rawHTML
Renderiza el contenido del shortcode sin procesar, por lo que se puede meter html arbitrario.
Ejemplo:
{{< rawHTML >}}
<table>
<tr><td>Una tabla</td></tr>
</table>
{{< /rawHTML >}}
### csvTable
Renderiza un csv como una tabla HTML. Hay que pasarle dos parámetros, el path
del csv relativo a la raíz del proyecto y la clase css que se le asignará a la
tabla.
Hay que generar un fichero csv separado por comas.
Ejemplo, para un fichero `content/2019/nodos/parrilla_viernes.csv':
{{< csvTable file="/content/2019/nodos/parrilla_viernes.csv" class="parrilla" >}}

View File

@ -1,7 +1,6 @@
--- ---
title: "{{ replace .Name "-" " " | title }}" title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }} date: {{ .Date }}
type: "yearhome"
draft: true draft: true
--- ---

View File

@ -1 +0,0 @@
"Nombre","Entrada","Salida","Dieta","Camiseta","Material","Dormir","Comer","Necesidades"
1 Nombre Entrada Salida Dieta Camiseta Material Dormir Comer Necesidades

View File

@ -1,11 +0,0 @@
---
title: "Asistencia"
date: {{ .Date }}
draft: true
---
Esta es la plantilla para inscribirse y que sepamos de antemano cuanta gente va
a venir, para poder preparar el espacio y lo que haga falta. Avisa en matrix o
en la lista, o envía un pull request al repositorio de esta web.
{{< csvTable file="/content/2019/asistencia.csv" class="asistencia" >}}

View File

@ -1 +0,0 @@
Necesidad,Cantidad necesaria,Cantidad actual
1 Necesidad Cantidad necesaria Cantidad actual

View File

@ -1,7 +0,0 @@
---
title: "Necesidades"
date: {{ .Date }}
draft: true
---
{{< csvTable file="/content/{{ .Name }}/necesidades.csv" class="necesidades" >}}

View File

@ -1,7 +1,7 @@
--- ---
title: "{{ replace .Name "-" " " | title }}" title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }} date: {{ .Date }}
type: "nodos" type: nodo
quien: "organizadoras" quien: "organizadoras"
madrina: "madrina" madrina: "madrina"
duracion: "1 hora" duracion: "1 hora"

View File

@ -1,5 +0,0 @@
#!/bin/sh
YEAR=${1:-$(date "+%Y")}
utils/csveditor.py content/${YEAR}/asistencia.csv

View File

@ -1,5 +0,0 @@
#!/bin/sh
YEAR=${1:-$(date "+%Y")}
utils/csveditor.py content/${YEAR}/necesidades.csv

View File

@ -1,9 +0,0 @@
#!/bin/bash
YEAR=${1:-$(date "+%Y")}
echo -n "Titulo: "
read TITLE
SLUG=$(bin/slugify ${TITLE})
hugo new ${YEAR}/${SLUG}.md

View File

@ -1,5 +0,0 @@
#!/bin/sh
YEAR=${1:-$(date "+%Y")}
hugo new ${YEAR} -k hm

View File

@ -1,9 +0,0 @@
#!/bin/sh
YEAR=${1:-$(date "+%Y")}
echo -n "Titulo: "
read TITLE
SLUG=$(bin/slugify ${TITLE})
hugo new ${YEAR}/nodos/${SLUG}.md -k nodo

View File

@ -1,41 +0,0 @@
#!/bin/bash
# Versión simplificada y adaptada de bash-slugify
# https://github.com/brutus/bash-slugify
slugify () {
local name="$@"
local gluechars='-_. '
local safechars="${gluechars}a-zA-Z0-9"
# convert to lowercase
name=$(echo "${name}" | tr A-ZÄÖÜ a-zäöü)
# remove special chars
name=$(echo "${name//[^${safechars}]/}")
# consolidate spaces
name=$(echo "${name}" | tr -s '[:space:]')
# replace spaces with dashes
name=$(echo "${name}" | tr ' ' '-')
# remove spaces around dashes and underscores
name=$(echo "${name// -/-}")
name=$(echo "${name//- /-}")
name=$(echo "${name// _/_}")
name=$(echo "${name//_ /_}")
# trim spaces
name=$(echo "${name}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
# replace special chars
name=$(echo "${name//[^${safechars}]/$REPLACEMENT_CHAR}")
## REPLACE SPACES
name=$(echo "${name// /$SPACE_CHAR}")
# return slug
echo "${name}"
}
echo $(slugify "$@")

View File

@ -1,7 +1,6 @@
--- ---
title: "2019" title: "2019"
date: 2021-09-14T11:29:27+02:00 date: 2021-09-14T11:29:27+02:00
type: "yearhome"
draft: false draft: false
--- ---

View File

@ -1,2 +0,0 @@
"Nombre","Entrada","Salida","Dieta","Camiseta","Material","Dormir","Comer","Necesidades"
"Shagi","2019-09-19","2010-09-22","omnivora","L","","sí (en furgo)","sí",""
1 Nombre Entrada Salida Dieta Camiseta Material Dormir Comer Necesidades
2 Shagi 2019-09-19 2010-09-22 omnivora L sí (en furgo)

View File

@ -1,11 +0,0 @@
---
title: "Asistencia"
date: 2021-09-14T11:29:27+02:00
draft: false
---
Esta es la plantilla para inscribirse y que sepamos de antemano cuanta gente va
a venir, para poder preparar el espacio y lo que haga falta. Avisa en matrix o
en la lista, o envía un pull request al repositorio de esta web.
{{< csvTable file="/content/2019/asistencia.csv" class="asistencia" >}}

View File

@ -1,3 +0,0 @@
Necesidad,Cantidad necesaria,Cantidad actual
Micros,3,3
Proyectores,3,3
1 Necesidad Cantidad necesaria Cantidad actual
2 Micros 3 3
3 Proyectores 3 3

View File

@ -1,25 +0,0 @@
---
title: "Necesidades"
date: 2021-09-14T10:56:09+02:00
draft: false
---
Entendemos que habría 3 salas de charlas y en cada sala deberíamos tener:
- Un micro
- Un cable de micro
- Un altavoz autoamplificado (o en su caso una etapa de potencia +
altavoz)
- Opcional : Mixer para conectar otras cosas
- Cables minijack-rca o minijack-jacks para conectar el laptop al mixer
- Cable minijack-rca para pasar la señal a la rpi
- Una toma de red
- Una raspberriPi o trasato similar para hacer de cliente de streaming
para grabar las charlas.
## MATERIALES PARA LA REALIZACIÓN DE LOS NODOS
- Proyector
- Equipo de sonido
{{< csvTable file="/content/2019/necesidades.csv" class="necesidades" >}}

View File

@ -2,7 +2,7 @@
title: "Nodos" title: "Nodos"
date: 2021-09-14T10:56:09+02:00 date: 2021-09-14T10:56:09+02:00
type: nodos type: nodos
draft: false draft: true
--- ---
# Nodos # Nodos
@ -14,14 +14,264 @@ listas.
[Materiales necesarios](/2019/MaterialesNecesarios) [Materiales necesarios](/2019/MaterialesNecesarios)
## Viernes 20 ## Viernes
{{< csvTable file="/content/2019/nodos/parrilla_viernes.csv" class="parrilla" >}} <table class="wikitable">
<tbody>
<tr>
<th scope="row" colspan="4"> VIERNES 20 </th>
</tr>
<tr>
<th scope="col"></th>
<th scope="col"> ____Gizartetxe____ </th>
<th scope="col"> ____Gaztetxe__ </th>
<th scope="col"> ____Cine___________ </th>
</tr>
<tr>
<th scope="row"> 09:00 </th>
<th scope="row" colspan="3" rowspan="2"> DESAYUNO / BREAKFAST </th>
</tr>
<tr>
<th scope="row"> 10:00 </th>
</tr>
<tr>
<th scope="row"> 11:00 </th>
<th scope="row" colspan="3" rowspan="2"> ASAMBLEA PREPARATORIA HACKMEETING </th>
</tr>
<tr>
<th scope="row"> 12:00 </th>
</tr>
<tr>
<th scope="row"> 13:00 </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> </th>
</tr>
<tr>
<th scope="row"> 14:00 </th>
<th scope="row" rowspan="2" colspan="3"> COMIDA </th>
</tr>
<tr>
<th scope="row"> 15:00 </th>
</tr>
<tr>
<th> 16:00 </th>
<th scope="row" colspan="3" rowspan="2"> ASAMBLEA GENERAL HACKMEETING </th>
</tr>
<tr>
<th scope="row"> 17:00 </th>
</tr>
<tr>
<th scope="row"> 18:00 </th>
<th scope="row" rowspan="1"> Audio en el fediverso: Introducción a Funkwhale [<a rel="nofollow" class="external autonumber" href="https://es.hackmeeting.org/hm/index.php?title=Nodos2019#Audio_en_el_fediverso:_Introducci.C3.B3n_a_Funkwhale">[1]</a>] </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> </th>
</tr>
<tr>
<th scope="row"> 19:00 </th>
<th scope="row" rowspan="1"> Cómo funciona internet [<a rel="nofollow" class="external autonumber" href="https://es.hackmeeting.org/hm/index.php?title=Nodos2019#C.C3.B3mo_funciona_internet">[2]</a>] </th>
<th scope="row" rowspan="2"> Mesa redonda. Características del software para que empodere nuestras comunidades [<a rel="nofollow" class="external autonumber" href="https://es.hackmeeting.org/hm/index.php?title=Nodos2019#Mesa_redonda._Caracter.C3.ADsticas_del_software_para_que_empodere_nuestras_comunidades">[3]</a>] </th>
<th scope="row" rowspan="2"> Ruidismo DIY | Live Coding: Generación de música a través de algoritmos [<a rel="nofollow" class="external autonumber" href="https://es.hackmeeting.org/hm/index.php?title=Nodos2019#Ruidismo_DIY_.7C_Live_Coding:_Generaci.C3.B3n_de_m.C3.BAsica_a_trav.C3.A9s_de_algoritmos">[4]</a>] </th>
</tr>
<tr>
<th scope="row"> 20:00 </th>
<th scope="row" rowspan="1"> </th>
</tr>
<tr>
<th scope="row"> 21:00 </th>
<th scope="row" colspan="3" rowspan="1"> CENA </th>
</tr>
<tr>
<th scope="row"> 22:30 </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> 10 minutes Talks:
<p>Host a radical wordpress MU, tech stuffs of noblogs.org [<a rel="nofollow" class="external autonumber" href="https://es.hackmeeting.org/hm/index.php?title=Nodos2019#Host_a_radical_wordpress_MU.2C_tech_stuffs_of_noblogs.org">[5]</a>]
</p>
</th>
<th scope="row" rowspan="1"> </th>
</tr>
<tr>
<th scope="row"> 23:00 </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> </th>
</tr>
<tr>
<th scope="row"> 24:00 </th>
</tr>
</tbody>
</table>
## Sábado 21
{{< csvTable file="/content/2019/nodos/parrilla_sabado.csv" class="parrilla" >}} ## Sábado
## Domingo 22 <table class="wikitable">
<tbody>
<tr>
<th scope="row" colspan="4"> SABADO 21 </th>
</tr>
<tr>
<th scope="col"> </th>
<th scope="col"> ____Gizartetxe____ </th>
<th scope="col"> ____Gaztetxe__ </th>
<th scope="col"> ____Cine___________ </th>
</tr>
<tr>
<th scope="row"> 09:00 </th>
<th scope="row" colspan="3" rowspan="1"> DESAYUNO / BREAKFAST </th>
</tr>
<tr>
<th scope="row"> 10:00 </th>
<th scope="row" rowspan="1"> FaceHack [<a rel="nofollow" class="external autonumber" href="https://es.hackmeeting.org/hm/index.php?title=Nodos2019#Facehack">[6]</a>] </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> </th>
</tr>
<tr>
<th scope="row"> 11:00 </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="2"> Burujabetza teknologikoa [<a rel="nofollow" class="external autonumber" href="https://es.hackmeeting.org/hm/index.php?title=Nodos2019#Burujabetza_teknologikoa">[7]</a>] </th>
<th scope="row" rowspan="1"> Taller sobre email sin internet [<a rel="nofollow" class="external autonumber" href="https://es.hackmeeting.org/hm/index.php?title=Nodos2019#Taller_sobre_email_sin_internet_y_propuesta_din.C3.A1mica_de_probarlo_durante_este_hackmeeting">[8]</a>] </th>
</tr>
<tr>
<th scope="row"> 12:00 </th>
<th scope="row" rowspan="2"> Instalacion fotovoltaica Errekaleor [<a rel="nofollow" class="external autonumber" href="https://es.hackmeeting.org/hm/index.php?title=Nodos2019#Instalacion_fotovoltaica_Errekaleor">[9]</a>] </th>
<th scope="row" rowspan="1"> </th>
</tr>
<tr>
<th scope="row"> 13:00 </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> </th>
</tr>
<tr>
<th scope="row"> 14:00 </th>
<th scope="row" rowspan="2" colspan="3"> COMIDA </th>
</tr>
<tr>
<th scope="row"> 15:00 </th>
</tr>
<tr>
<th> 16:00 </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> Taller creativo para Autodefensa Informática [<a rel="nofollow" class="external autonumber" href="https://es.hackmeeting.org/hm/index.php?title=Nodos2019#Taller_creativo_para_Autodefensa_Inform.C3.A1tica">[10]</a>] </th>
<th scope="row" rowspan="1"> Motivades pel Plàstic [<a rel="nofollow" class="external autonumber" href="https://es.hackmeeting.org/hm/index.php?title=Nodos2019#Facehack">[11]</a>] </th>
</tr>
<tr>
<th scope="row"> 17:00 </th>
<th scope="row" rowspan="1"> Subir una web a IPFS [<a rel="nofollow" class="external autonumber" href="https://es.hackmeeting.org/hm/index.php?title=Nodos2019#Subir_una_web_a_IPFS">[12]</a>] </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> </th>
</tr>
<tr>
<th scope="row"> 18:00 </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> sindominio: tras 20 años de cyberautonomía [<a rel="nofollow" class="external autonumber" href="https://es.hackmeeting.org/hm/index.php?title=Nodos2019#sindominio:_tras_20_a.C3.B1os_de_cyberautonom.C3.ADa">[13]</a>] </th>
<th scope="row" rowspan="1"> </th>
</tr>
<tr>
<th scope="row"> 19:00 </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> Tractor hacking. Software privativo en coches y tractores [<a rel="nofollow" class="external autonumber" href="https://es.hackmeeting.org/hm/index.php?title=Nodos2019#Tractor_hacking">[14]</a>] </th>
<th scope="row" rowspan="2">
Charla sobre el movimiento AnarcoHacker y Proyeccion del documental "Hack the system" [<a rel="nofollow" class="external autonumber" href="https://es.hackmeeting.org/hm/index.php?title=Nodos2019#Charla_sobre_el_movimiento_AnarcoHacker_y_Proyeccion_del_documental_.22Hack_the_system.22_.28subtitulado.29">[15]</a>]
</th>
</tr>
<tr>
<th scope="row"> 20:00 </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1">Soberania alcoholica y fiestera: desde la resistencia anti-nazi, al movimiento queer[<a rel="nofollow" class="external autonumber" href="https://es.hackmeeting.org/hm/index.php?title=Nodos2019#Soberania_alcoholica_y_fiestera:_desde_la_resistencia_anti-nazi.2C_al_movimiento_queer">[16]</a>] </th>
</tr>
<tr>
<th scope="row"> 21:00 </th>
<th scope="row" colspan="3" rowspan="1"> CENA </th>
</tr>
<tr>
<th scope="row"> 22:30 </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> 10 minutes Talks: </th>
<th scope="row" rowspan="1"> </th>
</tr>
<tr>
<th scope="row"> 23:00 </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="2"> Negro Mate [<a rel="nofollow" class="external autonumber" href="https://es.hackmeeting.org/hm/index.php?title=Nodos2019#Negro_Mate">[17]</a>] </th>
<th scope="row" rowspan="1"> </th>
</tr>
<tr>
<th scope="row"> 24:00 </th>
</tr>
</tbody>
</table>
{{< csvTable file="/content/2019/nodos/parrilla_domingo.csv" class="parrilla" >}}
## Domingo
<table class="wikitable">
<tbody>
<tr>
<th scope="row" colspan="4"> DOMINGO 21 </th>
</tr>
<tr>
<th scope="col"> </th>
<th scope="col"> ____Gizartetxe____ </th>
<th scope="col"> ____Gaztetxe__ </th>
<th scope="col"> ____Cine___________ </th>
</tr>
<tr>
<th scope="row"> 09:00 </th>
<th scope="row" colspan="3" rowspan="2"> DESAYUNO / BREAKFAST </th>
</tr>
<tr>
<th scope="row"> 10:00 </th>
</tr>
<tr>
<th scope="row"> 11:00 </th>
<th scope="row" colspan="3" rowspan="2"> ASAMBLEA GENERAL HACKMEETING </th>
</tr>
<tr>
<th scope="row"> 12:00 </th>
</tr>
<tr>
<th scope="row"> 13:00 </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> </th>
</tr>
<tr>
<th scope="row"> 14:00 </th>
<th scope="row" rowspan="2" colspan="3"> COMIDA </th>
</tr>
<tr>
<th scope="row"> 15:00 </th>
</tr>
<tr>
<th> 16:00 </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> </th>
</tr>
<tr>
<th scope="row"> 17:00 </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> </th>
</tr>
<tr>
<th scope="row"> 18:00 </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> </th>
</tr>
<tr>
<th scope="row"> 19:00 </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> </th>
</tr>
<tr>
<th scope="row"> 20:00 </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> </th>
<th scope="row" rowspan="1"> </th>
</tr>
</tbody>
</table>

View File

@ -1,20 +0,0 @@
---
title: "Audio en El Fediverso: Workshop Funkwhale"
date: 2021-09-19T11:55:32+02:00
type: "nodos"
quien: "Siroco"
madrina: ""
duracion: "tarde/noches del preHM"
preferencia: "pre-Hackmeeting"
necesita: ["Espacio común"]
tags: ["radio", "fediverse", "podcasting"]
draft: false
---
La idea es usar los días de preHM para configurar un nodo local de Funkwhale y
hacer pruebas con sus APIs para luego presentar el resultado en un nodo durante
el HM.
## Archivos
http://funkwhale.audio/

View File

@ -1,7 +1,7 @@
--- ---
title: "Audio en El Fediverso: Introducción a Funkwhale" title: "Audio en El Fediverso: Introducción a Funkwhale"
date: 2021-09-15T11:12:59+02:00 date: 2021-09-15T11:12:59+02:00
type: "nodos" type: nodo
quien: "Siroco" quien: "Siroco"
madrina: "" madrina: ""
duracion: "1 hora" duracion: "1 hora"
@ -21,6 +21,6 @@ funkwhale y mirar hasta que punto podemos usar su API para desarrollar un
sistema de podcasting. El resultado de la investigación será presentado en este sistema de podcasting. El resultado de la investigación será presentado en este
nodo. nodo.
## Archivos ##Archivos
http://funkwhale.audio/ http://funkwhale.audio/

View File

@ -15,5 +15,4 @@ Cantaremos entre todos varias canciones a las que les hemos cambiado la letra
con temas relacionados con el hacktivismo y el software libre. con temas relacionados con el hacktivismo y el software libre.
## Archivos ## Archivos
https://negromate.ddns.net o http://fyqxyftczmxv3nmb.onion/ https://negromate.ddns.net o http://fyqxyftczmxv3nmb.onion/

View File

@ -1,13 +0,0 @@
,Gizartetxe,Gaztetxe,Cine
09:00:00,DESAYUNO / BREAKFAST,DESAYUNO / BREAKFAST,DESAYUNO / BREAKFAST
10:00:00,DESAYUNO / BREAKFAST,DESAYUNO / BREAKFAST,DESAYUNO / BREAKFAST
11:00:00,ASAMBLEA GENERAL HACKMEETING,ASAMBLEA GENERAL HACKMEETING,ASAMBLEA GENERAL HACKMEETING
12:00:00,ASAMBLEA GENERAL HACKMEETING,ASAMBLEA GENERAL HACKMEETING,ASAMBLEA GENERAL HACKMEETING
13:00:00,,,
14:00:00,COMIDA,COMIDA,COMIDA
15:00:00,COMIDA,COMIDA,COMIDA
16:00:00,,,
17:00:00,,,
18:00:00,,,
19:00:00,,,
20:00:00,,,
1 Gizartetxe Gaztetxe Cine
2 09:00:00 DESAYUNO / BREAKFAST DESAYUNO / BREAKFAST DESAYUNO / BREAKFAST
3 10:00:00 DESAYUNO / BREAKFAST DESAYUNO / BREAKFAST DESAYUNO / BREAKFAST
4 11:00:00 ASAMBLEA GENERAL HACKMEETING ASAMBLEA GENERAL HACKMEETING ASAMBLEA GENERAL HACKMEETING
5 12:00:00 ASAMBLEA GENERAL HACKMEETING ASAMBLEA GENERAL HACKMEETING ASAMBLEA GENERAL HACKMEETING
6 13:00:00
7 14:00:00 COMIDA COMIDA COMIDA
8 15:00:00 COMIDA COMIDA COMIDA
9 16:00:00
10 17:00:00
11 18:00:00
12 19:00:00
13 20:00:00

View File

@ -1,17 +0,0 @@
,Gizartetxe,Gaztetxe,Cine
09:00:00,DESAYUNO / BREAKFAST,DESAYUNO / BREAKFAST,DESAYUNO / BREAKFAST
10:00:00,FaceHack,,
11:00:00,,Burujabetza teknologikoa,Taller sobre email sin internet
12:00:00,Instalacion fotovoltaica Errekaleor,Burujabetza teknologikoa,
13:00:00,Instalacion fotovoltaica Errekaleor,,
14:00:00,COMIDA,COMIDA,COMIDA
15:00:00,COMIDA,COMIDA,COMIDA
16:00:00,,Taller creativo para Autodefensa Informática,Motivades pel Plàstic
17:00:00,Subir una web a IPFS,,
18:00:00,,sindominio: tras 20 años de cyberautonomía,
19:00:00,,Tractor hacking. Software privativo en coches y tractores,"Charla sobre el movimiento AnarcoHacker y Proyeccion del documental ""Hack the system"""
20:00:00,,"Soberania alcoholica y fiestera: desde la resistencia anti-nazi, al movimiento queer","Charla sobre el movimiento AnarcoHacker y Proyeccion del documental ""Hack the system"""
21:00:00,CENA,CENA,CENA
22:30:00,,10 minutes Talks,
23:00:00,,Negro Mate,
24:00:00,,Negro Mate,
1 Gizartetxe Gaztetxe Cine
2 09:00:00 DESAYUNO / BREAKFAST DESAYUNO / BREAKFAST DESAYUNO / BREAKFAST
3 10:00:00 FaceHack
4 11:00:00 Burujabetza teknologikoa Taller sobre email sin internet
5 12:00:00 Instalacion fotovoltaica Errekaleor Burujabetza teknologikoa
6 13:00:00 Instalacion fotovoltaica Errekaleor
7 14:00:00 COMIDA COMIDA COMIDA
8 15:00:00 COMIDA COMIDA COMIDA
9 16:00:00 Taller creativo para Autodefensa Informática Motivades pel Plàstic
10 17:00:00 Subir una web a IPFS
11 18:00:00 sindominio: tras 20 años de cyberautonomía
12 19:00:00 Tractor hacking. Software privativo en coches y tractores Charla sobre el movimiento AnarcoHacker y Proyeccion del documental "Hack the system"
13 20:00:00 Soberania alcoholica y fiestera: desde la resistencia anti-nazi, al movimiento queer Charla sobre el movimiento AnarcoHacker y Proyeccion del documental "Hack the system"
14 21:00:00 CENA CENA CENA
15 22:30:00 10 minutes Talks
16 23:00:00 Negro Mate
17 24:00:00 Negro Mate

View File

@ -1,17 +0,0 @@
,Gizartetxe,Gaztetxe,Cine
09:00:00,DESAYUNO / BREAKFAST,DESAYUNO / BREAKFAST,DESAYUNO / BREAKFAST
10:00:00,DESAYUNO / BREAKFAST,DESAYUNO / BREAKFAST,DESAYUNO / BREAKFAST
11:00:00,ASAMBLEA PREPARATORIA HACKMEETING,ASAMBLEA PREPARATORIA HACKMEETING,ASAMBLEA PREPARATORIA HACKMEETING
12:00:00,ASAMBLEA PREPARATORIA HACKMEETING,ASAMBLEA PREPARATORIA HACKMEETING,ASAMBLEA PREPARATORIA HACKMEETING
13:00:00,,,
14:00:00,COMIDA,COMIDA,COMIDA
15:00:00,COMIDA,COMIDA,COMIDA
16:00:00,ASAMBLEA GENERAL HACKMEETING,ASAMBLEA GENERAL HACKMEETING,ASAMBLEA GENERAL HACKMEETING
17:00:00,,,
18:00:00,Audio en el fediverso: Introducción a Funkwhale ,,
19:00:00,Cómo funciona internet ,Mesa redonda. Características del software para que empodere nuestras comunidades ,Ruidismo DIY | Live Coding: Generación de música a través de algoritmos
20:00:00,,Mesa redonda. Características del software para que empodere nuestras comunidades ,Ruidismo DIY | Live Coding: Generación de música a través de algoritmos
21:00:00,CENA,CENA,CENA
22:30:00,,"10 minutes Talks",
23:00:00,,,
24:00:00,,,
1 Gizartetxe Gaztetxe Cine
2 09:00:00 DESAYUNO / BREAKFAST DESAYUNO / BREAKFAST DESAYUNO / BREAKFAST
3 10:00:00 DESAYUNO / BREAKFAST DESAYUNO / BREAKFAST DESAYUNO / BREAKFAST
4 11:00:00 ASAMBLEA PREPARATORIA HACKMEETING ASAMBLEA PREPARATORIA HACKMEETING ASAMBLEA PREPARATORIA HACKMEETING
5 12:00:00 ASAMBLEA PREPARATORIA HACKMEETING ASAMBLEA PREPARATORIA HACKMEETING ASAMBLEA PREPARATORIA HACKMEETING
6 13:00:00
7 14:00:00 COMIDA COMIDA COMIDA
8 15:00:00 COMIDA COMIDA COMIDA
9 16:00:00 ASAMBLEA GENERAL HACKMEETING ASAMBLEA GENERAL HACKMEETING ASAMBLEA GENERAL HACKMEETING
10 17:00:00
11 18:00:00 Audio en el fediverso: Introducción a Funkwhale
12 19:00:00 Cómo funciona internet Mesa redonda. Características del software para que empodere nuestras comunidades Ruidismo DIY | Live Coding: Generación de música a través de algoritmos
13 20:00:00 Mesa redonda. Características del software para que empodere nuestras comunidades Ruidismo DIY | Live Coding: Generación de música a través de algoritmos
14 21:00:00 CENA CENA CENA
15 22:30:00 10 minutes Talks
16 23:00:00
17 24:00:00

View File

@ -5,13 +5,13 @@
<title>{{ block "title" . }} <title>{{ block "title" . }}
{{ .Site.Title }} {{ .Site.Title }}
{{ end }}</title> {{ end }}</title>
<link rel="stylesheet" href="{{ "css/base.css"|absURL }}"> <link rel="stylesheet" href="/css/base.css">
<link rel="icon" href="{{ "imgs/hm-favicon.png"|absURL }}" type="image/png"> <link rel="icon" href="/imgs/hm-favicon.png" type="image/png">
</head> </head>
<body> <body>
<header> <header>
<a href="{{ ""|absURL }}"> <a href="{{ "/" | absURL }}">
<img id="logo" src="{{ "imgs/logo.png"|absURL }}" alt="logo"> <img id="logo" src="/imgs/logo.png" alt="logo">
</a> </a>
{{ .Site.Title }} {{ .Site.Title }}

View File

@ -3,18 +3,18 @@
<head> <head>
<title>Hackmeeting 2019</title> <title>Hackmeeting 2019</title>
<meta charset="UTF-8"> <meta charset="UTF-8">
<link rel="stylesheet" href="{{ "css/home.css"|absURL }}"> <link rel="stylesheet" href="css/home.css">
<meta name="viewport" content="width=device-width"> <meta name="viewport" content="width=device-width">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="http://es.hackmeeting.org/index.html"> <link rel="canonical" href="http://es.hackmeeting.org/index.html">
<meta name="author" content="Hackmeeting"> <meta name="author" content="Hackmeeting">
<meta name="description" content="Autogestión, Hacktivismo, CryptoAnarquismo, Hackmeeting"> <meta name="description" content="Autogestión, Hacktivismo, CryptoAnarquismo, Hackmeeting">
<link rel="icon" href="{{ "imgs/hm-favicon.png"|absURL }}" type="image/png"> <link rel="icon" href="/imgs/hm-favicon.png" type="image/png">
</head> </head>
<body> <body>
<header> <header>
<img class="imgCenter" src="{{ "imgs/hm-favicon.png"|absURL }}"/> <img class="imgCenter" src="imgs/hm-favicon.png"/>
<h1>{{ .Title }}</h2> <h1>{{ .Title }}</h2>
<h2>{{ .Params.when }}</h2> <h2>{{ .Params.when }}</h2>
<h2>{{ .Params.where }}</h2> <h2>{{ .Params.where }}</h2>

View File

@ -2,8 +2,9 @@
{{ .TableOfContents }} {{ .TableOfContents }}
{{ .Content }} {{ .Content }}
{{ range where .Pages "Params.type" "nodos" }} {{ range .Pages }}
{{ partial "nodo" . }} {{ partial "nodo" . }}
{{ .Render "li" }}
{{ end }} {{ end }}
{{ end }} {{ end }}

View File

@ -35,12 +35,4 @@
<li><a href="{{ .Permalink }}">{{.Title}}</a></li> <li><a href="{{ .Permalink }}">{{.Title}}</a></li>
{{ end }} {{ end }}
</ul> </ul>
<hr>
<ul>
{{ range .Parent.Parent.Pages }}
<li><a href="{{ .Permalink }}">{{.Title}}</a></li>
{{ end }}
</ul>
{{ end}} {{ end}}

View File

@ -1,16 +0,0 @@
{{ $class := .Get "class" }}
{{ $file := .Get "file" }}
{{ $data := getCSV "," $file }}
<table class="{{ $class }}">
{{ range $row, $columns := $data }}
<tr>
{{ range $columns }}
{{ if eq $row 0 }}
<th> {{ . }}</th>
{{ else }}
<td> {{ . }}</td>
{{ end }}
{{ end }}
</tr>
{{ end }}
</table>

View File

@ -1 +0,0 @@
{{ .Inner }}

View File

@ -1,20 +0,0 @@
{{ define "main" }}
{{ .TableOfContents }}
{{ .Content }}
{{ end }}
{{ define "sidebar_menu" }}
<ul>
{{ range .Pages }}
<li><a href="{{ .Permalink }}">{{.Title}}</a></li>
{{ end }}
</ul>
<hr>
<ul>
{{ range .Parent.Pages }}
<li><a href="{{ .Permalink }}">{{.Title}}</a></li>
{{ end }}
</ul>
{{ end}}

View File

@ -3,7 +3,6 @@ body {
gap: 0 1em; gap: 0 1em;
flex-wrap: wrap; flex-wrap: wrap;
flex-direction: row; flex-direction: row;
margin: 0;
} }
header { header {
@ -45,53 +44,6 @@ aside a {
color: white; color: white;
} }
aside ul {
list-style-type: none;
padding: 0.5em;
background-color: #333;
border-radius: 0.5em;
margin: 0.5em;
}
aside li {
padding-bottom: 0.5em;
}
main { main {
flex: 1; flex: 1;
} }
table {
border-collapse: collapse;
border: 1px solid black;
}
table th, table td {
border: 1px solid black;
padding: 0.25em;
}
table.parrilla {
width: 100%
}
table.parrilla td {
width: 29%;
}
table.parrilla td:first-child {
font-weight: bold;
width: 9%;
}
table.parrilla td:nth-child(2) {
background-color: #ddd;
}
table.parrilla td:nth-child(3) {
background-color: #ccc;
}
table.parrilla td:nth-child(4) {
background-color: #eee
}

View File

@ -1,169 +0,0 @@
#!/usr/bin/env python3
from argparse import ArgumentParser
import atexit
import csv
import os
import readline
import sys
from cmd import Cmd
def init_readline():
histfile = os.path.join(os.path.expanduser("~"), ".hmwebot_history")
try:
readline.read_history_file(histfile)
h_len = readline.get_current_history_length()
except FileNotFoundError:
open(histfile, 'wb').close()
h_len = 0
def save(prev_h_len, histfile):
new_h_len = readline.get_current_history_length()
readline.set_history_length(1000)
readline.append_history_file(new_h_len - prev_h_len, histfile)
atexit.register(save, h_len, histfile)
def rlinput(prompt, prefill=''):
readline.set_startup_hook(lambda: readline.insert_text(prefill))
try:
return input(prompt) # or raw_input in Python 2
finally:
readline.set_startup_hook()
class CSVEditor:
def __init__(self, filename):
self.filename = filename
with open(filename, 'r') as f:
reader = csv.DictReader(f)
self.fieldnames = reader.fieldnames
self.data = [data for data in reader]
def get_list(self, title_field):
return [(idx, data[title_field]) for idx, data in enumerate(self.data)]
def get(self, idx):
try:
return self.data[idx]
except IndexError:
return None
def show(self, idx):
line = self.get(idx)
if line is None:
return "Índice fuera de rango"
output = [
f"{field}: {value}"
for field, value in line.items()
]
return "\n".join(output)
def edit(self, idx, item):
self.data[idx] = item
def delete(self, idx):
if idx in self.data:
del self.data[idx]
def _edit(self, item):
editing = True
while editing:
for fieldname in self.fieldnames:
item[fieldname] = rlinput(f"{fieldname}: ", prefill=item.get(fieldname, ''))
editing = rlinput('Terminado (s/N)?').lower() == 'n'
def edit(self, idx):
item = self.get(idx)
if item is None:
return
self._edit(item)
self.data[idx] = item
def add(self):
item = {}
self._edit(item)
self.data.append(item)
def write(self):
with open(self.filename, 'w') as f:
writer = csv.DictWriter(f, fieldnames=self.fieldnames)
writer.writeheader()
writer.writerows(self.data)
class CSVEditorCmd(Cmd):
"Editor interactivo de ficheros csv"
def __init__(self, filename, title_field=None):
super().__init__()
self.csveditor = CSVEditor(filename)
self.title_field = title_field
if title_field is None:
self.title_field = self.csveditor.fieldnames[0]
self.do_help('')
def do_list(self, arg):
"Listar el contenido del csv"
for idx, item in self.csveditor.get_list(self.title_field):
print(f"{idx}) {item}")
def do_show(self, arg):
"Mostrar la línea con el índice indicado"
try:
idx = int(arg)
except ValueError:
print("Tienes que indicar un número")
return
print(self.csveditor.show(idx))
def do_add(self, arg):
"Añadir una nueva entrada"
self.csveditor.add()
def do_edit(self, arg):
"Editar la entrada con el índice indicado"
try:
idx = int(arg)
except ValueError:
print("Tienes que indicar un número")
return
self.csveditor.edit(idx)
def do_delete(self, arg):
"Quitar la entrada con el índice indicado"
try:
idx = int(arg)
except ValueError:
print("Tienes que indicar un número")
return
self.csveditor.delete(idx)
def do_save(self, arg):
"Guardar la lista actualizada"
self.csveditor.write()
def do_quit(self, arg):
"Terminar"
return True
do_EOF = do_quit
parser = ArgumentParser(
description='Editor sencillo de ficheros CSV')
parser.add_argument('csvfile', help='Fichero que hay que editar.')
parser.add_argument('-t', '--title', help='Columna principal del CSV, por defecto la primera.')
def main():
init_readline()
# bot = Bot()
args = parser.parse_args()
cmd = CSVEditorCmd(args.csvfile, args.title)
cmd.cmdloop()
if __name__ == '__main__':
main()

View File

@ -1,15 +0,0 @@
Tareas que hay que facilitar:
- nuevo nodo
- nueva asistencia
igual cambiar el sistema actual para que sea también un csv, así podemos
cambiar las columnas necesarias para cada año
el programa pregunta y añade, o busca en la lista para quitar a alguien
- necesidades
poder pedir proyectores, material de limpieza, gente, etc.
un csv con tres columnas: texto, cantidad necesaria, cantidad actual
el programa pregunta por una de las líneas del csv para borrar, editar, cambiar la cantidad,
también se pueden añadir nuevas líneas