Compare commits
13 Commits
e4ebd01164
...
master
Author | SHA1 | Date |
---|---|---|
Ales (Shagi) Zabala Alava | c0d460de1d | |
Ales (Shagi) Zabala Alava | 6915f7e0b4 | |
Ales (Shagi) Zabala Alava | 226021a203 | |
Ales (Shagi) Zabala Alava | aa5a159df1 | |
Ales (Shagi) Zabala Alava | d8a47abf1d | |
Ales (Shagi) Zabala Alava | 54cd73f31d | |
Ales (Shagi) Zabala Alava | fd958653fe | |
Ales (Shagi) Zabala Alava | 406793b613 | |
Ales (Shagi) Zabala Alava | 94871720db | |
Ales (Shagi) Zabala Alava | 1591b16245 | |
Ales (Shagi) Zabala Alava | 9cf888dc38 | |
Ales (Shagi) Zabala Alava | 67add2e383 | |
Ales (Shagi) Zabala Alava | 2bd8c46431 |
|
@ -0,0 +1,38 @@
|
|||
---
|
||||
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
|
||||
|
||||
...
|
89
README.md
89
README.md
|
@ -1,14 +1,61 @@
|
|||
# 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
|
||||
|
||||
Por ejemplo, para crear un nodo que se llame `nodo1` para el 2019:
|
||||
Hay una serie de comandos auxiliares para gestionar el contenido de la web de
|
||||
manera sencilla.
|
||||
|
||||
hugo new 2019/nodos/nodo1.md -k nodo
|
||||
Todos estos comandos aceptan un parámetro opcional: el año en el que estamos
|
||||
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:
|
||||
|
||||
hugo new 2022 -k hm
|
||||
bin/nuevo_hackmeeting
|
||||
|
||||
|
||||
## Mini intro a Hugo
|
||||
|
@ -33,3 +80,39 @@ Los ficheros estáticos están en la carpeta `static`, se copian tal cual a la
|
|||
carpeta `public`.
|
||||
|
||||
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" >}}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
date: {{ .Date }}
|
||||
type: "yearhome"
|
||||
draft: true
|
||||
---
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
"Nombre","Entrada","Salida","Dieta","Camiseta","Material","Dormir","Comer","Necesidades"
|
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
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" >}}
|
|
@ -0,0 +1 @@
|
|||
Necesidad,Cantidad necesaria,Cantidad actual
|
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
title: "Necesidades"
|
||||
date: {{ .Date }}
|
||||
draft: true
|
||||
---
|
||||
|
||||
{{< csvTable file="/content/{{ .Name }}/necesidades.csv" class="necesidades" >}}
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
date: {{ .Date }}
|
||||
type: nodo
|
||||
type: "nodos"
|
||||
quien: "organizadoras"
|
||||
madrina: "madrina"
|
||||
duracion: "1 hora"
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
#!/bin/sh
|
||||
|
||||
YEAR=${1:-$(date "+%Y")}
|
||||
|
||||
utils/csveditor.py content/${YEAR}/asistencia.csv
|
|
@ -0,0 +1,5 @@
|
|||
#!/bin/sh
|
||||
|
||||
YEAR=${1:-$(date "+%Y")}
|
||||
|
||||
utils/csveditor.py content/${YEAR}/necesidades.csv
|
|
@ -0,0 +1,9 @@
|
|||
#!/bin/bash
|
||||
|
||||
YEAR=${1:-$(date "+%Y")}
|
||||
|
||||
echo -n "Titulo: "
|
||||
read TITLE
|
||||
SLUG=$(bin/slugify ${TITLE})
|
||||
|
||||
hugo new ${YEAR}/${SLUG}.md
|
|
@ -0,0 +1,5 @@
|
|||
#!/bin/sh
|
||||
|
||||
YEAR=${1:-$(date "+%Y")}
|
||||
|
||||
hugo new ${YEAR} -k hm
|
|
@ -0,0 +1,9 @@
|
|||
#!/bin/sh
|
||||
|
||||
YEAR=${1:-$(date "+%Y")}
|
||||
|
||||
echo -n "Titulo: "
|
||||
read TITLE
|
||||
SLUG=$(bin/slugify ${TITLE})
|
||||
|
||||
hugo new ${YEAR}/nodos/${SLUG}.md -k nodo
|
|
@ -0,0 +1,41 @@
|
|||
#!/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 "$@")
|
|
@ -1,6 +1,7 @@
|
|||
---
|
||||
title: "2019"
|
||||
date: 2021-09-14T11:29:27+02:00
|
||||
type: "yearhome"
|
||||
draft: false
|
||||
---
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
"Nombre","Entrada","Salida","Dieta","Camiseta","Material","Dormir","Comer","Necesidades"
|
||||
"Shagi","2019-09-19","2010-09-22","omnivora","L","","sí (en furgo)","sí",""
|
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
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" >}}
|
|
@ -0,0 +1,3 @@
|
|||
Necesidad,Cantidad necesaria,Cantidad actual
|
||||
Micros,3,3
|
||||
Proyectores,3,3
|
|
|
@ -0,0 +1,25 @@
|
|||
---
|
||||
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" >}}
|
|
@ -2,7 +2,7 @@
|
|||
title: "Nodos"
|
||||
date: 2021-09-14T10:56:09+02:00
|
||||
type: nodos
|
||||
draft: true
|
||||
draft: false
|
||||
---
|
||||
|
||||
# Nodos
|
||||
|
@ -14,264 +14,14 @@ listas.
|
|||
[Materiales necesarios](/2019/MaterialesNecesarios)
|
||||
|
||||
|
||||
## Viernes
|
||||
## Viernes 20
|
||||
|
||||
<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>
|
||||
{{< csvTable file="/content/2019/nodos/parrilla_viernes.csv" class="parrilla" >}}
|
||||
|
||||
## Sábado 21
|
||||
|
||||
## Sábado
|
||||
{{< csvTable file="/content/2019/nodos/parrilla_sabado.csv" class="parrilla" >}}
|
||||
|
||||
<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>
|
||||
## Domingo 22
|
||||
|
||||
|
||||
## 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>
|
||||
{{< csvTable file="/content/2019/nodos/parrilla_domingo.csv" class="parrilla" >}}
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
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/
|
|
@ -1,7 +1,7 @@
|
|||
---
|
||||
title: "Audio en El Fediverso: Introducción a Funkwhale"
|
||||
date: 2021-09-15T11:12:59+02:00
|
||||
type: nodo
|
||||
type: "nodos"
|
||||
quien: "Siroco"
|
||||
madrina: ""
|
||||
duracion: "1 hora"
|
||||
|
|
|
@ -15,4 +15,5 @@ Cantaremos entre todos varias canciones a las que les hemos cambiado la letra
|
|||
con temas relacionados con el hacktivismo y el software libre.
|
||||
|
||||
## Archivos
|
||||
|
||||
https://negromate.ddns.net o http://fyqxyftczmxv3nmb.onion/
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
,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,,,
|
|
|
@ -0,0 +1,17 @@
|
|||
,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,
|
|
|
@ -0,0 +1,17 @@
|
|||
,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,,,
|
|
|
@ -5,13 +5,13 @@
|
|||
<title>{{ block "title" . }}
|
||||
{{ .Site.Title }}
|
||||
{{ end }}</title>
|
||||
<link rel="stylesheet" href="/css/base.css">
|
||||
<link rel="icon" href="/imgs/hm-favicon.png" type="image/png">
|
||||
<link rel="stylesheet" href="{{ "css/base.css"|absURL }}">
|
||||
<link rel="icon" href="{{ "imgs/hm-favicon.png"|absURL }}" type="image/png">
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<a href="{{ "/" | absURL }}">
|
||||
<img id="logo" src="/imgs/logo.png" alt="logo">
|
||||
<a href="{{ ""|absURL }}">
|
||||
<img id="logo" src="{{ "imgs/logo.png"|absURL }}" alt="logo">
|
||||
</a>
|
||||
{{ .Site.Title }}
|
||||
|
||||
|
|
|
@ -3,18 +3,18 @@
|
|||
<head>
|
||||
<title>Hackmeeting 2019</title>
|
||||
<meta charset="UTF-8">
|
||||
<link rel="stylesheet" href="css/home.css">
|
||||
<link rel="stylesheet" href="{{ "css/home.css"|absURL }}">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="canonical" href="http://es.hackmeeting.org/index.html">
|
||||
<meta name="author" content="Hackmeeting">
|
||||
<meta name="description" content="Autogestión, Hacktivismo, CryptoAnarquismo, Hackmeeting">
|
||||
<link rel="icon" href="/imgs/hm-favicon.png" type="image/png">
|
||||
<link rel="icon" href="{{ "imgs/hm-favicon.png"|absURL }}" type="image/png">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<header>
|
||||
<img class="imgCenter" src="imgs/hm-favicon.png"/>
|
||||
<img class="imgCenter" src="{{ "imgs/hm-favicon.png"|absURL }}"/>
|
||||
<h1>{{ .Title }}</h2>
|
||||
<h2>{{ .Params.when }}</h2>
|
||||
<h2>{{ .Params.where }}</h2>
|
||||
|
|
|
@ -2,9 +2,8 @@
|
|||
{{ .TableOfContents }}
|
||||
{{ .Content }}
|
||||
|
||||
{{ range .Pages }}
|
||||
{{ range where .Pages "Params.type" "nodos" }}
|
||||
{{ partial "nodo" . }}
|
||||
{{ .Render "li" }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
|
|
|
@ -35,4 +35,12 @@
|
|||
<li><a href="{{ .Permalink }}">{{.Title}}</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
|
||||
<ul>
|
||||
{{ range .Parent.Parent.Pages }}
|
||||
<li><a href="{{ .Permalink }}">{{.Title}}</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
{{ end}}
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
{{ $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>
|
|
@ -0,0 +1 @@
|
|||
{{ .Inner }}
|
|
@ -0,0 +1,20 @@
|
|||
{{ 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}}
|
|
@ -3,6 +3,7 @@ body {
|
|||
gap: 0 1em;
|
||||
flex-wrap: wrap;
|
||||
flex-direction: row;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
header {
|
||||
|
@ -44,6 +45,53 @@ aside a {
|
|||
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 {
|
||||
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
|
||||
}
|
||||
|
|
|
@ -0,0 +1,169 @@
|
|||
#!/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()
|
|
@ -0,0 +1,15 @@
|
|||
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
|
Loading…
Reference in New Issue