iniziamo!

This commit is contained in:
boyska 2020-01-15 17:10:28 +01:00
commit 27debcfbf2
43 changed files with 2215 additions and 0 deletions

4
.agignore Normal file
View file

@ -0,0 +1,4 @@
*/*.min.css
*/*.min.js
themes/*/static/*/*.min.*
output

7
.gitignore vendored Normal file
View file

@ -0,0 +1,7 @@
output
output/*
.*.sw.
cache
*.pid
*.pyc
.*.swp

73
Makefile Normal file
View file

@ -0,0 +1,73 @@
PY?=python
PELICAN?=pelican
PELICANOPTS=
BASEDIR=$(CURDIR)
INPUTDIR=$(BASEDIR)/content
OUTPUTDIR=$(BASEDIR)/output
CONFFILE=$(BASEDIR)/pelicanconf.py
PUBLISHCONF=$(BASEDIR)/publishconf.py
DEBUG ?= 0
ifeq ($(DEBUG), 1)
PELICANOPTS += -D
endif
VERBOSE ?= 0
ifeq ($(VERBOSE), 1)
PELICANOPTS += -v
endif
all: publish
help:
@echo 'Makefile for a pelican Web site '
@echo ' '
@echo 'Usage: '
@echo ' make html (re)generate the web site '
@echo ' make clean remove the generated files '
@echo ' make regenerate regenerate files upon modification '
@echo ' make publish generate using production settings '
@echo ' make serve [PORT=8000] serve site at http://localhost:8000'
@echo ' make devserver [PORT=8000] start/restart develop_server.sh '
@echo ' make stopserver stop local server '
@echo ' '
@echo 'Set the VERBOSE variable to 1 for some more messages, e.g. make VERBOSE=1 html'
@echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html'
@echo ' '
html:
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
clean:
[ ! -d $(OUTPUTDIR) ] || rm -rf $(OUTPUTDIR)
regenerate:
$(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
serve:
echo http://localhost:8000/
ifdef PORT
pelican -lr -p $(PORT)
else
pelican -lr
endif
devserver:
ifdef PORT
$(BASEDIR)/develop_server.sh restart $(PORT)
else
$(BASEDIR)/develop_server.sh restart
endif
stopserver:
kill -9 `cat pelican.pid`
kill -9 `cat srv.pid`
@echo 'Stopped Pelican and SimpleHTTPServer processes running in background.'
publish:
$(PELICAN) $(INPUTDIR) --ignore-cache -o $(OUTPUTDIR) -s $(PUBLISHCONF) $(PELICANOPTS)
autopublish:
while true; do inotifywait -r content pelicanconf.py publishconf.py Makefile themes -e modify -e create -e delete; make clean publish; sleep 0.1; done
.PHONY: html help clean regenerate serve devserver publish

43
README.md Normal file
View file

@ -0,0 +1,43 @@
Hackmeeting 2019
==================
Sources for Italian Hackmeeting 0x16 (2019) website.
HowTo
-------
So you want to contribute, nice!
```
mkvirtualenv -p `which python3` hackmeeting-website
pip install -r requirements.txt
make all serve
firefox http://localhost:8000/
```
Also, `make help` is your friend.
**Morte ai nemici dell'UTF-8**
Se devi debuggare, `make DEBUG=1`
Aggiungere un talk
--------------------
```
cp -r talks/_talk_example/ talks/MIOTALK/
vim talks/MIOTALK/meta.yaml
```
Quindi rifai `make html` come spiegato prima: l'output ti informa di eventuali errori nei campi o
sovrapposizioni con altri talk, leggilo!
Hacking
---------
Il sito è un'istanza di pelican, più alcuni plugin custom: `langmenu`, per avere un menu che punta alle versioni
localizzate della pagina; `talks`, per gestire i talk in modo speciale.
Il tutto richiede python 2.7, ma prima o poi sarebbe il caso di passare a python 3. Quindi cerca di tenere la
compatibilità, se metti mano al codice python.

0
content/images/.keepme Normal file
View file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

130
content/pages/call.md Normal file
View file

@ -0,0 +1,130 @@
Title: Call for papers
slug: call
navbar_sort: 4
#####Call for papers HACKIT 2019 - Firenze, 30/31 Maggio 1/2 Giugno#####
Sommario:
#INTRO
#PROPORRE UN INTERVENTO
#TALK BREVE
#TALK LUNGO
####INTRO####
Nell'ultimo hackmeeting ospitato a Firenze nel 2011 i Maya annunciavano
la fine dei tempi. Nonostante l'umanità appaia lavorare alacremente in
questo senso, per ora siamo in stand by: persistiamo con ironia nell'inferno
dei viventi.
I tempi non somo troppo felici, nè facili, ma non per questo abbiamo perso
la voglia di giocare e smontare il mondo. Grosse nubi di ignoranza e velleità
autoritarie producono una pioggia acida che corrode la società tutta.
Serve un ombrello robusto, per questo ci prepariamo ad un nuovo hackmeeting:
30/31 maggio, 1/2 giugno a Firenze,
presso il csa nEXt Emerson (http://www.csaexemerson.it).
Dobbiamo fare la nostra parte, e giocare dalla parte giusta.
Se una visione critica della tecnologia è sempre stata necessaria,
oggi vorremmo mettere l'accento sul metodo che negli anni abbiamo proposto
come linea guida del nostro agire: l'autogestione.
A un modello sociale edificato sulla paura e l'emergenza, sul profitto
elevato a ago della bilancia dell'umane vicende e incantesimo di guarigione
per qualsiasi male, vorremmo opporre il nostro modo di stare al mondo
condividendo beni e saperi. Non vorremmo parlarne nei termini di una vaga idea
o generica linea guida o aspirazione, ma in qualità di pragmatica
capacità organizzativa basata sulla solidarietà e la messa in comune di
conoscenze, metodi e mezzi.
Crediamo fortissimamente nella contaminazione delle discipline:
dall'informatica alla fisica, dalla meccanica alla filosofia, dall'agricoltura
alla matematica, dalla logica all'arte, dall'architettura all'antropologia,
e continuate voi con gli abbinamenti che preferite.
Siamo persone curiose in ogni campo, e riconosciamo la necessità di intrecciare
le esperienze per indagare la complessità del reale, senza arroganti
semplificazioni di comodo.
Per farsi un'idea degli argomenti trattati ad hackit puoi leggere i programmi
degli anni passati su
http://www.hackmeeting.org
e chi siamo e altre info su
http://www.hackmeeting.org/about
http://www.hackmeeting.org/info
Se condividi il nostro approccio, e vuoi partecipare a questo gioco
che dura 4 giorni, ma più probabilmente tutta la vita, ti chiediamo
di impegnarti un poco per produrre dei contenuti: più la comunità contribuisce,
più hackit sarà interessante.
####PROPORRE UN INTERVENTO####
Allestiremo tre sale, più un quarto spazio jolly, per discussioni improvvisate
o per seminari che sforano sull'orario previsto. Non ci sono rigide
indicazioni riguardo alla durata degli interventi, tieni però presente che
sebbene il tempo sia una dimensione dell'anima, la fisiologia umana a ricondurlo
a una certa finitezza del medesimo, inoltre incastrare una chiaccherata di
31 minuti e 14 secondi in una griglia oraria è molto più difficile rispetto
ad una di 1 o 2 ore.
Per orientarsi possiamo offrire qualche indicazione basata sulla più che
ventennale esperienza di hackit.
####TALK BREVE####
Se l'intervento è più una suggestione o non te la senti di parlare per
troppo tempo, sono previsti alcuni momenti dedicati ai "ten minutes talks".
Di solito si tengono a fine giornata, nella sala più capiente
e qualcuno si occuperà di segnalare lo sforamento eccessivo dei dieci minuti.
Puoi segnarti direttamente in loco durante hackit, oppure iscriverti alla lista
hackmeeting(at)inventati.org
e mandare una mail con subject
[TEN] titolo
nel messaggio una breve spiegazione
####TALK LUNGO####
Se invece intendi proporre un intervento più lungo
manda una mail con subjet
[TALK] titolo
e le seguenti informazioni nel messaggio
Durata prevista
Orario/Giorno preferito
Breve Spiegazione
Eventuali link e riferimenti utili
Nickname
Lingua
La griglia degli orari viene creata, comunicando via via i cambiamenti in lista
cercando di rispettare le preferenze in termini di orari/giorni.
Durante hackit verrà delineato un percorso di base, quindi non intimidirti:
divulgativo o tecnoSciamanicoDiIncomprensibileArgomentoDiOscuraMagiaNeraIntriso,
se fatto con passione e impegno tutto può avere un senso e essere utile per
qualcun'altro.
Se non hai un seminario da proporre, ma ti piacerebbe sentire parlare di
qualche argomento in particolare, può seguire gli stessi passaggi indicati
per la proposta dei talk, ma usare come subjet
[TALK RICHIESTA] titolo
e una breve spiegazione della richiesta

View file

@ -0,0 +1,15 @@
Title: Come arrivare
slug: come-arrivare
navbar_sort: 2
lang: en
Hackit will be at csa nEXT Emerson,via di Bellagio n°15(Florence)
* **By bus**: you have to take the t1 line that goes to careggi,from Santa Maria Novella, stay until "Vittorio Emanuele II" stop and continue with n°2 towards Calenzano or the n°28 to sesto-fiorentino-volpaia. When you are in via sestese,after the Lidl(groceries store)youll'see a stop that is called "Termine" which may sound like the terminal but it's not the case.Once you get there, go all the way down the street,at the roundabout go right,in "via Reginaldo Giuliani".Immediately on the left,you'll find near a gas station the tiny"via di Bellagio" which host NextEmerson,continue a few meters on the left and you did it.
* **By train**: you can comfortably alight at the station of "Firenze Castello",but be careful because the last trains end a 'bit early in the evening.To exit from the station go to the right in the subway and you'll see a parking area,keep going on the tree-lined street until a roundabout,now you should see a bar
facing you,cross the street while looking at the bar,continue towards the gas station in "via Reginaldo Giuliani", the "via di Bellagio" is on the left after a few meters
* **By car**: you're cool with maps? Good but don't forget that "via di Bellagio" is a sweet and little street don't, choke her,park in the near "Reginaldo Giuliani" or if you really can't in the parking area at the station of Castello.

View file

@ -0,0 +1,15 @@
Title: Come arrivare
slug: come-arrivare
navbar_sort: 2
lang: it
Hackit sarà presso il csa nEXt Emerson in via di Bellagio, 15 (Firenze)
come si arriva…
* **…in autobus**: ci sono due autobus utili, il 28 e il 2. Prima entrambi si potevano prendere dalla stazione di Santa Maria Novella, dallinaugurazione della tramvia non più (grazie Nardella, grazie). Adesso per raggiungerci dovete prendere la tramvia (linea T1, direzione Careggi) dalla stazione di Santa Maria Novella, scendere alla fermata Vittorio Emanuele II e proseguire con il 2 (direzione Calenzano) o il 28 (direzione Sesto Fiorentino-Volpaia). Scendete in via Sestese, poco dopo la Lidl (sulla sinistra). La fermata si chiama "Termine" per confondere i foresti, ma non c'entra niente con il capolinea.
Una volta scesi arrivate in fondo alla strada, alla rotonda girate a destra, in Via Reginaldo Giuliani. Subito sulla sinistra trovate la piccola via di Bellagio (allaltezza del benzinaio) . Il NextEmerson e in via di Bellagio, fatti pochi metri, sulla sinistra.
* ** …in treno**: Si arriva comodamente in treno scendendo alla stazione di Firenze Castello. Occhio pero perche gli ultimi treni per tornare indietro finiscono presto la sera. Si esce dalla stazione andando a destra nel sottopassaggio, ci si ritrova in un parcheggio, si procede lungo il vialetto alberato fino a una rotonda, di fronte a voi ce un bar, attraversata la strada guardando il bar, procedete a destra verso il benzinaio in Via Reginaldo Giuliani. Il NextEmerson e in via di Bellagio, fatti pochi metri, sulla sinistra.
* **…in auto**: Tanto c'avete il navigatore. Pero' vi chiediamo un'accortezza: via di Bellagio e' piccola e tenera, non la intasate di macchine parcheggiate malamente. Parcheggiate nella limitrofa via Reginaldo Giuliani o, se proprio non trovaste stranamente posto, nel grande parcheggio della Stazione di Castello.

View file

@ -0,0 +1,17 @@
Contact
###########
:slug: contact
:navbar_sort: 6
:lang: en
**Mailing List**
There is a `mailing list <https://www.autistici.org/mailman/listinfo/hackmeeting>`_ where you can ask for info and follow the discussions about the meeting. It is mostly in italian but feel free to ask questions in english.
**IRC**
There is also an IRC (Internet Relay Chat) channel where discuss and chat with other participants: connect to server ``irc.autistici.org`` and join channel ``#hackit99`` (again, it will be mostly in italian, but english speakers are welcome).
If you prefer XMPP/Jabber, you can reach the same channel as room ``#hackit99@mufhd0.esiliati.org`` (please
include the hash)

View file

@ -0,0 +1,16 @@
Contatti
###########
:slug: contact
:navbar_sort: 6
:lang: it
**Mailing List**
La comunità Hackmeeting ha una `lista di discussione <https://www.autistici.org/mailman/listinfo/hackmeeting>`_ dove poter chiedere informazioni e seguire le attività della comunità. La lista ha un `archivio pubblico <http://lists.autistici.org/list/hackmeeting.html>`_, quindi puoi leggerla anche senza iscriverti. L'iscrizione è invece necessaria per scrivere.
**IRC**
Esiste anche un canale IRC (Internet Relay Chat) dove poter discutere e chiacchierare con tutti i membri della comunità: collegati al server ``irc.autistici.org`` ed entra nel canale ``#hackit99``.
Se preferisci XMPP/Jabber, puoi raggiungere lo stesso canale come ``#hackit99@mufhd0.esiliati.org`` (includi il cancelletto).

View file

@ -0,0 +1,16 @@
About
#####
:navbar_sort: 1
:lang: en
:slug: index
May30-June2, 2019 / Firenze
========================================
Hackmeeting is the yearly Italian digital counter-cultures meeting; it gathers those communities that take a hard look at how technologies work in our society. And that's not all. We tell you, just you, in a whisper (don't even tell anybody!): Hack-it is just for real hackers, that is to say for those people who want to manage their own lives as they want and are ready to fight for this right, even though they haven't ever seen a computer in their life.
Three days of lessons, games, parties, debates, crossfires and collective learning, analyzing together those technologies that we use everyday, the way they change and how they can impact on our real or virtual lives; which role we can play in order to redirect these changes and set us free of control from those who want to monopolize their development, letting society crumble and relegating us in even tighter virtual spaces.
**The event is totally self-managed: there are neither promoters nor users, just participants.**

View file

@ -0,0 +1,15 @@
About
###################
:slug: index
:navbar_sort: 1
:lang: es
30/5 - 2/6 2019 / Firenze
========================================
Hackmeeting es el encuentro anual de las contraculturas digitales italianas, de aquellas comunidades que analizan de manera crítica los mecanismos de desarollo de las tecnologías en nuestra sociedad. Pero hackmeeting no es sólo esto, es mucho más. Te lo contamos al oído, no se lo digas a nadie, el hackmeeting es solamente para verdaderos hackers, para quienes quieran gestionarse la vida como quieran y luchan por eso, aunque no hayan visto un ordenador en su vida.
Tres días de charlas, juegos, fiestas, debates, intercambios de ideas y aprendizaje colectivo, para analizar juntxs las tecnologías que usamos todos los días, cómo cambian y cómo pueden impactar en nuestras vidas, tanto reales como virtuales. Un encuentro para indagar qué papel podemos jugar en este cambio y liberarnos del control de aquellos que quieren monopolizar su desarrollo, rompiendo nuestras estructuras sociales y relegándonos a espacios virtuales cada vez más limitados.
**El evento es totalmente autogestionado: no hay ni organizadores ni asistentes, solamente participantes!**

27
content/pages/index.fr.md Normal file
View file

@ -0,0 +1,27 @@
Title: About
Date: 2016-04-17
Slug: index
navbar_sort: 1
lang: fr
30/5 - 2/6 2019 / Firenze
========================================
*Hackmeeting* est le rencontre annuel des cultures numériques alternatives
italiennes, des communautés qui agissent de façon critique face aux mécanismes
de développement des technologies dans notre société. Mais c'est pas seulement
ça: on y trouve bien plus. On te le chuchote à l'oreille, ne le dis à personne:
hackit est seulement pour les vrais hackers, c'est à dire pour ceux/celles qui
veulent conduire leur vie comme ils/elles préfèrent, et qui savent comment se
battre pour accomplir leur objectif; même s'ils/elles n'ont jamais vu un ordi.
Trois jours entre talk techniques, jeux, fêtes, débats, discussions et
apprentissage collectif, tout ça pour étudier tous ensemble les technologies
qu'on utilise tous les jours, leur développement et les changements qu'elles
provoquent dans le réel et le virtuel des nos vies; pour comprendre quel soit
le rôle qu'on puisse jouer pour adresser ces changement vers la libération à
las fois des technologies elles-mêmes et des nos vies.
**L'événement est complètement autogéré: il n'y a que des participants, pas
d'organisateurs, pas d'entrepreneurs.**

25
content/pages/index.rst Normal file
View file

@ -0,0 +1,25 @@
About
#####
:navbar_sort: 1
:lang: it
:slug: index
30maggio-2giugno / Firenze
========================================
L'*hackmeeting* è l'incontro annuale delle controculture digitali italiane, di quelle comunità che si pongono in maniera critica rispetto ai meccanismi di sviluppo delle tecnologie all'interno della nostra società. Ma non solo, molto di più. Lo sussuriamo nel tuo orecchio e soltanto nel tuo, non devi dirlo a nessuno: l'hackit è solo per veri hackers, ovvero per chi vuole gestirsi la vita come preferisce e sa s/battersi per farlo. Anche se non ha mai visto un computer in vita sua.
Tre giorni di seminari, giochi, feste, dibattiti, scambi di idee e apprendimento collettivo, per analizzare assieme le tecnologie che utilizziamo quotidianamente, come cambiano e che stravolgimenti inducono sulle nostre vite reali e virtuali, quale ruolo possiamo rivestire nell'indirizzare questo cambiamento per liberarlo dal controllo di chi vuole monopolizzarne lo sviluppo, sgretolando i tessuti sociali e relegandoci in spazi virtuali sempre più stretti.
**L'evento è totalmente autogestito: non ci sono organizzatori e fruitori, ma solo partecipanti.**
.. image:: images/manifesto-small.jpg
:width: 424px
:height: 600px
:alt: Manifesto dell'hackmeeting 2019 a firenze
:align: center
:target: images/manifesto-web.jpg

91
content/pages/info.en.md Normal file
View file

@ -0,0 +1,91 @@
Title: Info
slug: info
navbar_sort: 1
lang: en
## Info
* **Who is organizing?**
Hackmeeting is a yearly meeting of a community that communicates
through
[a mailing list](https://www.autistici.org/mailman/listinfo/hackmeeting). There
is no distinction between organizers and users. Everyone can subscribe
and partecipate in the organization by visiting the site
[it.hackmeeting.org](https://it.hackmeeting.org) and entering the community.
* **What is an hacker?**
Hackers are curious people, always eager to discover how things are
done. Whether it is technology or not, hackers reclaim freedom to
experiment, disassemble and reassemble things or concepts, to
understand how are they made, to improve them, and then to share how
to do it again. Hackers solve problems and build things, believing in
freedom and sharing. They do not like closed systems. Hackers' forma
mentis is not restricted to the field of software hacking: there are
people that keep the hacker mentality in every existing field, driven
by their creative impulse.
* **Who holds the talks?**
Whoever wants to. If someone wants to propose a talk, they just has to
propose it on the mailing list. If the proposal is well received, it
gets on calendar. If there are some problems, the community will be
happy to help improve the proposal.
* **Whats in there, besides talks?**
There is a LAN space, as to say an area dedicated to the net: everyone
can plug their laptop, forming a network with the other participants. In
general, this is the right place to meet other attendees, to ask for
help in installing Linux, to solve a doubt, or just to have a chat.
Hackmeeting is an open-air festival, a meeting, an hacking party, a
moment of consideration, an occasion to learn something together, an act
of rebellion, an exhange of ideas, experiences, dreams, utopias.
* **How much does it cost?**
Traditionally, entrance in Hackmeeting is totally free: always keep in
mind that organizing the event has a cost. Expenses are sustained
through voluntary contributions, selling shirts and other gadgets and
sometimes through the earnings of the bar.
Please donate whatever you can, every small donation counts.
* **Eating**
There is a self-organized kitchen, and we invite everyone to
participate. As for every year, alimentary restrictions of every type
will be respected, so there will be vegetarian and vegan meals.
We also try to respect any other necessity (gluten-free meals and so
on), if this is your case please write it in
the mailing list.
* **What shall I bring?**
If you want to bring a computer, take a power
strip too. Do not forget networking hardware (like Ethernet cables,
switches, WiFi access points). Remember to bring the hardware that
you will want to hack in company. We will try to get some internet
connection for everybody to share, but we can't really guarantee anything.
If you think that you need it, bring a 3G/4G stick with you
and the necessary to share it with friends! Try to be as independent
as possible regarding your hardware.
* **May I arrive before Thursday?**
Do you want to arrive sooner? Wonderful! In the preceding days there is
always much to do (arrange network infrastructure, arrange seminar halls and
many other things) so any helping hand is well accepted.
Maybe just let us know in advance by sending a message in the list!
* **May I take photos, make videos, post, tag, share, upload?**
We think that the freedom to choose the dimensions of ones own private
sphere and public profile must be guaranteed to every participant: in
this spirit, photos and/or videos are admitted only if explicitly
authorized by every person that appears in the media. Nobody should be
photographed without knowing.
Many people at Hackmeeting really care about their privacy, please ask
before taking a picture.
* **How are people expected to behave?**
Hackmeeting is a self-managed space, a temporary independent space and
whoever passes through is expected to behave according to the principles
of antisexism, antiracism and antifascism. If you are victim or witness
of an act of oppression, aggression, brute force, port scan, ping flood
and other non-consensual DOS and you do not know how to react, always
count on the communitys support and do not hesitate to attract
attention and ask for help.

55
content/pages/info.md Normal file
View file

@ -0,0 +1,55 @@
Title: Info
slug: info
navbar_sort: 1
## Info
* **Dove**
Firenze, csa nEXt Emerson, via di Bellagio 15, http://www.csaexemerson.it
* **Quando**
30,31 Maggio, 1,2 giugno 2019
* **Dormire**
Sarà allestito uno spazio al chiuso (portatevi materassino e sacco a pelo) e uno allaperto per tende e camper. Se avete intenzione di venire in camper o furgone vi preghiamo di avvisare in lista, perchè i posti sono limitati. Nel quartiere di Castello (quello in cui si trova il NextEmerson) vi sono alcune strutture tipo b&b e pensioni, altrimenti potreste anche cercare in zona Sesto Fiorentino, paese limitrofo, e usare i mezzi pubblici per spostarvi (che però terminano le corse entro l'una di notte).
* **Mangiare**
Saranno garantiti colazioni/pranzi/cene a un prezzo popolare, a poca distanza dal centro sociale ci sono alcuni bar e negozi per acquistare cibo e bevande.
* **Docce**
Ci saranno 4 docce a disposizione, sicuramente 3 con acqua calda (speriamo di terminare in tempo anche la quarta...)
* **Come arrivare**
Vedi [sezione apposita](https://www.hackmeeting.org/hackit19/come-arrivare.html) del sito
* **Chi organizza l'hackmeeting?**
Lhackmeeting è un momento annuale di incontro di una comunità che si riunisce intorno a [una mailing list](https://www.autistici.org/mailman/listinfo/hackmeeting). Non esistono organizzatori e fruitori. Tutti possono iscriversi e partecipare allorganizzazione dell'evento, semplicemente visitando il sito www.hackmeeting.org ed entrando nella comunità.
* **Chi è un hacker?**
Gli hacker sono persone curiose, che non accettano di non poter mettere le mani sulle cose. Che si tratti di tecnologia o meno gli hackers reclamano la libertà di sperimentare. Smontare tutto, e per poi rifarlo o semplicemente capire come funziona. Gli Hackers risolvono problemi e costruiscono le cose, credono nella libertà e nella condivisione. Non amano i sistemi chiusi. La forma mentis dellhacker non è ristretta allambito del software-hacking: ci sono persone che mantengono un atteggiamento da hacker in ogni campo dellesistente, spinti dallo stesso istinto creativo.
* **Chi tiene i seminari?**
Chi ne ha voglia. Se qualcuno vuole proporre un seminario, non deve fare altro che proporlo in lista. Se la proposta piace, si calendarizza. Se non piace, si danno utili consigli per farla piacere.
* **Ma cosa si fa, a parte seguire i seminari?**
Esiste un “lan-space”, vale a dire unarea dedicata alla rete: ognuno arriva col proprio portatile e si può mettere in rete con gli altri. In genere in questa zona è facile conoscere altri partecipanti, magari per farsi aiutare a installare Linux, per risolvere un dubbio, o anche solo per scambiare quattro chiacchiere. Lhackmeeting è un open-air festival, un meeting, un hacking party, un momento di riflessione, unoccasione di apprendimento collettivo, un atto di ribellione, uno scambio di idee, esperienze, sogni, utopie.
* **Quanto costa lingresso?**
Come ogni anno, lingresso allHackmeeting è del tutto libero; ricordati però che organizzare lHackmeeting ha un costo. Le spese sono sostenute grazie ai contributi volontari, alla vendita di magliette e altri gadget e in alcuni casi allintroito del bar e della cucina.
* **Cosa posso portare**
Se hai intenzione di utilizzare un computer, portalo accompagnato da una ciabatta elettrica. Non dimenticare una periferica di rete di qualche tipo (vedi cavi ethernet, switch e/o dispositivi WiFi). Ricordati inoltre di portare tutto lhardware su cui vorrai smanettare con gli altri. Durante levento la connessione internet sarà estremamente limitata dato il posto ma, se vuoi essere assolutamente sicuro di poterti connettere, portati una pennina 4G e il necessario per condividerla con gli amici! In generale, cerca di essere autosufficiente sul lato tecnologico.
* **Posso arrivare prima di giovedì?**
Vuoi arrivare qualche giorno prima? Fantastico! Nei giorni precedenti ad hackmeeting ci sono sempre molte cose da fare (preparare linfrastruttura di rete, preparare le sale seminari, e tanto altro!) quindi una mano è ben accetta. Dai un'occhiata alla mailing list per organizzarti.
* **Posso scattare foto, girare video, postare, taggare, condividere, uploadare?**
Pensiamo che ad ogni partecipante debba essere garantita la libertà di scegliere in autonomia lampiezza della propria sfera privata e dei propri profili pubblici; per questo allinterno di hackmeeting sono ammessi fotografie o video solo se chiaramente segnalati e precedentemente autorizzati da tutte e tutti quanti vi compaiano.
Le persone che attraversano hackmeeting hanno particolarmente a cuore il concetto di
privacy: prima di fare una foto, esplicitalo.
* **Come ci si aspetta che si comportino tutte e tutti?**
Hackmeeting è uno spazio autogestito, una zona temporaneamente autonoma e chi ci transita è responsabile che le giornate di hackit si svolgano nel rispetto dellantisessismo, antirazzismo e antifascimo. Se subisci o assisti a episodi di oppressione, aggressione, brute force, port scan, ping flood e altri DOS non consensuali e non sai come reagire o mitigare lattacco, conta sul sostegno di tutta la comunità e non esitare a richiamare pubblicamente lattenzione e chiedere aiuto.

View file

@ -0,0 +1,31 @@
Schedule
===========
:slug: schedule
:navbar_sort: 3
:lang: en
Recording of talks can be found `here
<https://archive.org/search.php?query=creator%3A%28radiowombatfirenze%29%20AND%20subject%3A%28hackmeeting%202019%29>`_.
`Add the schedule <schedule.ics>`_ as a calendar
The schedule is still work in progress: a large part of hackmeeting
contents are scheduled last-minute!
Read the `call for contents (Italian) <http://lists.autistici.org/message/20170502.165954.0e930b75.en.html>`_ and propose yours in `mailing list <{filename}contatti.rst>`_.
Contents in a language other than Italian are not only accepted, but
appreciated!
Hackmeeting (still) hasn't a proper translation system, but you can
find a bunch of people to ask to do translations when you need it.
.. talkgrid::
:lang: en
.. talklist::
:lang: en

View file

@ -0,0 +1,25 @@
Programma
===========
:slug: schedule
:navbar_sort: 3
:lang: it
Gli audio dell'hackmeeting sono disponibili `qui
<https://archive.org/search.php?query=creator%3A%28radiowombatfirenze%29%20AND%20subject%3A%28hackmeeting%202019%29>`_.
`Aggiungi il programma <schedule.ics>`_ di hackmeeting nel tuo calendario.
Il programma è soggetto a variazioni continue: vieni ad hackmeeting e vivitelo!
Fatti coraggio, proponi il tuo contenuto in `mailing list <{filename}contatti.rst>`_: crea un nuovo thread
dedicato alla tua proposta. Nel subject inserisci ``[TALK]``
(ad esempio ``[TALK] come sbucciare le mele con un cluster di GPU``) così che sia facile ritrovarlo per chi è
interessato.
.. talkgrid::
:lang: it
.. talklist::
:lang: it

73
content/pages/stampa.rst Normal file
View file

@ -0,0 +1,73 @@
Stampa
#########
:slug: press
:navbar_sort: 10
:lang: it
.. Rassegna stampa
====================================
https://motherboard.vice.com/it/article/ev8dwn/come-costruire-una-calcolatrice-con-i-bicchieri-d-acqua
Cartella stampa
====================================
TODO
Propaganda
==========
I manifesti possono esser scaricati qui (in formato
`jpeg <images/manifesto-web.jpg>`_).
`Logo/adesivo <images/adesivo-finale.jpg>`_.
Foto
==========
* .. image:: images/press/2016-IMG_0578.jpg
:width: 300px
:height: 200px
:alt: La bacheca dei seminari dell'hackmeeting 2016, a Pisa
:target: https://hackmeeting.org/hackit16/images/photos/IMG_0578.jpg
* .. image:: images/press/2016-IMG_0581.jpg
:width: 300px
:height: 171px
:alt: Sessione di elettronica digitale
:target: https://hackmeeting.org/hackit16/images/photos/IMG_0581.jpg
* .. image:: images/press/2016-IMG_0584.jpg
:width: 300px
:height: 200px
:alt: Programmazione
:target: https://hackmeeting.org/hackit16/images/photos/IMG_0584.jpg
* .. image:: images/press/2016-IMG_0586.jpg
:width: 300px
:height: 200px
:alt: Computer
:target: https://hackmeeting.org/hackit16/images/photos/IMG_0586.jpg
* .. image:: images/press/2016-IMG_0589.jpg
:width: 300px
:height: 200px
:alt: Il LAN party: un posto dove sperimentare insieme
:target: https://hackmeeting.org/hackit16/images/photos/IMG_0589.jpg
* .. image:: images/press/2016-IMG_0574.jpg
:width: 200px
:height: 300px
:alt: Un hack su Emilio: il famoso robottino degli anni '90 è stato riprogrammato
:target: https://hackmeeting.org/hackit16/images/photos/IMG_0574.jpg
Comunicati stampa
=================
Presto disponibili.

210
content/pages/storia.md Normal file
View file

@ -0,0 +1,210 @@
Title: Storia
slug: storia
navbar_sort: 8
####La storia dell'HackMeeting
* **1998 - Firenze - CPA Firenze Sud**
Viene organizzato il primo hackmeeting al Cpa di Firenze. [Strano Network](http://strano.net/), [Avana BBS](http://avana.forteprenestino.net/), [Ecn](http://www.ecn.org), [Freaknet](http://www.freaknet.org), Decoder, Metro Olografix e la rete
Cybernet decidono di fare un meeting perché quattro anni prima cera stato un primo giro di vite contro gli hacker italiani. Il problema era
che i media iniziavano ad accorgersi che cera il fenomeno digitale e identificavano il tentativo di capire la logica delle nuove tecnologie
come fenomeno “criminali”. La comunità hacker invece voleva sottolineare che il computer era uno strumento di massa, domestico e non solo
tecnico-universitario o militare, di controllo o di mercato.
Linformazione che su quella rete di pc passava, doveva essere libera. Radio Cybernet strimmava i seminari su web, prima webradio italiana. Da
allora, la radio ci sarà praticamente ogni anno. I tre giorni di Firenze sono quelli in cui e nato limpianto dellhackmeeting attuale. Il
messaggio era: usciamo dal digitale e portiamo nel reale e alla portata di tutti questioni tecniche e opportunità di comunicazione diretta;
siamo noi a dirtelo senza mediazioni (”dont hate the media, become the media” da lì a qualche anno avrebbe affiancato “information wants to be
free”). Quellanno per esempio esce Kryptonite, un libro che raccoglie how-to su strumenti specifici, legati alla privacy e allanonimato
(anonimous remailer, gpg, packet radio). Lintenzione divulgativa dellhackmeeting è chiara. Allhackmeeting partecipa tutta la scena più
rappresentativa dellunderground italiano. La prima generazione di hacker che si riconosce nel termine non nel senso più comunemente
attribuito dai media. Strumenti tecnici: corsi di linux per principianti e workshop sulla accessibilità delle tecnologie e dei siti.
* **1999 - Milano - Deposito Bulk**
Viene deciso collettivamente di uscire dalla dimensione dei tre giorni per darsi spazi tutto lanno, e dare origine agli hacklab dove
incontrarsi, avere un laboratorio, condividere il lavoro, divulgare tematiche. Ospite di rilievo è Wau Holland, un hacker libertario
cofondatore del Chaos Computer Club, che senza carta di identità arrivò in Italia in modi rocamboleschi. Connessioni internazionali vengono
fatte conoscere alla comunità italiana. Strumenti tecnici: si ricorda il seminario su attaccare i protocolli di comunicazione (ip icmp tcp udp +
servizi), per capire/spiegare un po meglio come funzionano i protocolli di rete e quindi dove e perché sono vulnerabili. Un altro tema che
diventerà ricorrente negli hackmeting.
* **2000 - Roma - Forte Prenestino**
Sede di Avana BBS, primo hackmeeting organizzato con gli hacklab, diventati ormai realtà concrete. Jaromil si presenta con asciicam,
costruendo le relazioni declinate in altri ambiti come la net art, aspetto artistico, giocoso e capace di critica dellhacking. È anche un
hackmeeting dedicato ai diritti in rete, alla cooperazione sociale, allaccessibilità in rete. Molti i seminari su etica e web.
* **2001 - Catania - Freaknet media lab**
Un posto particolare, visto che era nato prima degli hacklab e già si apriva al pubblico con i bollettini meteo per i pescatori, via internet,
e le tastiere in arabo per gli immigrati. È lhackmeeting più forte dal punto di vista del numero di ore passato sul codice. Viene presentato il
progetto autistici.org/inventati.org come server autogestito che si affiancava a ecn. Viene presentato anche Bolic1, che diventerà poi
Dynebolic (the media hacktivist tool). Il Freaknet propone nelluniversità scientifica di Catania che si adotti il software libero
come software di base e allhackmeeting viene proposto di estenderlo anche ad altre città. Passeranno per questo meeting anche quelli che poi
creeranno il media center del G8. Vengono proposti strumenti e persone che poi si coaguleranno per dare vita a media come Indymedia. Si inizia
a parlare di reddito e lavoro nella net economy. Strumenti tecnici: si tiene un seminario di reverse engineering, ovvero
modificare il comportamento di un programma senza conoscere il codice sorgente.
* **2002 - Bologna - TPO**
Hackmeeting mondano. la parola mediattivismo è uscita e diffusa, Indymedia è un media consolidato, NGvision rappresenta un archivio video
su web consistente, ci sono le telestreet, lhackmeeeting diventa non più solo da hacker ma da attivismo media, e non a caso compaiono le
donne. Viene Richard Stallman. Strumenti tecnici: viene presentato il Retrocomputing ovvero la passione per il recupero dellhardware.
* **2003 - Torino - Barrio**
Viene fatto il mitico seminario di stiraggio acrobatico e la questione genere/tecnologie viene proposta dal Sexy shock di Bologna, collettivo
di donne, sottolineando che ci sono questioni di genere anche tra hacker e che sarebbe il caso di occuparsene. Alle aule vengono dati nomi
storici dellanarchismo. Strumenti tecnici: Honeypots, sicurezza informatica sul web sono tra gli argomenti trattati. Wireless diffuso.
* **2004 - Genova - Buridda**
Si apre ulteriormente lambito, vengono presentati seminari di robotica, ma anche sulla prostituzione. E sopratutto a partire da Reload di Milano
viene lanciato il concetto di reality hacking, hacking della vita quotidiana e della politica, chiedendo agli hacklab di uscire dagli
stretti ambiti nerd per entrare in quelli più allargati dellagire politico. Strumenti tecnici: Bluetooth security uno dei seminari.
* **2005 - Napoli - TerraTerra**
Viene presentato Open non è free, il secondo libro che esce dalla comunità di hackmeeting. Visto che nella società iniziano a circolare i
concetti di open source e di free software, la comunità sente la necessità di sottolineare la necessità di approcciare in maniera critica
queste tematiche che sono comunque ormai assorbite anche dal mercato. Strumenti tecnici: introduzione al Phreaking, ovvero come telefonare
gratis, dal fischietto di Captain Crunch al vOIP.
* **2006 - Parma - Collettivo Mario Lupo**
Gli hacklab non sono più lelemento principale di organizzazione ma cè una percezione più comunitaria che permette loccupazione di uno spazio
per la durata dellhackmeeting. Loccupazione avviene in un momento ambiguo e cosparso di sgomberi nel territorio parmense e prende la forma
politica di una TAZ, anche se cera la speranza di fare molto di più (tenere il posto, che poi invece verrà sgomberato). Nellambito dei
seminari si apre ulteriormente lapplicazione della filosofia hack in ambiti vari, per esempio, serpicanaro e la licenza open per la
produzione materiale, bucare un sistema che non è solo informatico ma reale e di mercato. Viene presentato The darkside of Google, altro libro
scritto da persone della comunità su aspetti ancora (allora) poco noti di Google. Strumenti tecnici: Web Semantico e Ontologie informatiche; si discute di Copyleft e fightsharing.
* **2007 - Pisa - Rebeldia**
Rispetto allanno precedente si recupera di nuovo sul profilo internazionale, vengono Emmanuel Goldstein, parte della scena americana storica dei phreakers e media hacktivist. Andy Muller Maghun, membro del CCC, esordisce dicendo “il CCC nasce come progetto politico”, segno di come in Europa sin dall82 si considerava il potenziale politico dellhacking come concetto, Armin Medosh, che fa una ricostruzione storica in chiave marxista dellevoluzione tecnologica. Appaiono seminari che impongono una presa di coscienza collettiva ecologica: viene fatto il seminario “hack the bread”, che riporta laccento su pratiche politiche anche a livello personale. Viene introdotto lo spazio capanne dei suchi, uno spazio diverso dal workshop, di discussione libera e lavoro in comune. Strumenti tecnici: metodi di compromissione dellanonimato, come difendersi. Voip Security, necessità di attenzione anche su Voip. IPSec, Meccanismi per proteggersi da attacchi basati sullanalisi statistica del traffico (Web site fingerprinting, etc ).
* **2008 - Palermo - AsK 191**
Hackmeeting importante per il luogo, lincontro con le persone dellAsk ha prodotto un momento di autogestione in comune molto forte. Conferma
spirito forte comunitario, non molto aperto perché non cera risposta da parte del pubblico palermitano. Limpronta ecologica continua, si parla
di compost, di rifiuti, di energia solare e onde radio. Sharing not exploiting: Prosumer vs. Corporation, riflessione su social network e
web 2.0, ritorni economici delle corporation. Dal punto di vista dellimmaginario compare il workshop sullo steampunk, il dopo cyberpunk.
Strumenti tecnici: Web semantico, come approccio al web 3.0
* **2009 - Rho - Fornace**
Di nuovo lhackmeeting va a supportare unautogestione in difficoltà. Lo scenario è Rho, hinterland milanese devastato dalla speculazione Expo,
un enorme capannone vuoto occupato da pochi giorni. Si parla di paura, di creazione della paura, di come uscire da questo modello sociale di
persone spaventate, che si guardano in cagnesco. Licona dellhackit è il babau, il cattivo delle favole. Si stabilizza allinterno delle
tematiche linteresse per la questione precariato e modelli di vita conseguenti. Si inaugura la pratica dei warm up, seminari che introducono nelle settimane precedenti sia nella città ospite, che nel resto dItalia levento principale. A livello di immaginario si parla di fantascienza, di retrocomputing e restauro, videogiochi per cellulari. Strumenti tecnici: streaming audio/video giss, sniffjoke, reti gsm, reti mesh
* **2010 - Roma - La Torre**
Hackmeeting tra gli ulivi nel caldo romano, tutti in tenda, ci si riprende dallhinterland milanese dellanno prima. Si parla di controllo, di quanto ne abbiamo intorno, di quali strumenti utilizza. Le tematiche ecologiste rientrano dalla porta principale con il seminario sulle pale eoliche, la presentazione della rete per lautocostruzione e il seminario sugli orti urbani. Nel lan space presenti sempre più arduini, e un modello di elicottero radiocomandato. Ospite dellhackit Margaret killjoy, un buffo personaggio dello Steampunk Magazine, un rivista autoprodotta americana, presentata assieme a Ruggine, una rivista autoprodotta italiana di racconti e disegni. Affollatissimo il seminario di pr0n, misterisca e intrigante estensione di firefox. Strumenti tecnici: ipv6 e reti mesh, opencv, arduino.
* **2011 - Firenze - csa nExt Emerson**
Il tema di questa edizione è stato quello dellapocalisse. Dalle nuvole dei disastri nucleari alle nuvole del cloud computing: la tecnologia e la conoscenza quando centralizzate per interessi economici e politici e in contrasto con le aspirazioni individuali e collettive di autonomia portano inevitabilmente alla… apocalisse.
* **2012 - LAquila - Asilo Occupato**
Una presenza significativa in una città come LAquila che non assomiglia più ad una città. Hack the town!! Se non è più possibile riparare i danni, dare un senso a ciò che è andato distrutto, hackmeeting prova a capire se è possibile farla funzionare in un altro modo, partendo dalla ricostruzione dei tessuti sociali e relazionali, delle connessioni vitali della città.
* **2013 - Cosenza - Ex-Officine**
Si è tenuto nellarea occupata delle ex officine Ferrovie della Calabria ed ha avuto come tema la “iattura del controllo”. Lidea dellHackmeeting 2013 era quello di stimolare una nuova saggezza popolare 2.0 per far fronte alle forze avverse che minacciano le libertà di espressione e di condivisione nella rete. Neanche a farlo apposta, fra iatture e superstizioni, proprio nei giorni di questhackmeeting escono le prime rivelazioni di Snowden.
Lattività di chi controlla i movimenti in rete, per affari, o per controllo è il tema chiave, ma gli argomenti trattati sono stati molteplici: dalla privacy alle tecnologie di comunicazione, dalla contrasessualità alle relazioni di inchiesta sui software spia utilizzati da governi e non. Degno di nota è anche lesperimento di media trolling che porta hackmeeting sulle pagine dei più importanti quotidiani nazionali attraverso un divertente e totalmente infondato “scoop”.
* **2014 - Bologna - XM24**
Xm24 ospita gli ultimi 3 giorni di un hackmeeting durato molto più a lungo:
l'articolato percorso di warmup cittadino, coordinato dall'hacklabbo ma che
vede la partecipazione di molte realtà, antagoniste e non, porta ad un'edizione
particolarmente partecipata.
Grazie alla lunga storia mediattivista di Xm24, la visibilità e il carattere
universitario di Bologna e alla rete di comunità che si intrecciano nella lista
hackmeeting prende vita un evento che dimostra alla sua stessa comunità come la
scena sia tutt'altro che morta, ma anzi particolarmente attenta e attiva.
Durante le tre giornate la necessità e la centralita' di un evento costruito
dal basso viene riaffermato con forza non soltato dalla partecipazione della
comunità storica, ma anche dalle assemblee di comunita' trasversali ad
hackmeeting(eg. quella delle WCN italiane), l'affacciarsi di molti volti nuovi
e i moltissimi talk di grande attualità (eg. Citizen Lab con il lavoro sulla
sorveglianza digitale).
PS: il logo è un non morto, non un gorilla, non un fattone ;)
* **2015 - Napoli - Mensa occupata**
Dopo dieci anni Hackmeeting torna a Napoli e si riprende il centro della città.
La collocazione centralissima della Mensa Occupata favorisce lo svolgimento di un hackmeeting di livello non esclusivamentetecnico e molto divulgativo. A meno di due mesi del primo maggio e delle lotte contro Expo, la riflessione sul lato più politico e militante dell'hacking si impone: tecniche di autodifesa neuro-digitali, studio delle legislazioni in materia di intercettazioni, Tor, crittografia e resistenza digitale. Alla comunità si è aggiunta tanta gente nuova e questa diventa l'occasione per reinventarsi. Si scopre che i fritti favoriscono la concentrazione.
* **2016 - Pisa - Polo Fibonacci**
Polo Fibonacci, l'hackmeeting si ritrova a Pisa il 3-5 Giugno e occupa un polo
universitario riempiendolo di giochi, feste, workshop e dibattiti. Per parlare di
tecnologia, di privacy, di sicurezza, ma anche di differenze, di gender e di
piu' inclusione all'interno del hackmeeting.
Si analizzano malware, si discute di crittografia quantistica e
ci si ritrova a giocare a retrogame alle 3 di mattina tra musica punk e la
birra che ormai e' finita da un po'
I bagni non divisi per genere si chiamano come gli editor: VIM, NANO o EMACS, mentre
alcune faccie internazionali e non rispondo ad email e scrivono pezzi di python nel mezzo del Lan Space
mentre altri cercano per la prima volta di installare Linux.
L'attenzione si sposta parecchio sui malware, anche detti captatori informatici
si prova ad analizzarli e vedere la demo di hacking-team, poi Ippolita presenta [Anime Elettriche](http://www.vita.it/it/interview/2016/04/27/anime-elettriche-corpi-digitali-linee-di-fuga-e-tattiche-di-resistenza/52/) e la sera
alcuni propongono giochi sulla comprensione del consenso, tavole rotonde sulle
discussioni di genere e tentativi di migliorare la comunita'
Poi all'improvviso e' gia' domenica e abbracci e baci, si accolla il prossimo
hackit ai Torinesi, ci vediamo in Val Susa.
* **2017 - Venaus, Val di Susa - Borgata 8 Dicembre e Presidio permanente**
E' il ventesimo hackmeeting e per celebrare l'occasione, si pensa di
farlo in un posto diverso. L'idea gira in lista, piace subito e così si parte.
Si impara a saldare, a fare il dado vegetale, a costruire un'antenna, a
farsi il formaggio con il latte di capra.
Si parla di sicurezza digitale, di anonimato, di fisica quantistica, di
cyberspionaggio, di pokemon, di controllo, di radio e di reti mesh.
Ci si mischia con i resistenti valsusini, ci si contagia, si scambiano
racconti, esperienze, sogni.La comunità condivide con la valle, la valle si racconta alla comunità.
Si dorme in tenda si cucina e ci si lava all'aperto, si cena al cantiere
di Chiomonte, si cammina in montagna.
Tagliare le reti, insomma, ci sta!
* **2018 - Buridda Genova**
Dopo 14 anni hackmeeting torna a Genova, nelle stanze del Buridda.
L'impronta del luogo è sicuramente l'attenzione all'autocostruzione, ma
non mancano dibattiti storici come la presentazione del numero di
Zapruder (numero dedicato all'hacking), una spiegazione pratica degli
avanzamenti crittografici negli ultimi anni, un workshop con pc e USB
alla mano come quello su Tails ed anche confronti interessanti e
contraddittori sui temi tecnici e politici come quello sul voto elettronico.
Viene presentato Stop al Panico, una raccolta di suggermenti tecnici e
legali da affrontare in caso di sequestro, si parla di sistemi operativi
alternativi per cellulari.
Si discute di social, di nolike e dell'uso tossico di questi strumenti,
riflettendo su come riappropriarci delle tecnologie "social" anche
presentando l'esperimento Bolognese di mastodon.bida.im
Dopo 3 giorni intensi, l'assemblea della domenica è molto partecipata:
scopriamo che i posti che hanno ospitato l'hackmeeting riprendono
energie mentre in varie città stanno nascendo vari hacklab mossi non
solo dalla volonta di smontare e comprendere la tecnologia come un tempo
o dalla mancanza di internet in casa, ma dal desiderio di incontrarsi,
discutere e condividere le impressioni su questi strumenti che oggi
abbiamo intorno e cercare alternative comuni insieme.
Ultimo giro al bar, dove quest'anno la birra non e' ancora finita, poi
una tuffo al mare per chi riesce, saluti sparsi a tutte le creature di
questo hackmeeting con la promessa di rivederci presto a sud a nord
online o offline, non fa differenza, l'importante e' che ci siamo.

155
content/pages/warmup.rst Normal file
View file

@ -0,0 +1,155 @@
Warmup
======
:slug: warmup
:navbar_sort: 5
:lang: it
Cosa sono
--------------
I warmup sono eventi "preparatori" ad hackmeeting. Avvengono in giro per l'Italia, e possono trattare gli argomenti più disparati.
Proporre un warmup
------------------
Vuoi fare un warmup? ottimo!
* iscriviti alla `mailing list di hackmeeting <https://www.autistici.org/mailman/listinfo/hackmeeting>`_.
* scrivi in mailing list riguardo al tuo warmup: non c'è bisogno di alcuna "approvazione ufficiale", ma segnalarlo in lista è comunque un passaggio utile per favorire dibattito e comunicazione.
Elenco
---------
.. contents:: :local:
Marzo
+++++++
13 Marzo h 19, La ricreazione al silicio, @ `Hacklab Ifdo <https://ifdo.noblogs.org>`_ - `Polveriera Spazio Comune <https://lapolveriera.noblogs.org>`_ - Firenze
##################################################################################################################################################################
Appuntamento mensile allhacklab in Polveriera per capire e approfondire le tecnologie smontandole e giocando. Ogni volta verranno proposti dei mini laboratori guidati di cose acarose, usando risorse disponibili on line (capture the flag, insecure vm e robe simili, ovvero ambienti con bug o vulnerabilità create apposta per capire come funziona questo buffo universo).
.. image:: images/warmup-firenze-marzoaprile.jpg
:height: 200px
:alt: Locandina warmup fiorentini di marzo ed aprile
:name: Locandina warmup fiorentini di marzo ed aprile
14 Marzo h 21, Zero Days @ Occupazione viale Corsica 81 - Firenze
#################################################################
Proiezione del documentario "Zero Days" (Alex Gibney, 2016, sub ita), con introduzione a cura di Ifdo Hacklab. Si tratta di una interessante ricostruzione della vicenda Stuxnet, un sabotaggio ai danni di una centrale nucleare iraniana, compiuto attraverso un malware(virus) da parte dell'intelligence isrealiana e statunitense. L'operazione avrà delle conseguenze piuttosto imprevedibili. Il documentario realizzato da un giornalista esperto in tema di intelligence è veramente utile per comprendere il modus cogitandi dietro alla geopolitica di quell'area del medio oriente. Offre anche uno spaccato di quella che viene definita dai media "cyber war", ma che altro non è che guerra a tutti gli effetti.
15 Marzo h 21, Server autogestiti @ `Ateneo Libertario <https://www.autistici.org/ateneolibertariofiorentino>`_, Borgo Pinti 50r - Firenze
##########################################################################################################################################
Servizi e server autogestiti: perchè l'autogestione è importante su Internet, oltre che forse l'unica via per la sopravvivenza di una rete utile alle persone e non mero strumento di controllo o centro di addestramente per consumatori.
20 Marzo h 19, Citizenfour @ studentato PDM, via Ponte di mezzo 27 - Firenze
############################################################################
Proiezione del documentario Citizenfour (Laura Poitras, 2014, sub ita), con introduzione a cura di Ifdo Hacklab. Snowden è ex lavoratore della National Security Agency, che rivelò al mondo diversi progetti segreti di controllo e monitoraggio sulle comunicazioni mondiali utilizzati dall'intelligence americana. La viecnda è trattata dal punto di vista di Snoweden nei giorni della sua fuga dall'USA. Si tratta di un bel documentario, che per quanto valga, ha anche vinto l'oscar come migliore documentario nel 2015. La vicenda Snowden sebbene caduta nel dimenticatoio ha segnato una vera e propria cesura nel mondo della comunicazione digitale aprendo sostanzialmente alla consapevolezza diffusa di Internet come macchina di sorveglianza statale a cui si somma l'Internet della sorveglianza commerciale delle grandi corporations (Google, Facebook, ecc...), rimane aperto il problema di cosa farsene di quel che resta.
A seguire Workshop: "La banalita' del malware, parte prima". Un malware è un software studiato apposta per interagire in maniera stramba e dannosa con i sistemi in cui viene eseguito. Dietro questi programmi vi è una fiorente industria legata alla sicurezza informatica, a cui partecipano apparati statali, malavita e corporations. Ma quanto è complesso lo sviluppo di un malware ? Quanta parte è solo e semplicemente "fuffa" in un mercato pompato ad arte ? Per rendercene conto proveremo a studiare alcuni recenti malware per analizzarne le caratteristiche e capire quanto lavoro ci sia dietro e in che modo la terminologia utilizzata, mascheri spesso caratteristiche piuttosto banali. Si tratta della prima parte, perchè probabilmente vi sarà un'appendice del workshop durante l'Hackmeeting il 30/31 maggio, 1/2 giugno al next emerson.
30 Marzo, Controlla il tuo microcontrollore @ `Avana <https://avana.forteprenestino.net>`_ - `CSOA Forte Prenestino <https://forteprenestino.net>`_ - Roma
##########################################################################################################################################################
Un microcontrollore è un circuito integrato, solitamente collegato ad altri componenti elettronici, programmabile per gestire delle applicazioni specifiche. Se hai sempre desiderato avere la capacità di realizzare dei marchingegni per risolvere i piccoli problemi della vita quotidiana, non perderti questi due appuntamenti che, partendo da conoscenze basilari di programmazione, ti permetteranno di sviluppare i primi progetti di elettronica digitale. Gli incontri si terranno al CSOA Forte Prenestino. Avranno inizio alle 15:30 e consisteranno in una parte teorica della durata di circa un'ora, seguita da un laboratorio pratico.
.. image:: images/warmup-stm32-thumb.jpg
:height: 200px
:alt: Locandina "Controlla il tuo microcontrollore"
:name: Locandina "Controlla il tuo microcontrollore 1/2"
:target: https://avana.forteprenestino.net/
Aprile
++++++++
13 Aprile, Controlla il tuo microcontrollore @ Roma, `Avana <https://avana.forteprenestino.net>`_ - Csoa Forte Prenestino
##########################################################################################################################
Seconda e ultima puntata del corso iniziato il 30 Marzo. Tutte le info su https://avana.forteprenestino.net/
.. image:: images/warmup-stm32-thumb.jpg
:height: 200px
:alt: Locandina "Controlla il tuo microcontrollore"
:name: Locandina "Controlla il tuo microcontrollore 2/2"
:target: https://avana.forteprenestino.net/
17 Aprile h 19, La ricreazione al silicio @ `Hacklab Ifdo <https://ifdo.noblogs.org>`_ - `Polveriera Spazio Comune <https://lapolveriera.noblogs.org>`_ - Firenze
#################################################################################################################################################################
Appuntamento mensile allhacklab in Polveriera per capire e approfondire le tecnologie smontandole e giocando. Ogni volta verranno proposti dei mini laboratori guidati di cose acarose, usando risorse disponibili on line (capture the flag, insecure vm e robe simili, ovvero ambienti con bug o vulnerabilità create apposta per capire come funziona questo buffo universo).
18 Aprile h 18, Il tuo cellulare @ Occupazione via del Leone 60/62 - Firenze
############################################################################
Il cellulare è quell'oggetto che sta sempre con te. Piu' della biancheria intima vive in stretta relazione con la tua persona. Ma sai come funziona ? Cosa significano 2g,3g,4g,5g ? Cosa sia una cella ? Come traccia i tuoi spostamenti ? Quanta cose conosce di te il tuo telefonino e quanto e' difficile accedervi ? Quella che proponiamo è una chiaccherata tecnica, ma non troppo, per analizzare come funziona un cellulare nell'ottica di una sorta di ecologia mentale su un oggetto che trenta anni fa neanche esisteva, e oggi sembra il mondo finisca quando lo si dimentica a casa.
27,28 Aprile `Brugole e merletti <https://doityourtrash.noblogs.org>`_ - `Next Emerson <http://www.csaexemerson.it>`_ - Firenze
################################################################################################################################
Due giorni di workshop e mani in pasta, due giorni per riempire lEmerson di pittura, scultura, installazioni, arti volanti e idee illustrate. Larte dentro, fuori, attraverso le nostre vite e i nostri muri. Brugole e Merletti incontra il NEMA, insomma! E quindi…. workshop pratici di elettronica, costruzione e autoriparazione, artigianato, idee geniali e arti sottovalutate. Live painting, installazioni e allestimenti in diretta del nuovo NextEmersonMuseoAutogestito.
.. image:: images/warmup-brugole.jpg
:height: 200px
:alt: Locandina Brugole e merletti
:name: Locandina Brugole e merletti
Maggio
++++++
3,4 Maggio `Connessioni caotiche <https://https://wiki.unit.abbiamoundominio.org/ConnessioniCaotiche2019>`_, Macao, viale Molise 68 - Milano
#############################################################################################################################################
`Connessioni caotiche 2019 <https://wiki.unit.abbiamoundominio.org/ConnessioniCaotiche2019>`_
5 Maggio h 21.30 @ `k100 <https://k100fuegos.noblogs.org>`_, Via Chiella 4 Campi Bisenzio - Campi Bisenzio (FI)
###############################################################################################################
Presentazione degli aggiornamenti della `"Guida all'autodifesa digitale" <https://numerique.noblogs.org>`_, con una delle traduttrici. Nell'ultimo anno sono stati aggiunti i capitoli sui componenti hardware, l'analisi del rischio e le strategie e strumenti da utilizzare, alcuni casi di studio e esempi. A seguire Mini almanacco di primavera a base di `Coccoli al silicio <https://wombat.noblogs.org/category/podcast/coccoli-al-silicio>`_. Sugose pillole dal mondo dell'hacking, tra intrighi internazionali, malware, ricche corporations che fanno della tua navigazione in rete la loro ricchezza. Selezioni di anedotti, cose buffe, dimostrazioni live, per capire il dietro le quinte di questi maledetti aggeggi elettronici.
11 Maggio h 15 Fedeli alla linea (di comando) @ Csoa COX 18 - Milano
####################################################################
Fedeli alla linea (di comando): Introduzione al terminale su sistemi unix. Per info `Unit <https://unit.abbiamoundominio.org/blog/2019-04-20-fedeli-alla-linea-di-comando.html>`_. Benefit Radio OndaRossa
11 Maggio h 20 Presentazione "L'inconscio tra reale e virtuale" @ Roma, `Avana <https://avana.forteprenestino.net>`_ - Cento celle aperte, via delle resede 5
#############################################################################################################################################################
Dalle 20 cena benefit per radio ondarossa. Dopo cena presentazione del libro "L'inconscio tra reale e virtuale" e dibattito con le dita nella presa: un'occasione per parlare di come la costante mediazione con i social network contribuisce a plasmare la nostra identità... Per info `Ror <http://www.ondarossa.info/iniziative/2019/05/presentazione-linconscio-reale-e>`_.
11 Maggio Lancio e presentazione di Stereodon.social @ Bologna, XM24
####################################################################
Bologna Elettrica insieme al collettivo Bida presenterà una nuova istanza mastodon focalizzata sulla musica. Stereodon ha l'obbiettivo sia di incentivare una discussione critica sullinfluenza del capitale nella musica, sia di provare a modificare concretamente le modalità di diffusione di essa slegandola dalla logica del profitto. Per info `<http://www.ecn.org/xm24/evento/bologna-elettrica-2019>`_.
14 Maggio h 19 Plaguemon: an interactive workshop @ Rende(Cosenza), Aula P2 Occupata
####################################################################################
Workshop interattivo per svelare i retroscena della genesi di Plaguemon, un'opera d'arte digitale nata dall'hacking del famoso videogioco per Game Boy: Pokemon Rosso. Impareremo a vivisezionare mostri digitali insieme al creatore di Plaguemon: Michele 'Hiki' Falcone. Durante la serata Hiki ci accompagnerà negli oscuri meandri del ROM hacking, districandoci tra i misteri dello Z80 assembly e le meraviglie monocromatiche della pixel art.
15 Maggio h 18 Proiezioni di The Internet's Own Boy: The Story of Aaron Swartz @ Firenze, Aula Apollo, Brunelleschi
###################################################################################################################
Intro e proiezioni a cura di Ifdo hacklab.
15 Maggio Presentazione Tails @ Bologna, XM24
#############################################
Caratteristiche principali e dimostrazione pratica di Tails. The Amnesico Incognito Live System é un sistema operativo "live" che ha come obiettivo preservare la tua privacy e anonimato. Per info `<http://www.ecn.org/xm24/evento/warmup-hackmeeti%E2%80%A6sentazione-tails/>`_.

16
new-year.md Normal file
View file

@ -0,0 +1,16 @@
Anno nuovo sito nuovo
=========================
Come fare un sito per l'anno nuovo, abbastanza simile a quello vecchio?
copia ed aggiorna le date. Dove?
* `README.md`
* `content/pages/index.*` ci sono le date/luogo
* `content/pages/info*` c'è sicuramente roba da cambiare
* `pelicanconf.py`
- cambia il SITEURL e anche la DEFAULT_DATE per l'anno nuovo
- cambia SITENAME incrementando l'esadecimale
* `publishconf.py` cambia il SITEURL
* `talks/meta.yaml`: cambia la startdate: deve essere quella del primo giorno da mettere in programma, quindi
potrebbe anche essere il mercoledì o il giovedì

74
pelicanconf.py Normal file
View file

@ -0,0 +1,74 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
AUTHOR = "Hackmeeting"
SITENAME = "Hackmeeting 0x16"
CC_LICENSE = "by-nc-sa"
SITEURL = "/hackit19"
PATH = "content"
PAGE_PATHS = ["pages"]
ARTICLE_PATHS = ["news"]
STATIC_PATHS = ["images", "talks", "extra"]
# DIRECT_TEMPLATES = ('search',) # tipue search
TIMEZONE = "Europe/Paris"
DEFAULT_LANG = "it"
# Feed generation is usually not desired when developing
FEED_ALL_ATOM = None
CATEGORY_FEED_ATOM = None
TRANSLATION_FEED_ATOM = None
AUTHOR_FEED_ATOM = None
AUTHOR_FEED_RSS = None
# Blogroll
LINKS = None
# Social widget
SOCIAL = None
DEFAULT_PAGINATION = 10
USE_OPEN_GRAPH = False # COL CAZZO
# Uncomment following line if you want document-relative URLs when developing
RELATIVE_URLS = True
DEFAULT_DATE = (2019, 3, 1)
TYPOGRIFY = True
PAGE_ORDER_BY = "navbar_sort"
PAGE_URL = "{slug}.html"
PAGE_SAVE_AS = "{slug}.html"
PAGE_LANG_URL = "{slug}.{lang}.html"
PAGE_LANG_SAVE_AS = "{slug}.{lang}.html"
INDEX_SAVE_AS = "articles.html"
BANNER = True
BANNER_ALL_PAGES = True
SITELOGO = "logo/logo.png"
# PAGE_BACKGROUND = 'images/background.jpg'
# THEME = 'themes/hackit0x15/'
THEME = "themes/hackit0x16/"
FAVICON = "images/cyberrights.png"
FONT_URL = "theme/css/anaheim.css"
# Custom css by sticazzi.
# CUSTOM_CSS = 'theme/css/hackit.css'
EXTRA_PATH_METADATA = {
# 'extra/main.css': {'path': 'themes/pelican-bootstrap3/static/css/main.css' },
"extra/favicon.png": {"path": "images/favicon.png"},
"images/locandina.jpg": {"path": "images/locandina.jpg"},
}
# Pelican bootstrap 3 theme settings
BOOTSTRAP_THEME = "darkly"
HIDE_SITENAME = True
HIDE_SIDEBAR = True
PLUGIN_PATHS = ["plugins"]
PLUGINS = ["langmenu", "talks", "tipue_search"]
# plugin/talks.py
SCHEDULEURL = "https://hackmeeting.org" + SITEURL + "/schedule.html"
TALKS_GRID_STEP = 30
MARKDOWN = {"extension_configs": {"markdown.extensions.toc": {}}}

39
plugins/langmenu.py Normal file
View file

@ -0,0 +1,39 @@
'''
This plugin attemps to create something similar to menuitems,
but more meaningful with respect to l10n
'''
from __future__ import print_function
from pelican import signals
def add_localmenuitems(generator):
menu = {} # lang: list of pages
for page in generator.context['pages']:
menu.setdefault(page.lang, [])
for tr in page.translations:
menu.setdefault(tr.lang, [])
print('we have langs ' + ','.join(menu.keys()))
for page in sorted(generator.context['pages'],
key=lambda x: int(x.navbar_sort)):
defined_langs = []
menu[page.lang].append(page)
defined_langs.append(page.lang)
for tr in page.translations:
menu[tr.lang].append(tr)
defined_langs.append(tr.lang)
for lang in menu.keys():
if lang not in defined_langs:
menu[lang].append(page)
menuitems = {}
for lang in menu:
menuitems[lang] = []
for page in menu[lang]:
menuitems[lang].append((page.title, page.url))
generator.context['LOCALMENUITEMS'] = menuitems
def register():
signals.page_generator_finalized.connect(add_localmenuitems)

View file

@ -0,0 +1,3 @@
from .talks import *
# flake8: noqa

104
plugins/talks/style.css Normal file
View file

@ -0,0 +1,104 @@
.talk-resources {
word-break: break-all;
}
.talk-grid {
table-layout: auto;
min-width: 100%;
border-collapse: separate;
text-align: center;
}
.talk-grid > thead th:first-child {
max-width: 5em;
}
.talk-grid > thead th {
text-align: center;
}
.talk-grid tr {
height: 1.5em;
}
.rooms-4 .talk {
width: 25%;
}
.rooms-3 .talk {
width: 33%;
}
.rooms-2 .talk {
width: 50%;
}
.rooms-1 .talk {
width: 100%;
}
td.talk {
border: 1px solid #444;
padding: 4px;
vertical-align: middle;
}
td.talk > a {
text-decoration: none;
border: none;
}
.talk-grid tr {
line-height: 1em;
}
.talk-title a,
.talk-title a:hover,
.talk-title a:focus {
border-bottom: none;
}
.talk-description strong {
background: inherit;
color: inherit;
}
/* tag speciali nei talk {{{ */
/* generati guardando i tag di glypicon come glyphicon-pushpin e copiandone il campo content */
td.talk::before {
font-family: 'Glyphicons Halflings';
float: right;
}
td.tag-presentazione_libro::before {
content: "\e043";
}
td.tag-percorso_base::before {
content: "\e146";
}
/* tag speciali nei talk }}} */
/* END TALK }}} */
/* Pagine speciali */
.body-info .entry-content > ul {
list-style: none;
}
/*media query min dal piccolo, max dal grande*/
@media all and (max-width: 770px) {
.talk-grid {
font-size: 0.8em;
}
.talk-grid td {
hyphens: auto;
}
}
@media all and (max-width: 450px) {
.talk-grid {
font-size: 0.5em;
}
}

577
plugins/talks/talks.py Normal file
View file

@ -0,0 +1,577 @@
# -*- coding: utf-8 -*-
"""
Manage talks scheduling in a semantic way
"""
from __future__ import print_function
import os
import io
from functools import wraps
import logging
import re
import datetime
import shutil
from copy import copy
import locale
from contextlib import contextmanager
import inspect
from babel.dates import format_date, format_datetime, format_time
from markdown import markdown
from docutils import nodes
from docutils.parsers.rst import directives, Directive
import six
from pelican import signals, generators
import jinja2
try:
import ics
except ImportError:
ICS_ENABLED = False
else:
ICS_ENABLED = True
import unidecode
import dateutil
pelican = None # This will be set during register()
def memoize(function):
"""decorators to cache"""
memo = {}
@wraps(function)
def wrapper(*args):
if args in memo:
return memo[args]
else:
rv = function(*args)
memo[args] = rv
return rv
return wrapper
@contextmanager
def setlocale(name):
saved = locale.setlocale(locale.LC_ALL)
try:
yield locale.setlocale(locale.LC_ALL, name)
finally:
locale.setlocale(locale.LC_ALL, saved)
@memoize
def get_talk_names():
names = [
name
for name in os.listdir(pelican.settings["TALKS_PATH"])
if not name.startswith("_") and get_talk_data(name) is not None
]
names.sort()
return names
def all_talks():
return [get_talk_data(tn) for tn in get_talk_names()]
def unique_attr(iterable, attr):
return {x[attr] for x in iterable if attr in x}
@memoize
def get_global_data():
fname = os.path.join(pelican.settings["TALKS_PATH"], "meta.yaml")
if not os.path.isfile(fname):
return None
with io.open(fname, encoding="utf8") as buf:
try:
data = yaml.load(buf)
except Exception:
logging.exception("Syntax error reading %s; skipping", fname)
return None
if data is None:
return None
if "startdate" not in data:
logging.error("Missing startdate in global data")
data["startdate"] = datetime.datetime.now()
if "rooms" not in data:
data["rooms"] = {}
if "names" not in data["rooms"]:
data["rooms"]["names"] = {}
if "order" not in data["rooms"]:
data["rooms"]["order"] = []
return data
def _get_time_shift(timestring):
""" Il problema che abbiamo è che vogliamo dire che le 2 di notte del sabato sono in realtà "parte" del
venerdì. Per farlo accettiamo orari che superano le 24, ad esempio 25.30 vuol dire 1.30.
Questa funzione ritorna una timedelta in base alla stringa passata
"""
timeparts = re.findall(r"\d+", timestring)
if not timeparts or len(timeparts) > 2:
raise ValueError("Malformed time %s" % timestring)
timeparts += [0, 0] # "padding" per essere sicuro ci siano anche [1] e [2]
duration = datetime.timedelta(
hours=int(timeparts[0]), minutes=int(timeparts[1]), seconds=int(timeparts[2])
)
if duration.total_seconds() > 3600 * 31 or duration.total_seconds() < 0:
raise ValueError("Sforamento eccessivo: %d" % duration.hours)
return duration
@memoize
def get_talk_data(talkname):
fname = os.path.join(pelican.settings["TALKS_PATH"], talkname, "meta.yaml")
if not os.path.isfile(fname):
return None
with io.open(fname, encoding="utf8") as buf:
try:
data = yaml.load(buf)
except Exception:
logging.exception("Syntax error reading %s; skipping", fname)
return None
if data is None:
return None
try:
gridstep = pelican.settings["TALKS_GRID_STEP"]
data.setdefault("nooverlap", [])
if "title" not in data:
logging.warn("Talk <{}> has no `title` field".format(talkname))
data["title"] = six.text_type(talkname)
else:
data["title"] = six.text_type(data["title"])
if "text" not in data:
logging.warn("Talk <{}> has no `text` field".format(talkname))
data["text"] = ""
else:
data["text"] = six.text_type(data["text"])
if "duration" not in data:
logging.info(
"Talk <{}> has no `duration` field (50min used)".format(talkname)
)
data["duration"] = 50
data["duration"] = int(data["duration"])
if data["duration"] < gridstep:
logging.info(
"Talk <{}> lasts only {} minutes; changing to {}".format(
talkname, data["duration"], gridstep
)
)
data["duration"] = gridstep
if "links" not in data or not data["links"]:
data["links"] = []
if "contacts" not in data or not data["contacts"]:
data["contacts"] = []
if "needs" not in data or not data["needs"]:
data["needs"] = []
if "room" not in data:
logging.warn("Talk <{}> has no `room` field".format(talkname))
else:
if data["room"] in get_global_data()["rooms"]["names"]:
data["room"] = get_global_data()["rooms"]["names"][data["room"]]
if "time" not in data or "day" not in data:
logging.warn("Talk <{}> has no `time` or `day`".format(talkname))
if "time" in data:
del data["time"]
if "day" in data:
del data["day"]
else:
data["day"] = get_global_data()["startdate"] + datetime.timedelta(
days=data["day"]
)
try:
shift = _get_time_shift(str(data["time"]))
except ValueError:
logging.error("Talk <%s> has malformed `time`", talkname)
data["delta"] = shift
data["time"] = datetime.datetime.combine(
data["day"], datetime.time(0, 0, 0)
)
data["time"] += shift
data["time"] = data["time"].replace(tzinfo=dateutil.tz.gettz("Europe/Rome"))
data["id"] = talkname
resdir = os.path.join(
pelican.settings["TALKS_PATH"],
talkname,
pelican.settings["TALKS_ATTACHMENT_PATH"],
)
if os.path.isdir(resdir) and os.listdir(resdir):
data["resources"] = resdir
return data
except Exception:
logging.exception("Error on talk %s", talkname)
raise
def overlap(interval_a, interval_b):
"""how many minutes do they overlap?"""
return max(0, min(interval_a[1], interval_b[1]) - max(interval_a[0], interval_b[0]))
def get_talk_overlaps(name):
data = get_talk_data(name)
overlapping_talks = set()
if "time" not in data:
return overlapping_talks
start = int(data["time"].strftime("%s"))
end = start + data["duration"] * 60
for other in get_talk_names():
if other == name:
continue
if "time" not in get_talk_data(other):
continue
other_start = int(get_talk_data(other)["time"].strftime("%s"))
other_end = other_start + get_talk_data(other)["duration"] * 60
minutes = overlap((start, end), (other_start, other_end))
if minutes > 0:
overlapping_talks.add(other)
return overlapping_talks
@memoize
def check_overlaps():
for t in get_talk_names():
over = get_talk_overlaps(t)
noover = get_talk_data(t)["nooverlap"]
contacts = set(get_talk_data(t)["contacts"])
for overlapping in over:
if overlapping in noover or set(
get_talk_data(overlapping)["contacts"]
).intersection(contacts):
logging.warning("Talk %s overlaps with %s" % (t, overlapping))
@memoize
def jinja_env():
env = jinja2.Environment(
loader=jinja2.FileSystemLoader(
os.path.join(pelican.settings["TALKS_PATH"], "_templates")
),
autoescape=True,
)
env.filters["markdown"] = lambda text: jinja2.Markup(markdown(text))
env.filters["dateformat"] = format_date
env.filters["datetimeformat"] = format_datetime
env.filters["timeformat"] = format_time
return env
@memoize
def get_css():
plugindir = os.path.dirname(
os.path.abspath(inspect.getfile(inspect.currentframe()))
)
with open(os.path.join(plugindir, "style.css")) as buf:
return buf.read()
class TalkListDirective(Directive):
final_argument_whitespace = True
has_content = True
option_spec = {"lang": directives.unchanged}
def run(self):
lang = self.options.get("lang", "C")
tmpl = jinja_env().get_template("talk.html")
def _sort_date(name):
"""
This function is a helper to sort talks by start date
When no date is available, put at the beginning
"""
d = get_talk_data(name)
room = d.get("room", "")
time = d.get(
"time",
datetime.datetime(1, 1, 1).replace(
tzinfo=dateutil.tz.gettz("Europe/Rome")
),
)
title = d.get("title", "")
return (time, room, title)
return [
nodes.raw("", tmpl.render(lang=lang, **get_talk_data(n)), format="html")
for n in sorted(get_talk_names(), key=_sort_date)
]
class TalkDirective(Directive):
required_arguments = 1
final_argument_whitespace = True
has_content = True
option_spec = {"lang": directives.unchanged}
def run(self):
lang = self.options.get("lang", "C")
tmpl = jinja_env().get_template("talk.html")
data = get_talk_data(self.arguments[0])
if data is None:
return []
return [nodes.raw("", tmpl.render(lang=lang, **data), format="html")]
def _delta_to_position(delta):
gridstep = pelican.settings["TALKS_GRID_STEP"]
sec = delta.total_seconds() // gridstep * gridstep
return int("%2d%02d" % (sec // 3600, (sec % 3600) // 60))
def _delta_inc_position(delta, i):
gridstep = pelican.settings["TALKS_GRID_STEP"]
delta = delta + datetime.timedelta(minutes=i * gridstep)
sec = delta.total_seconds() // gridstep * gridstep
return int("%2d%02d" % (sec // 3600, (sec % 3600) // 60))
def _approx_timestr(timestr):
gridstep = pelican.settings["TALKS_GRID_STEP"]
t = str(timestr)
minutes = int(t[-2:])
hours = t[:-2]
minutes = minutes // gridstep * gridstep
return int("%s%02d" % (hours, minutes))
class TalkGridDirective(Directive):
"""A complete grid"""
final_argument_whitespace = True
has_content = True
option_spec = {"lang": directives.unchanged}
def run(self):
try:
lang = self.options.get("lang", "C")
tmpl = jinja_env().get_template("grid.html")
output = []
days = unique_attr(all_talks(), "day")
gridstep = pelican.settings["TALKS_GRID_STEP"]
for day in sorted(days):
talks = {
talk["id"]
for talk in all_talks()
if talk.get("day", None) == day
and "time" in talk
and "room" in talk
}
if not talks:
continue
talks = [get_talk_data(t) for t in talks]
rooms = set()
for t in talks:
if type(t["room"]) is list:
for r in t["room"]:
rooms.add(r)
else:
rooms.add(t["room"])
def _room_sort_key(r):
order = get_global_data()["rooms"]["order"]
base = None
for k, v in get_global_data()["rooms"]["names"].items():
if v == r:
base = k
break
else:
if type(r) is str:
return ord(r[0])
# int?
return r
return order.index(base)
rooms = list(sorted(rooms, key=_room_sort_key))
# room=* is not a real room.
# Remove it unless that day only has special rooms
if "*" in rooms and len(rooms) > 1:
del rooms[rooms.index("*")]
mintimedelta = min({talk["delta"] for talk in talks})
maxtimedelta = max(
{
talk["delta"] + datetime.timedelta(minutes=talk["duration"])
for talk in talks
}
)
mintime = _delta_to_position(mintimedelta)
maxtime = _delta_to_position(maxtimedelta)
times = {}
t = mintimedelta
while t <= maxtimedelta:
times[_delta_to_position(t)] = [None] * len(rooms)
t += datetime.timedelta(minutes=gridstep)
for talk in sorted(talks, key=lambda x: x["delta"]):
talktime = _delta_to_position(talk["delta"])
position = _approx_timestr(talktime)
assert position in times, "pos=%d,time=%d" % (position, talktime)
if talk["room"] == "*":
roomnums = range(len(rooms))
elif type(talk["room"]) is list:
roomnums = [rooms.index(r) for r in talk["room"]]
else:
roomnums = [rooms.index(talk["room"])]
for roomnum in roomnums:
if times[position][roomnum] is not None:
logging.error(
"Talk %s and %s overlap! (room %s)",
times[position][roomnum]["id"],
talk["id"],
rooms[roomnum],
)
continue
times[position][roomnum] = copy(talk)
times[position][roomnum]["skip"] = False
for i in range(1, talk["duration"] // gridstep):
p = _approx_timestr(_delta_inc_position(talk["delta"], i))
times[p][roomnum] = copy(talk)
times[p][roomnum]["skip"] = True
render = tmpl.render(
times=times,
rooms=rooms,
mintime=mintime,
maxtime=maxtime,
timestep=gridstep,
lang=lang,
)
output.append(
nodes.raw(
"",
u"<h4>%s</h4>" % format_date(day, format="full", locale=lang),
format="html",
)
)
output.append(nodes.raw("", render, format="html"))
except:
logging.exception("Error on talk grid")
import traceback
traceback.print_exc()
return []
css = get_css()
if css:
output.insert(
0,
nodes.raw("", '<style type="text/css">%s</style>' % css, format="html"),
)
return output
def talks_to_ics():
c = ics.Calendar()
c.creator = u"pelican"
for t in all_talks():
e = talk_to_ics(t)
if e is not None:
c.events.add(e)
return six.text_type(c)
def talk_to_ics(talk):
def _decode(s):
if six.PY2:
return unidecode.unidecode(s)
else:
return s
if "time" not in talk or "duration" not in talk:
return None
e = ics.Event(
uid="%s@%d.hackmeeting.org" % (talk["id"], get_global_data()["startdate"].year),
name=_decode(talk["title"]),
begin=talk["time"],
duration=datetime.timedelta(minutes=talk["duration"]),
transparent=True,
)
# ics.py has some problems with unicode
# unidecode replaces letters with their most similar ASCII counterparts
# (ie: accents get stripped)
if "text" in talk:
e.description = _decode(talk["text"])
e.url = pelican.settings["SCHEDULEURL"] + "#talk-" + talk["id"]
if "room" in talk:
e.location = talk["room"]
return e
class TalksGenerator(generators.Generator):
def __init__(self, *args, **kwargs):
self.talks = []
super(TalksGenerator, self).__init__(*args, **kwargs)
def generate_context(self):
self.talks = {n: get_talk_data(n) for n in get_talk_names()}
self._update_context(("talks",))
check_overlaps()
def generate_output(self, writer=None):
for talkname in sorted(self.talks):
if "resources" in self.talks[talkname]:
outdir = os.path.join(
self.output_path,
pelican.settings["TALKS_PATH"],
talkname,
pelican.settings["TALKS_ATTACHMENT_PATH"],
)
if os.path.isdir(outdir):
shutil.rmtree(outdir)
shutil.copytree(self.talks[talkname]["resources"], outdir)
if ICS_ENABLED:
with io.open(
os.path.join(self.output_path, pelican.settings.get("TALKS_ICS")),
"w",
encoding="utf8",
) as buf:
buf.write(talks_to_ics())
else:
logging.warning(
"module `ics` not found. " "ICS calendar will not be generated"
)
def add_talks_option_defaults(pelican):
pelican.settings.setdefault("TALKS_PATH", "talks")
pelican.settings.setdefault("TALKS_ATTACHMENT_PATH", "res")
pelican.settings.setdefault("TALKS_ICS", "schedule.ics")
pelican.settings.setdefault("TALKS_GRID_STEP", 30)
def get_generators(gen):
return TalksGenerator
def pelican_init(pelicanobj):
global pelican
pelican = pelicanobj
try:
import yaml
except ImportError:
print("ERROR: yaml not found. Talks plugins will be disabled")
def register():
pass
else:
def register():
signals.initialized.connect(pelican_init)
signals.get_generators.connect(get_generators)
signals.initialized.connect(add_talks_option_defaults)
directives.register_directive("talklist", TalkListDirective)
directives.register_directive("talk", TalkDirective)
directives.register_directive("talkgrid", TalkGridDirective)

View file

@ -0,0 +1,67 @@
Tipue Search
============
A Pelican plugin to serialize generated HTML to JSON that can be used by jQuery plugin - Tipue Search.
Copyright (c) Talha Mansoor
Author | Talha Mansoor
----------------|-----
Author Email | talha131@gmail.com
Author Homepage | http://onCrashReboot.com
Github Account | https://github.com/talha131
Why do you need it?
===================
Static sites do not offer search feature out of the box. [Tipue Search](http://www.tipue.com/search/)
is a jQuery plugin that search the static site without using any third party service, like DuckDuckGo or Google.
Tipue Search offers 4 search modes. Its [JSON search mode](http://www.tipue.com/search/docs/json/) is the best search mode
especially for large sites.
Tipue's JSON search mode requires the textual content of site in JSON format.
Requirements
============
Tipue Search requires BeautifulSoup.
```bash
pip install beautifulsoup4
```
How Tipue Search works
=========================
Tipue Search serializes the generated HTML into JSON. Format of JSON is as follows
```python
{
"pages": [
{
"text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta. Mauris massa. Vestibulum lacinia arcu eget nulla. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero.",
"tags": "Example Category",
"url" : "http://oncrashreboot.com/plugin-example.html",
"title": "Everything you want to know about Lorem Ipsum"
},
{
"text": "Sed dignissim lacinia nunc. Curabitur tortor. Pellentesque nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor. Morbi lectus risus, iaculis vel, suscipit quis, luctus non, massa. Fusce ac turpis quis ligula lacinia aliquet. Mauris ipsum. Nulla metus metus, ullamcorper vel, tincidunt sed, euismod in, nibh.",
"tags": "Example Category",
"url" : "http://oncrashreboot.com/plugin-example-2.html",
"title": "Review of the book Lorem Ipsum"
}
]
}
```
JSON is written to file `tipuesearch_content.json` which is created in the root of `output` directory.
How to use
==========
To utilize JSON Search mode, your theme needs to have Tipue Search properly configured in it. [Official documentation](http://www.tipue.com/search/docs/#json) has the required details.
Pelican [Elegant Theme](https://github.com/talha131/pelican-elegant) and [Plumage
theme](https://github.com/kdeldycke/plumage) have Tipue Search configured. You can view their
code to understand the configuration.

View file

@ -0,0 +1 @@
from .tipue_search import *

View file

@ -0,0 +1,107 @@
# -*- coding: utf-8 -*-
"""
Tipue Search
============
A Pelican plugin to serialize generated HTML to JSON
that can be used by jQuery plugin - Tipue Search.
Copyright (c) Talha Mansoor
"""
from __future__ import unicode_literals
import os.path
import json
from bs4 import BeautifulSoup
from codecs import open
try:
from urlparse import urljoin
except ImportError:
from urllib.parse import urljoin
from pelican import signals
class Tipue_Search_JSON_Generator(object):
def __init__(self, context, settings, path, theme, output_path, *null):
self.output_path = output_path
self.context = context
self.siteurl = settings.get('SITEURL')
self.relative_urls = settings.get('RELATIVE_URLS')
self.tpages = settings.get('TEMPLATE_PAGES')
self.output_path = output_path
self.json_nodes = []
def create_json_node(self, page):
if getattr(page, 'status', 'published') != 'published':
return
soup_title = BeautifulSoup(page.title.replace('&nbsp;', ' '), 'html.parser')
page_title = soup_title.get_text(' ', strip=True).replace('', '"').replace('', '"').replace('', "'").replace('^', '&#94;')
soup_text = BeautifulSoup(page.content, 'html.parser')
page_text = soup_text.get_text(' ', strip=True).replace('', '"').replace('', '"').replace('', "'").replace('', ' ').replace('^', '&#94;')
page_text = ' '.join(page_text.split())
page_category = page.category.name if getattr(page, 'category', 'None') != 'None' else ''
page_url = '.'
if page.url:
page_url = page.url if self.relative_urls else (self.siteurl + '/' + page.url)
node = {'title': page_title,
'text': page_text,
'tags': page_category,
'loc': page_url}
self.json_nodes.append(node)
def create_tpage_node(self, srclink):
with open(os.path.join(self.output_path, self.tpages[srclink]),
encoding='utf-8') as srcfile:
soup = BeautifulSoup(srcfile, 'html.parser')
page_title = soup.title.string if soup.title is not None else ''
page_text = soup.get_text()
# Should set default category?
page_category = ''
page_url = urljoin(self.siteurl, self.tpages[srclink])
node = {'title': page_title,
'text': page_text,
'tags': page_category,
'url': page_url}
self.json_nodes.append(node)
def generate_output(self, writer):
# bisognerebbe cambiare usando questo coso
# for p in self.context['PAGES']:
# print 'U', p.url
path = os.path.join(self.output_path, 'tipuesearch_content.json')
pages = self.context['pages'] + self.context['articles']
for article in self.context['articles']:
pages += article.translations
for srclink in self.tpages:
self.create_tpage_node(srclink)
for page in pages:
self.create_json_node(page)
root_node = {'pages': self.json_nodes}
with open(path, 'w', encoding='utf-8') as fd:
json.dump(root_node, fd, separators=(',', ':'), ensure_ascii=False)
def get_generators(generators):
return Tipue_Search_JSON_Generator
def register():
signals.get_generators.connect(get_generators)

13
publishconf.py Normal file
View file

@ -0,0 +1,13 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals
# This file is only used if you use `make publish` or
# explicitly specify it as your config file.
import os
import sys
sys.path.append(os.curdir)
from pelicanconf import *
SITEURL = 'https://hackmeeting.org/hackit19/'

19
requirements.txt Normal file
View file

@ -0,0 +1,19 @@
arrow==0.4.2
Babel==2.4.0
beautifulsoup4==4.6.0
blinker==1.4
docutils==0.14
feedgenerator==1.9
ics==0.4
Jinja2==2.10
Markdown==2.6.1
MarkupSafe==1.1.1
pelican==4.0.0
Pygments==2.3.1
python-dateutil==2.8.0
pytz==2018.9
PyYAML==3.12
six==1.12.0
smartypants==1.8.6
typogrify==2.0.7
Unidecode==1.0.23

4
talks/README.md Normal file
View file

@ -0,0 +1,4 @@
Per aggiungere un talk, copia la directory `_talk_example` in una nuova
directory che contenga **solo caratteri alfabetici**, quindi
cambia il file ``meta.yaml`` a tuo piacimento.
Usa UTF-8 o morirai.

View file

@ -0,0 +1,44 @@
title: "Il titolo del talk"
text: |
Descrizione del talk divisa in molte righe
Puoi scrivere quanto vuoi
ma devi rimanere indentato
Puoi anche mettere delle spaziature.
# Se ancora non è stata assegnata una stanza al talk, commentala. Non usare un valore tipo "qualunque" o
# cose del genere, che ci si incasina tutto
room: antani
# duration è la durata in minuti del talk
# duration: 50
# Ci vanno le virgolette intorno! altrimenti 17.30 viene interpretato come un numero decimale
time: "17.30"
# day è il giorno in cui avverrà il talk. Finché non decommenti il talk non sarà schedulato
# 0=giovedì, 1=venerdì, 2=sabato, 3=domenica
# day: 0
tags:
- tante
- cose
- belle
# Devono essere dei link validi!
links:
- https://git.lattuga.net/asd/foo
# mail dovrebbe contenere un link all'email in lista hackmeeting in cui il talk è stato proposto
# così si può sapere chi contattare e se c'è stata una discussione
# prendi il link da https://lists.autistici.org/list/hackmeeting.en.html
# il campo mail NON è un indirizzo email
mail: "blabla"
# contacts invece sono i nomi, o gli indirizzi, delle persone che presentano
#contacts:
# - tizio
# - caio
# se chiedono di non sovrapporli con qualche talk, segnalo qui
# cosi' poi il coso ci avvisa quando sbagliamo
nooverlap: []
# Devi usare UTF-8, non t'inventare scuse, sappiamo ndo abiti
# vim: set fileencoding=utf-8 ts=4 sw=4 et:

View file

@ -0,0 +1,36 @@
<table class="talk-grid rooms-{{-rooms|length}}">
<thead>
<tr>
<th></th>
{% for room in rooms %}
<th>{{room}}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for time in times|sort %}
<tr>
<td>{{time}}</td>
{% for talk in times[time] %}
{% if not loop.first and talk.room == '*' %}
{# skip: covered by colspan #}
{% elif talk == None %}
<td></td>
{% elif not talk.skip %}
<td id="t-cell-{{talk.id}}" class="talk
{% if talk.room == '*' -%}allrooms{%endif-%}
{% for t in talk.tags %} tag-{{t|replace(' ', '_')}} {%endfor-%}
"
rowspan="{{talk.duration // timestep}}"
{% if talk.room == '*' %}colspan="{{rooms|length}}"{%endif%}>
<a href="#talk-{{talk.id}}"
title="{{talk.tags|join(",")}}"
>{{talk.title}}</a>
</td>
{% endif %}
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
{# vim: set ft=jinja: #}

View file

@ -0,0 +1,59 @@
{% macro durata_human(d) %}
{%- if d >= 60 -%}{{d//60}}h{%- endif -%}
{%- if d % 60 != 0 -%}{{d%60}}m {%- endif -%}
{% endmacro %}
<div id="talk-{{id}}"
class="{% for t in tags -%} tag-{{t|replace(' ', '_')}} {% endfor -%}">
<h3 class="talk-title"><a href="#t-cell-{{id}}">{{title.strip()}}</a></h3>
<div class="talk-info">
<p>
{% if time is defined and day is defined %}
{# Vedi http://babel.pocoo.org/en/latest/dates.html #}
<span>
{{day|dateformat(format='EEEE', locale=lang)}}
-
{{time.time()|timeformat(format='short', locale=lang)}}
{% if duration %} ({{durata_human(duration)}}) {% endif %}
</span>
{% else %}
<i>L'orario non è ancora stato fissato</i>
{% if duration %} <p>Durata: {{durata_human(duration)}}</p> {% endif %}
{% endif %} {# date-time #}
{% if room is defined %}
<span>Stanza {{ room }}</span>
{% endif %}
</p>
{% if needs: %}
<div class="talk-needs">
<strong>Materiale necessario:</strong>
{{needs|join(", ")}}
</div>
{% endif %}
</div>
<div class="talk-description">{{text | markdown}}
{% if contacts: %}
<p class="contacts">A cura di {{contacts|join(', ')}}</p>
{% endif %}
</div>
{% if links or resources or mail: %}
<div class="talk-resources">
<h4>Link utili:</h4>
<ul>
{% if links is defined: %}
{% for link in links %}
<li>{{link|urlize}}</li>
{% endfor %}
{% endif %}
{% if resources is defined: %}
<li><a href="{{resources}}/">Materiali</a></li>
{% endif %}
{% if mail is defined: %}
<li><a href="{{mail}}">Mail</a></li>
{% endif %}
</ul>
</div>
{% endif %}
</div>
{# vim: set ft=jinja: #}

9
talks/meta.yaml Normal file
View file

@ -0,0 +1,9 @@
startdate: 2020-07-09
rooms:
names:
A: Cinema
B: Spazio Uno
C: Boh
D: Sala corsi
E: Chi lo sa
order: [A,B,C,D,E]