Browse Source

prima versione del sito in pelican

proposta-home
putro 2 years ago
commit
ceacdb8ccf
34 changed files with 1207 additions and 0 deletions
  1. +5
    -0
      .gitignore
  2. +87
    -0
      LEGGIMI.md
  3. +92
    -0
      Makefile
  4. BIN
      content/images/logo.png
  5. BIN
      content/media/c2c-screenshot-mobile.jpg
  6. BIN
      content/media/nolike.pdf
  7. BIN
      content/media/pmomp-flyer.png
  8. +43
    -0
      content/news/001-comunicato_sgombero.md
  9. +9
    -0
      content/news/002-welcome_pelican.md
  10. +13
    -0
      content/pages/c2c.md
  11. +8
    -0
      content/pages/contatti.md
  12. +31
    -0
      content/pages/criptolibretto.md
  13. +67
    -0
      content/pages/faq.md
  14. +93
    -0
      content/pages/howto_mailinglist.md
  15. +22
    -0
      content/pages/index.md
  16. +52
    -0
      content/pages/manifesto.md
  17. +127
    -0
      content/pages/nolike.md
  18. +20
    -0
      content/pages/pmomp.md
  19. +75
    -0
      pelicanconf.py
  20. +25
    -0
      publishconf.py
  21. +80
    -0
      tasks.py
  22. +37
    -0
      themes/minimo/static/css/style.css
  23. +42
    -0
      themes/minimo/templates/archives.html
  24. +28
    -0
      themes/minimo/templates/article.html
  25. +25
    -0
      themes/minimo/templates/article_infos.html
  26. +5
    -0
      themes/minimo/templates/author.html
  27. +72
    -0
      themes/minimo/templates/base.html
  28. +19
    -0
      themes/minimo/templates/categories.html
  29. +6
    -0
      themes/minimo/templates/category.html
  30. +74
    -0
      themes/minimo/templates/index.html
  31. +15
    -0
      themes/minimo/templates/page.html
  32. +6
    -0
      themes/minimo/templates/tag.html
  33. +19
    -0
      themes/minimo/templates/tags.html
  34. +10
    -0
      themes/minimo/templates/translations.html

+ 5
- 0
.gitignore View File

@@ -0,0 +1,5 @@
__pycache__/
cache/
output/
*.pyc
pelican.pid

+ 87
- 0
LEGGIMI.md View File

@@ -0,0 +1,87 @@
# PELICAN WEBSITE HOWTO

## pelicanconf.py:

in questo file si definiscono un tot di cose, tra cui:

i contenuti stanno nella cartella "content", vengono scritti in markdown e sono di due tipi:

- pagine statiche (nella sottocartella "pages")
- articoli tipo blog (nella sottocartella "blog")
una volta elaborati sono salvati nella cartella "output" che e' quella
che conterrà i files .html del sito vero e proprio
in testa ai files .md devono essere definiti dei metadati:

per le pagine statiche:

- Title (il titolo che poi compare a video nella pagina finale html)
- Slug (il nome con cui la pagina sara' salvata nella cartella output)

per gli articoli ad es.:

- Title: Comunicato Unit hacklab su annuncio sgombero Macao
- Author: Unit
- Category: comunicato
- Date: 2018-09-26
- Tags: sgombero

nella cartella output le pagine sono salvate nella sottocartella pages
(direttiva PAGE_SAVE_AS)
e gli articoli nella cartella blog (direttiva ARTICLE_SAVE_AS)

gli articoli finiscono nel feed rss, le pagine no, quindi se si crea una pagina
e' bene fare anche un articolo che la "presenti".


il tema usato e' "minimo" di dan (ho fatto solo una piccola modifica per includere il logo di unit in tutte le pagine (vedi templates/base.html))
in realta' andrebbe modificato il css in modo che se e' definito ad esempio SITE_LOGO in pelicanconf.py, compaia il logo di fianco a Unit,
e non sotto
(per come fare vedi ad es.
> https://github.com/sQu4rks/crowsfoot/blob/30509fc0cf6d4c29f2d1d9ec87783340a7158538/templates/base.html
> https://github.com/nairobilug/pelican-alchemy/blob/f235c81bf323e6134b01915fc9a46b5e89ac238b/alchemy/templates/base.html

altra cosa che si potrebbe fare: usare il tema come submodulo git del sito, in modo che siano due cose separate, ma al momento minimo non e' in git come se fosse solo un tema (cioe' solo le cartelle templates e static)
c'e' anche altro intorno, andrebbe sistemato.


in cima alla pagina c'e' un piccolo menu con poche voci:

- HOME (index)
- BLOG (lista degli articoli con anteprima (articles.html), volendo ci sarebbe anche la pagina archives.html che contiene la lista degli articoli ma senza anteprima.
- CATEGORIE (lista delle categorie degli articoli, cliccabile)
- TAG (lista dei tag degli articoli, cliccabile)
- CONTATTI (pagina che riporta i contatti)
- RSS (link al feed rss (atom))
ci sono due cartelle statiche:

- media (che contiene i materiali delle pagine, pdf, immagini etc.)
- images (che contiene le immagini della struttura del sito, al momento solo il logo))



## publishconf.py

questo file definisce solo il SITEURL in produzione e l'indirizzo dei feed rss e atom creati
(quando sostituiremo il sito perderemo tutti i feed precedenti, a meno di creare degli articoli nel blog,
pero' poi mi sa che chi ha sottoscritto il feed li ricevera' di nuovo.... ?
per or


## Makefile

e' il makefile standard con le istruzioni per SSH per caricare il sito
e un nuovo comando "production" per copiare il sito al suo posto
(ma funziona solo se viene lanciato da zaphoda)


TODO:
il sito ora e' visibile su https://unit.abbiamoundominio.org/tmp/,
visto che sta in una sottocartella, in produzione per i menuitems andra' aggiunto un / prima di ogni pagina
stessa cosa per il tema, e l'immagine del logo dovra' avere uno / prima del path
(questo perche' senno' se sei nella cartella /categories/qualcosa poi non funzionano piu' i link, se sono relativi)

valutare magari di mettere una pagina 404 (o meglio ancora 40x) da configurare in nginx.


+ 92
- 0
Makefile View File

@@ -0,0 +1,92 @@
PY?=python3
PELICAN?=pelican
PELICANOPTS=

BASEDIR=$(CURDIR)
INPUTDIR=$(BASEDIR)/content
OUTPUTDIR=$(BASEDIR)/output
CONFFILE=$(BASEDIR)/pelicanconf.py
PUBLISHCONF=$(BASEDIR)/publishconf.py

SSH_HOST=abbiamoundominio.org
SSH_PORT=22
SSH_USER=${USER}
SSH_TARGET_DIR=/var/www/unit.abbiamoundominio.org/tmp/

DEBUG ?= 0
ifeq ($(DEBUG), 1)
PELICANOPTS += -D
endif

RELATIVE ?= 0
ifeq ($(RELATIVE), 1)
PELICANOPTS += --relative-urls
endif

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 serve-global [SERVER=0.0.0.0] serve (as root) to $(SERVER):80 '
@echo ' make devserver [PORT=8000] serve and regenerate together '
@echo ' make ssh_upload upload the web site via SSH '
@echo ' make rsync_upload upload the web site via rsync+ssh '
@echo ' make production copy the site locally '
@echo ' '
@echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html '
@echo 'Set the RELATIVE variable to 1 to enable relative urls '
@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:
ifdef PORT
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT)
else
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
endif

serve-global:
ifdef SERVER
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT) -b $(SERVER)
else
$(PELICAN) -l $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT) -b 0.0.0.0
endif


devserver:
ifdef PORT
$(PELICAN) -lr $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS) -p $(PORT)
else
$(PELICAN) -lr $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
endif

publish:
$(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(PUBLISHCONF) $(PELICANOPTS)

ssh_upload: publish
scp -P $(SSH_PORT) -r $(OUTPUTDIR)/* $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR)

rsync_upload: publish
rsync -e "ssh -p $(SSH_PORT)" -P -rvzc --cvs-exclude --delete $(OUTPUTDIR)/ $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR)

production: publish
ifeq "$(HOSTNAME)" "zaphoda"
cp -R $(OUTPUTDIR)/* $(SSH_TARGET_DIR)/
else
echo "devi essere su zaphoda per lanciare questo comando"
endif

.PHONY: html help clean regenerate serve serve-global devserver stopserver publish ssh_upload rsync_upload

BIN
content/images/logo.png View File

Before After
Width: 484  |  Height: 484  |  Size: 26 KiB

BIN
content/media/c2c-screenshot-mobile.jpg View File

Before After
Width: 313  |  Height: 500  |  Size: 35 KiB

BIN
content/media/nolike.pdf View File


BIN
content/media/pmomp-flyer.png View File

Before After
Width: 600  |  Height: 446  |  Size: 172 KiB

+ 43
- 0
content/news/001-comunicato_sgombero.md View File

@@ -0,0 +1,43 @@
Title: Comunicato Unit hacklab su annuncio sgombero Macao
Category: comunicato
Date: 2018-09-26
Tags: sgombero

Contesto: Milano 2018. Atmosfera di intolleranza civile.

Unit hacklab e' un laboratorio autogestito di
sperimentazione tecnica e politica, le nostre attivita'
comprendono dai corsi gratuiti di elettronica e
informatica alla divulgazione delle pratiche di gestione
della privacy sotto forma di incontri e convegni.

il Comune di Milano, zelante, anticipa l'editto di
Matteo Salvini e comunica il prossimo sgombero di Macao,
lo spazio culturale eterogeneo dal respiro
internazionale situato in Viale Molise 68 a Milano nella
palazzina inutilizzata della Borsa della carne, liberato
nel 2012, al cui interno dal 2016 ci siamo anche noi di
Unit hacklab.

Lo sgombero e' funzionale alla vendita delle palazzine
di Viale Molise e viene annunciato accusando problemi di
bilancio mentre in realta' il Comune sta parlando di
trasferire Citta' studi, di riaprire i navigli e
addirittura di fare le olimpiadi invernali. I soldi non
sono il problema. Il problema e' politico, rispetto
all'autogestione. Ricordiamo che i luoghi liberati
dall'inutilizzo e autogestiti, non sono riconducibili
solo a spazi di aggregazione per i giovani. Sono luoghi
di sperimentazione e produzione politica e culturale,
naturalmente liberi dalle dinamiche commerciali e a
pensiero unico che caratterizzano gli spazi offerti
dalle autorita'.

Il Comune di Milano ha proposto uno sgombero "soft",
ricambiamo con un anatema commisurato: Possa il vostro
winzozz computer farvi BEEP, e non potete uscire.

Noi di Unit hacklab, per nostra natura, non sappiamo
come sparire cosi' facilmente.

eof

+ 9
- 0
content/news/002-welcome_pelican.md View File

@@ -0,0 +1,9 @@
Title: Benvenuto pellicano
Category: news
Date: 2019-03-22
Tags: pelican

Il sito e' stato convertito a pelican, un software
per generare siti statici in html.



+ 13
- 0
content/pages/c2c.md View File

@@ -0,0 +1,13 @@
Title: Cheeck2Cheeck
Slug: c2c


La scatoletta con wifi sconnesso da internet collega le persone vicine per fare chat e
condivisione documenti.
c2c e' un social network libero, mobile ed estemporaneo che non ha bisogno di registrazione.
Ispirato dalle radio pirata e dal movimento della cultura libera, cheek2cheek e'
un'implementazione di Unit hacklab della [PirateBOX](https://www.piratebox.cc/faq).


![c2c screenshot mobile](media/c2c-screenshot-mobile.jpg)


+ 8
- 0
content/pages/contatti.md View File

@@ -0,0 +1,8 @@
Title: contatti
Slug: contatti

puoi scriverci all'indirizzo mail: _unit at paranoici dot org_

ci trovi su IRC nel canale _#unit_ del server <a href="https://www.autistici.org/docs/irc/">irc.autistici.org</a>

o puoi passare a trovarci il mercoledi sera presso <a href="https://www.openstreetmap.org/node/2709091290">Macao, in via Molise 68 a Milano</a>

+ 31
- 0
content/pages/criptolibretto.md View File

@@ -0,0 +1,31 @@
Title: Criptolibretto
Slug: criptolibretto


Un criptolibretto in puro testo con formattazione markdown, convertibile in PDF via pandoc
e stampabile in formato pieghevole. Con documentazione.

Il criptolibretto e' in continuo divenire, qui si trova la piu' recente versione approvata,
nel formato pieghevole croccante stampabile A5 e nel classico formato A4. Per la versione unstable, seguire il git.



[Criptolibretto pieghevole Pdf da stampa](https://unit.abbiamoundominio.org/criptolibretto/book-a5-signature.pdf)

24 gennaio 2019

SHA256(book-a5-signature.pdf)= 5c3b861708e05d9adac0fcbaab2771bec718239a043883556bdf63e158e5be10


[Criptolibretto Pdf](https://unit.abbiamoundominio.org/criptolibretto/book-a4.pdf)

24 gennaio 2019

SHA256(book-a4.pdf)= 84c059584de8bc98628ce22de0eb57af7d49afa692df974795f551c02ab42549


Sorgente disponibile al [repositorio git](https://git.abbiamoundominio.org/unit/criptolibretto)





+ 67
- 0
content/pages/faq.md View File

@@ -0,0 +1,67 @@
Title: FAQ
Slug: faq



Questa e' la nostra pagina delle F.A.Q.
le Frequented Asked Questions, le Domande Poste di Frequente.

== Cosa e' Unit? ==

E' un hacklab.

== Perche' il nome Unit? ==

E' il nome della tupla vuota di haskell.

[https://en.wikipedia.org/wiki/Tuple](https://en.wikipedia.org/wiki/Tuple)

[https://en.wikipedia.org/wiki/Haskell_(programming_language)](https://en.wikipedia.org/wiki/Haskell_(programming_language))

Qui trovi delucidazioni sul logo.

[http://stackoverflow.com/questions/16892570/what-is-in-haskell-exactly](http://stackoverflow.com/questions/16892570/what-is-in-haskell-exactly)

== Cos'e' un hackerspace? ==

Guarda il video: hackerspace design patterns by Mitch

[https://www.youtube.com/watch?v=zr76In2h0fE](https://www.youtube.com/watch?v=zr76In2h0fE)

Piu' sul come che sul cosa, qui ci sono delle slide.

[https://wiki.hackerspaces.org/images/8/8e/Hacker-Space-Design-Patterns.pdf](https://wiki.hackerspaces.org/images/8/8e/Hacker-Space-Design-Patterns.pdf)

== Cos'e' un hacklab? ==

Un hackerspace in movimento.

Unit hacklab e' un laboratorio autogestito di sperimentazione tecnica
e politica, le nostre attivita' comprendono corsi gratuiti di
elettronica e informatica e divulgazione delle pratiche di gestione
della privacy sotto forma di incontri e convegni. Ci occupiamo non
solo di tecnica, ma anche di politica in quanto la tecnologia non e'
neutra.

== Chi e' un hacker? ==

Colei, colui o colacaso che gode dello spirito dell'intelligenza giocosa.

== Come posso incontrarvi? ==

Chiedi a chi ti ha mandato a questo sito di accompagnarti al prossimo
incontro.

== Come posso contattarvi? ==

Puoi mandarci una mail a unit [at] paranoici [dot] org o join sul
network IRC Autistici/Inventati il canale #unit.

== Non voglio incontrarvi, voglio solo delle risorse su che software usare ==

Ne trovi qui:

[https://prism-break.org/it/](https://prism-break.org/it/)




+ 93
- 0
content/pages/howto_mailinglist.md View File

@@ -0,0 +1,93 @@
Title: Linee guida mailing list
Slug: howto_mailinglist



# Linee guida: Mailing list

## Non usare HTML

Il testo semplice è buono. Tutti lo leggono, sempre, con piacere.

Meglio scrivere in formato testo semplice. Alcuni programmi di default compongono le email in HTML.
Frugare tra le impostazioni ci permetterà di impostare la modalità testo semplice.

Nota che l'HTML viene inviato nelle email sotto forma di allegato, ma non è la email.

## Non mandare allegati enormi

L'allegato mandato per e-mail viene copiato per ogni iscritto alla lista, intasando il provider,
e ci si tiene a non intasarlo, specie se è autogestito.

Inoltre potrebbe generare acidità in chi avesse una connessione che paga a consumo.

Per evitare di mandare allegati pesanti in lista è bene usare un servizio esterno e mandare il link nella mail.

Unit ha un servizio di storage cloud e dovresti sapere come accedere. Altrimenti dovresti chiederlo in mailing list.

## Oggetto delle e-mail

Usa un oggetto sensato, che predica il contenuto della mail.

Serve a farsi leggere e anche a ritrovare la mail in futuro.

Esempio bene - Subject: i miei 2c sulla questione manifesto

Esempio male - Subject: ciao

## Porta rispetto per il thread

Quando rispondi a una mail, attieniti all'oggetto.

In questo modo si può seguire il filo del discorso (che chiamiamo thread) e nessuno ti accuserà mai di
fare thread-hijacking, cioè di mischiare argomenti.

Se si devono dire cose nuove e non inerenti a un thread, meglio mandare una mail nuova con un subject nuovo.

Diventa così facile cercare tra le vecchie discussioni.

Nota che non basta cancellare un subject e scriverne un altro al suo posto per creare un nuovo thread,
per creare un nuovo thread devi mandare una nuova mail alla lista. Se rispondi a un thread già esistente,
pure che cambi il subject, resta lo stesso thread.

## Quotare

Quotare significa riportare parti della e-mail a cui stai rispondendo in modo da dare maggiore contesto alla tua risposta.

Una riga quotata è preceduta dal simbolo di maggiore: >.

> appuntamento mercoledì sera alle 8
Ci sono, ma arriverò alle 21

Quota soltanto ciò che serve. Non quotare intere e-mail per rispondere soltanto: "Ok".

(A meno che non rispondi a una mail formattata con indici nel qual caso considera di lasciare anche un riferimento agli argomenti,
che pure non citi, ma non cancelli per gli altri dal thread.)

Il contenuto della mail a cui si risponde (il quote) si quota sopra (e non sotto) la tua risposta.

## Evitare il top-posting

Risposta: Perché confonde l'ordine con il quale si legge il testo
Domanda: Perché il Top-posting non si fa?
Risposta: Il Top-Posting
Domanda: Qual'è la cosa più noiosa delle email?

Top-posting significa scrivere sopra il quote. Ottiene l'effetto indesiderato di invertire la cronologia del discorso
e rende difficile continuare la discussione.

Esempio in top-posting:

io certo che vengo, ci vediamo davanti. Olivia
> io non ce la faccio proprio. Minnie
>> ciao, stasera venite a ballare al Calypso? Popeye

Esempio in down-posting:

>> ciao, stasera venite a ballare al Calypso? Popeye
> io non ce la faccio proprio. Minnie
io certo che vengo, ci vediamo davanti. Olivia

* * *

_[Unit hacklab](http://unit.abbiamoundominio.org), 4 ottobre 2016_

+ 22
- 0
content/pages/index.md View File

@@ -0,0 +1,22 @@
Title: unit state of mind
Slug: index

[manifesto](manifesto.html) | [faq](faq.html) | [newsletter](https://noise.autistici.org/mailman/listinfo/unit-news)

[wiki](https://wiki.unit.abbiamoundominio.org/) | [git](https://git.abbiamoundominio.org/)

[pmomp](pmomp.html) | [criptolibretto](criptolibretto.html) | [cheek2cheek](c2c.html) | [lost](http://lost.abbiamoundominio.org/)

[comunicati](comunicati/index.html) | [nolike](nolike.html)


* * *


mercoledi pomeriggio: [laboratorio di elettronica](https://wiki.unit.abbiamoundominio.org/LaboratorioElettronica)

venerdi sera: [free hacking friday](https://wiki.unit.abbiamoundominio.org/FHF)

_Se hai pensato che c'era un modo migliore, avevi ragione._



+ 52
- 0
content/pages/manifesto.md View File

@@ -0,0 +1,52 @@
Title: Manifesto
Slug: manifesto


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

__ _ _ _ _ __
/ _| | | | |_____|_| |_ |_ \
| | | | | | _ | | _| | |
| |_ | |_| | | | | | |_ _| |
\__| |_____|_| |_|_|___| |__/
| manifesto |


----[ 1 ]----------------------------------------------------------------------

Noi unitariani veniamo relativamente in pace.
Siamo multigenere e multiforma.
Condividiamo l'idea di condividere la condivisione con di voi.

----[ 1.1 ]--------------------------------------------------------------------

Pensiamo che la tecnologia non sia neutra, che Internet possa diventare anche
un formidabile strumento di oppressione, che l'informazione e il software
debbano essere liberi, e che le conoscenze non siano merce, che il codice sia
l'espressione poetica dei misconosciuti legislatori del mondo e che legale non
significhi giusto.

Siamo antifascisti, antisessisti e antirazzisti.

Vogliamo creare spazi liberi da gerarchie e discriminazioni dove studiare e
divulgare quello che ci piace.

Siamo mossi dal desiderio, non crediamo ai confini.

Ci aggreghiamo per affinita', prendiamo decisioni con il metodo del consenso,
il nostro spazio e' una Zona Autonoma, condivideremo saperi senza fondare poteri.

----[ 1.2 ]--------------------------------------------------------------------

Noi abbiamo sempre nutrito il sogno di una cosa,
ma oggi abbiamo scelto di diventare coscienti.

Non vogliamo tutto e subito e non abbiamo fretta,
ma aspettiamo una risposta per domani mattina.

----[ 2 - Domande ]------------------------------------------------------------

Hai delle domande? E noi abbiamo delle FAQ:
http://unit.abbiamoundominio.org/faq.html

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

+ 127
- 0
content/pages/nolike.md View File

@@ -0,0 +1,127 @@
Title: NoLike
Slug: nolike



Sulla Questione Social
======================

------------------------------------------------------------------

### 1 ottobre 2018

A cosa servono i social network? - Dibattito su strumenti e limiti della comunicazione social
---------------------------------------------------------------------------------------------

_Noi supportiamo il fediverso! (dal manifesto NO LIKE, di Nonèmi Nein, Ed. Arcigna)._

Questo documento è il risultato di numerose discussioni tenutesi a Unit hacklab, all'interno dello spazio occupato [Macao](http://macaomilano.org) a Milano. Nel giugno 2018 abbiamo formattato questi pensieri allo scopo di portarli all' [Hackmeeting](https://hackmeeting.org/) di Genova sotto forma di talk dal nome: Spazio di comunicazione - no like.

Sono state anche rilevanti: la discussione introduttiva al [Cryptoparty](https://wiki.unit.abbiamoundominio.org/Criptoparty) organizzato da Unit hacklab in Macao il 15 aprile 2018, l'incontro con il progetto [facebook.exposed](https://facebook.tracking.exposed/) durante il talk [Piano d'azione contro il dominio dei monopolisti](https://lost.noblogs.org/post/2018/05/17/lost-audio-dellincontro-del-16-5-piano-dazione-contro-il-dominio-dei-monopolisti-iniziando-da-facebook/) di vecna durante [LOST](https://lost.noblogs.org/) del 16 maggio 2018 in Cox18, gli incontri di tecnopolitica tenuti a Unit in ottobre e novembre 2017, la lettura e compagnia di Ippolita [Nell'acquario di Facebook](https://www.ippolita.net/en/node/59), la vicinanza di [Autistici](https://www.autistici.org/) e il [warm up pre-hackmeeting](https://hackmeeting.org/hackit18/warmup.html#giugno-unit-hacklab-e-il-collettivo-trammenti-presentano-spazio-di-comunicazione-macao-milano) del 14 e 29 giugno 2018 a Milano.

Unit hacklab ha deciso di non usare Facebook per comunicare le sue iniziative, neanche con un account anonimo, neanche in forma collettiva. Neanche. Siamo riusciti a comunicare egualmente grazie alla nostra capacità di utilizzare la rete: web, wiki, newsletter, chat e passaparola, ma abbiamo la consapevolezza che non possiamo meramente richiedere la stessa modalità a tutte le entità che desiderano divulgare le proprie attività, soprattutto se non si occupano di internet, ma si limitano a usarlo.

Ci siamo detti che prima di usare uno strumento sociale, avremmo potuto permetterci di domandarci prima qual'è la nostra idea di comunità e anche di ri-definirla.

l'Introduzione
--------------

[introduzione](https://wiki.unit.abbiamoundominio.org/Warm%20up%20di%20preparazione%20hackmeeting)

_In questi anni abbiamo vissuto un fenomeno di forte divisione e conseguente disagio che hanno portato alla attuale confusione sul tema della comunicazione e della diffusione di informazione su internet. Queste in particolare legate al fatto che molte dinamiche sono cambiate. Se pochi anni fa per collegarsi ad internet occorreva uno sforzo e si parlava di digital divide per indicare il divario tra le persone connesse e quelle no, oggi la connessione alla rete è praticamente forzata (chi ha un telefono intelligente è automaticamente collegato) e forzuta (il canale di comunicazione è stato occupato da un monopolista). Internet e "le reti" sono diventate di ampio uso ed hanno acquisito, utilitaristicamente, una grande importanza la componente di diffusione sociale e relazioni di potere. Gli strumenti di comunicazione hanno iniziato a sedimentarsi offrendo sempre meno un margine di contatto con altre realtà e possibilità di sviluppo. In particolare la realtà di comunicazione e diffusione delle "controculture" è migrato, da un orizzonte molto ampio con tanti siti modalità di comunicazione, attacchinaggio e in genere "realtà", che offrivano ognuna caratteristiche diverse, come ad esempio indymedia, ad un unico approccio di diffusione di funzionamento (di discutibile successo) che sono i Social. La parte fondamentale è capire che non c'è un unica soluzione, ma tantissime possibili. Di sicuro, quello che c'è non è l'unica cosa possibile ne tanto mento "il migliore dei mondi possibili". Questo fatto è fondamentale, il fatto che sui Social ci siano tutti è un fatto, ma non un bene, bensì un omologazione del pensiero e della modalità espressiva. Ciò che ha successo perché attrae le "masse" non è una conseguenza di una brillante capacità di analisi della società o un rispecchio dei bisogni umani. I bisogni sono perlopiù bisogni creati e "l'attrazione" è una conseguenza principalmente della massa critica, che consegue a livello strutturale e psicologico. Nella "guerra della comunicazione" non ha "vinto il più bravo", ma solo quello che ha rispettato meglio la sovrastruttura già presente e il più forte in termini di mezzi di produzione. Questo fenomeno ci ha portato a ragionare su fatto che sarebbe necessario ricreare uno "spazio" di comunicazione di diffusione delle realtà con un approccio critico e politico che abbia un approccio da controcultura, partendo dalle basi stesse della comunicazione dell'identità e di cosa vogliamo. La soluzione non sta in un software o in un nuovo protocollo, ma bensì nell'analisi e nella critica che faccia sì che si possa sperimentare in altre direzioni, saranno queste, secondo noi, a strutturare un modo diverso di approcciarsi alla comunicazione._

La presentazione del talk:
--------------------------

[talk MH 2018](https://hackmeeting.org/hackit18/schedule.html?print#talk-spaziodicomunicazione)

_A cosa servono i social network? - Dibattito su strumenti e limiti della comunicazione social. Se la vicenda di Cambridge analytica ha portato al grande pubblico, compresi gli arborigeni coi quali cerchiamo da sempre di dialogare e di dirci qualcosa, la questione del potere sui cosiddetti social network. Se il gruppo Ippolita ha individuato e indicato anche prima di allora le modalità di funzionamento di Facebook nella pornografia emotiva e nella gamificazione. Se il progetto facebook.tracking.exposed ha tentato di decostruire il funzionamento dell’algoritmo del social monopolista e suggerisce oggi che ognuno abbia il suo proprio algoritmo. Se Unit hacklab con la sua voce collettiva frammentata e traumatizzata si domanda: ma se la piazza diventa centro commerciale che fai? Apri un negozio o gli pianti dentro un casino? Se il gruppo Glep ricorda il sabotaggio come strumento di critica. Se il collettivo Trammenti ricorda che dovremmo ripartire dal concetto di comunità prima della questione tecnica. Se la tendenza di oggi è che la tecnica ci salverà, ma vorremmo partire prima dalle persone e siam qui a domandarci: ma noi cosa vogliamo? Prima di impastarci gioiosamente su identità, delega, autorità, affinità, struttura e responsabilità non possiamo che elencare la scaletta: dopo una breve intro, cominceremo con il resoconto tecnico di alcune pratiche di utilizzo di social network, per arrivare più consapevoli a una desideranda e solo allora si aprirà dibattito. A cura di Unit hacklab, collettivo Trammenti, gruppo Ippolita._

Com'è andato il Talk
--------------------

Il talk si è svolto partendo da una introduzione a quella che abbiamo chiamato: "la questione social", ossia sul come fare a gestire la comunicazione senza usare le piattaforme commerciali e perché. Il collettivo Trammenti ha portato la sua esperienza pratica di utilizzo delle seguenti piattaforme di comunicazione sociale alternative a quelle commerciali: Friendica, Hubzilla, Retroshare, IRC, I2P, Tox, Matrix, Xmpp, Zeronet e Netsukuku. Concludendo che nessuna di queste ha portato piena soddisfazione. Incuriositi dall'esperimento del Collettivo Bida di Bologna che qualche mese prima avevano implementato e cominciato a usare con successo Mastodon, un\* di noi ha installato una [instanza di Mastodon](https://nosocial.org/) e abbiamo cominciato ad usarlo, federandoci con i peer Bolognesi.

**Questa istanza non è un albergo**

Abbiamo raccontato la nostra esperienza di Mastodon che è stata brevissima. Mastodon non è distribuito. L'amministratore che ha implementato l'instanza ha rilevato che la responsabilità per il comportamento degli utenti sarebbe ricaduta su di lui risalendo alla macchina e l'ha distribuita nominando altri tre amministratori. Uno di questi, rilevando che non era chiaro come gestire la mole delle iscrizioni dal mondo là fuori e desiderando continuare la sperimentazione tra persone conosciute, ha chiuso ai nuovi iscritti.

Abbiamo in seguito ragionato come gestire i logs, i consensi, la normativa EU GDPR e il come gestire l'autorità dovesse venire a chiedere notizie di un post "scomodo" e in generale come autotutelarci. Ci siamo così ricordati come l'uso dei social riproponga le dinamiche sociali di potere, anche economiche.

Questa proposta di disclaimer pseudo-legalese apparsa solo nella mailing-list di Unit il 26 giugno 2018 può dare l'idea della confusione:

_Questa macchina, non diversamente dalle altre macchine affacciate sulla rete che offrono servizi, seraficamente registra informazioni oltre i dati immessi volontariamente pigiando sui tasti: quali l'user agent del browser o l'indirizzo IP dal quale avviene il collegamento. Internet oggi funziona così. Ma, diversamente da altre macchine affacciate sulla rete, questa macchina ha dietro gente che non vorrebbe registrare nessuna informazione e lavora duro per non farlo. Fa ricerche, sperimenta e si informa. Il primo punto è che vogliamo usare questo servizio, non raccogliere dati. Il secondo punto è che non siamo in malafede, non intendiamo vendere o trarre profitto dai dati. Di questi tempi, ci rendiamo conto di quanto queste affermazioni suonino bizzarre. La legge, e in particolare il GDPR, il regolamento europeo 679 del 2016, ci impone di trattare bene i dati degli altri. Noi crediamo di farlo per consapevolezza e non perché obbligati a farlo dalla legge. Teniamo dunque meno dati possibile, in ogni caso non li usiamo altrimenti che finalizzati al servizio mastodon e siamo ispirati dai principi di liceità, finalità, minimizzazione, esattezza, limitazione e riservatezza. In breve, sui dati: Li buttiamo appena possibile. Non li comunichiamo a nessuno. Non ne facciamo profitto. Tendiamo a non avere log. Si, alfieri del no-log. Oggi come ieri. Puoi andartene quando vuoi. Saluta quando esci. Questa istanza non è un albergo._

Fuori dalla tecnica
-------------------

Siamo poi usciti dalla parte tecnica sulla sperimentazione di strumenti per tornare a ragionare sulla comunità e in particolare sul concetto di _identità_ (singola e collettiva), _delega_, _autorità_, _tracciabilità_ ed _ecologia_.

Prima di creare o usare un social network dovremmo farci due domande sul tipo di comunità che vogliamo. I social sono relazioni di potere, eppure alcune persone, sopratutto quando vengono rappresentate come massa, non vuole la libertà ma vuole che qualcuno gli dica cosa fare. La pappa pronta. Ci rendiamo conto del rischio di stare a pensare un Social per smanettoni mentre alla gente là fuori magari va benissimo restare utenti e dare totale delega. Osserviamo anche che c'è grossa crisi! Viviamo una crisi economica strutturale. Stare fuori da Facebook se lo possono permettere i ricchi e gli intellettuali, non se lo può permettere chi sta cercando lavoro, chi vive una interruzione delle relazioni affettive, chi emigra.

Abbiamo elencato delle desiderata su cosa vorremmo e non da un mezzo di comunicazione sociale:

* Che non sia un clone dei social commerciali, che non riproponga la stessa interfaccia, che non obblichi agli stessi percorsi e non replichi le stesse dinamiche, come ad esempio fa OpenOffice per MS Office.
* Che sia software libero.
* Che non sia censurabile.
* Che non sia costruito a misura di device, come fatto apposta per essere usato su un telefonino.
* Che siano tutti partecipanti e non utenti, tantomeno utonti (meno delega, meno centralizzazione del potere).
* Che riconosca le differenze e non ci appiattisca. Siamo tutti diversi e tutti pari.
* Che permetta sviluppo e uso a comunità piccole (che sia federabile).
* Che sia distribuito/decentrato (p2p).
* Che permetta riservatezza (la questione identità e tracciabilità, la cifratura).
* Che non crei dipendenze (niente gamification, no like e manco le stelline)(limitazione del danno).
* Che sia utilizzabile in maniera asincrona, per evitare ansia da prestazione e da risposta immediata.
* Che ci permetta di storicizzare i contenuti che mettiamo. Cioé di poterli recuperare e organizzare e che non ci schiacci sul presente, dove ogni giorno è un giorno nuovo e quello che è successo ieri non esiste più.
* Che ci permetta di avere una voce collettiva. (Tutti i social atomizzano l'utilizzatore obbligandolo ad essere solo, a volte addirittura ad usare nome vero).
* Che permetta di valorizzare i contenuti lavorati (non solo flusso di coscienza e rilanci).

Il resto del tempo è stata dedicato al dibattito con i presenti.

Conclusioni del talk
--------------------

Il momento che ricordiamo più interessante del dibattito è stato quando qualcuno ha chiesto perché mai non usassimo un semplice sito web per comunicare.

Le nostre conclusioni sono le seguenti:

L'educazione è importante, non possiamo pensare di utilizzare strumenti potenti senza sapere nulla di come funzionino. Esistono degli strumenti già collaudati che sappiamo usare in molti. Ci serve di usarli bene. Distinguiamo la comunicazione in almeno due finalità: **organizzazione** e **diffusione**.

Questi strumenti di comunicazione sociale sono:

* **la Email e la Mailing list per l' organizzazione**
* **Il feed RSS e la pagina web per la diffusione**

Ci impegniamo a divulgare l'uso della email e della mailing list. vedi: [Come usare una mailing list](howto-mailinglist.html)

L'email è portatile, collaudata, universalmente accettata, archivabile, asincrona.

Il feed RSS non impegna a dover creare un account per seguire chi diffonde contenuti.

Progetti
--------

Sul sito abbiamoundominio.org faremo un sottodominio con aggregatore di feed rss, cioè una pagina dove trovare gli eventi divisi per data e luogo, degli eventi che le varie entità diffondono usando RSS.

Stiamo lavorando a un software chiamato [Ciclostile](https://git.unit.macaomilano.org/unit/ciclostile) che permette, impostando quattro campi: data, luogo, titolo, descrizione e una immagine di ottenere un Pdf da poter stampare come volantino e una pagina html. Potremmo aggiungere la funzionalità di offrire un feed RSS? La pagina html serve alla creazione di un sito, il Pdf può essere stampato per servire da volantino, ma anche postato su Facebook, con il risultato però che a chi ha programmato l'evento rimane un archivio e non avrà semplicemente donato le sue parole e i suoi sforzi a Facebook, il quale ha una memoria selettiva.

Stiamo progettando di usare IPFS per la creazione di spazi di diffusione liberi.

Limitazione del danno: alcune pratiche di utilizzo di Facebook
--------------------------------------------------------------

Vogliamo citare le parole di Joe Strummer: se ti scopi le suore, prima o poi finisci in convento. Dunque noi abbiamo deciso di non usarlo. Crediamo anche nelle parole di Marguerite Duras: Chi sceglie il male minore dimentica in fretta di aver scelto il male.

Ma a parte gli slogan di radicalismo d'effetto, non ha senso fare diffusione in un luogo dove devi fare un login per entrare e dove viene effettuata censura sui contenuti, sia eliminando quelli scomodi, sia decidendo cosa far vedere a chi secondo regole oscure.

Se proprio un gruppo che ha una pratica di incisione nella realtà deve usare Facebook, almeno elabori i contenuti al di fuori e li copia incolli solamente sul social. In questo modo archivia e tiene memoria del suo lavorato e lo diffonde _anche_ a chi non usa Facebook.

Inoltre postare solo contenuti parziali obbliga ad uscire dai social, facendo cliccare fuori. Saltare fuori dal giardinetto recintato, la bolla dalla quale solitamente non si esce. I contenuti che vengono immessi su Facebook sono persi e ceduti a questo social il quale oltre a sussumerli, usarli a profitto e talvolta a discapito di chi li crea, trita e poi fa polpette del vostro io digitale! È diacronico e schiaccia sul presente, tramuta il popolo in massa, senza memoria, senza voce collettiva, con solo la beffa di una critica.

[Pdf da stampa](media/nolike.pdf) SHA512(nolike.pdf)= 66d579e17084b5c50832e403429f2f2378dbd8dc16538ada37754210d3ab71e73a87e96ea7c3825c7a51718fd78dea441cc6610fed2ce2bba78036a05fd6e187

_[Unit hacklab](http://unit.abbiamoundominio.org), ultimo aggiornamento 18 ottobre 2018_


+ 20
- 0
content/pages/pmomp.md View File

@@ -0,0 +1,20 @@
Title: Privacy Matters On My Phone
Slug: pmomp
Category: pmomp
Tags: pmomp

**Percorso in cinque passi per entrare in possesso del proprio smartphone dopo averlo comperato.**

L'obiettivo di questo progetto e' di raccogliere e divulgare strumenti e conoscenze per utilizzare
uno smartphone Android senza cedere la propria privacy. Il progetto e' strutturato in cinque livelli,
dal piu' facile fino al livello piu' radicale senza compromessi.
Vogliamo rompere la sacralita' nell'utilizzo dello smartphone, il telefono intelligente (detto anche furbo)
e' un computer con il quale abbiamo un rapporto di intimita' e sul quale si possono e si devono mettere sopra le mani.
Si deve poter essere liberi sul proprio dispositivo.

Per il sorgente del libretto e slide, seguire il [git](https://git.abbiamoundominio.org/unit/pmomp)


![pmomp flyer](media/pmomp-flyer.png)

[Audio podcast](https://lost.abbiamoundominio.org/2019/03/privacy-matters-on-my-phone-2/)

+ 75
- 0
pelicanconf.py View File

@@ -0,0 +1,75 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*- #
from __future__ import unicode_literals

AUTHOR = u'Unit'
SITENAME = u'unit'
# SITEURL = 'https://unit.abbiamoundominio.org'
SITEURL = ''

# SITESUBTITLE = ''

PATH = 'content'
PAGE_PATHS = ['pages']
ARTICLE_PATHS = ['blog']
STATIC_PATHS = ['images', 'media']

TIMEZONE = 'Europe/Rome'

DEFAULT_LANG = u'it'

DEFAULT_PAGINATION = 3
DEFAULT_DATE = 'fs'
DEFAULT_DATE_FORMAT = '%d %B %Y'

RSS_FEED_SUMMARY_ONLY = True

# Feed generation is usually not desired when developing
FEED_ALL_ATOM = None
FEED_ALL_RSS = None
CATEGORY_FEED_ATOM = None
TRANSLATION_FEED_ATOM = None
AUTHOR_FEED_ATOM = None
AUTHOR_FEED_RSS = None

LINKS = None
SOCIAL = None

DEFAULT_PAGINATION = False

DEFAULT_METADATA = {'unit hacklab': 'This is a Game Planet'}

# Uncomment following line if you want document-relative URLs when developing
# RELATIVE_URLS = True

MARKDOWN = {
'extension_configs': {
'markdown.extensions.codehilite': {'css_class': 'highlight'},
'markdown.extensions.extra': {},
'markdown.extensions.meta': {},
},
'output_format': 'html5',
}

WITH_FUTURE_DATES = False

THEME = 'themes/minimo'

PAGE_URL = '{slug}.html'
PAGE_SAVE_AS = '{slug}.html'
ARTICLE_URL = 'blog/{date:%Y-%m-%d}-{slug}.html'
ARTICLE_SAVE_AS = 'blog/{date:%Y-%m-%d}-{slug}.html'


INDEX_SAVE_AS = 'articles.html'

USE_FOLDER_AS_CATEGORY = True
DISPLAY_PAGES_ON_MENU = False
DISPLAY_CATEGORIES_ON_MENU = False

MENUITEMS = (('HOME |', 'index.html'),
('NEWS |', 'articles.html'),
('CATEGORIE |', 'categories.html'),
('TAG |', 'tags.html'),
('CONTATTI |', 'contatti.html'),
('RSS', 'feeds/all.atom.xml'),)

+ 25
- 0
publishconf.py View File

@@ -0,0 +1,25 @@
#!/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 *

# If your site is available via HTTPS, make sure SITEURL begins with https://
SITEURL = 'https://unit.abbiamoundominio.org/tmp/'
RELATIVE_URLS = False

FEED_ALL_ATOM = 'feeds.atom.xml'
FEED_ALL_RSS = 'feeds.xml'

DELETE_OUTPUT_DIRECTORY = True

# Following items are often useful when publishing

#DISQUS_SITENAME = ""
#GOOGLE_ANALYTICS = ""

+ 80
- 0
tasks.py View File

@@ -0,0 +1,80 @@
# -*- coding: utf-8 -*-

import os
import shutil
import sys
import datetime

from invoke import task
from invoke.util import cd
from pelican.server import ComplexHTTPRequestHandler, RootedHTTPServer

CONFIG = {
# Local path configuration (can be absolute or relative to tasks.py)
'deploy_path': 'output',
# Remote server configuration
'production': 'root@abbiamoundominio.org:22',
'dest_path': '/var/www/unit.abbiamoundominio.org/',
# Port for `serve`
'port': 8000,
}

@task
def clean(c):
"""Remove generated files"""
if os.path.isdir(CONFIG['deploy_path']):
shutil.rmtree(CONFIG['deploy_path'])
os.makedirs(CONFIG['deploy_path'])

@task
def build(c):
"""Build local version of site"""
c.run('pelican -s pelicanconf.py')

@task
def rebuild(c):
"""`build` with the delete switch"""
c.run('pelican -d -s pelicanconf.py')

@task
def regenerate(c):
"""Automatically regenerate site upon file modification"""
c.run('pelican -r -s pelicanconf.py')

@task
def serve(c):
"""Serve site at http://localhost:8000/"""

class AddressReuseTCPServer(RootedHTTPServer):
allow_reuse_address = True

server = AddressReuseTCPServer(
CONFIG['deploy_path'],
('', CONFIG['port']),
ComplexHTTPRequestHandler)

sys.stderr.write('Serving on port {port} ...\n'.format(**CONFIG))
server.serve_forever()

@task
def reserve(c):
"""`build`, then `serve`"""
build(c)
serve(c)

@task
def preview(c):
"""Build production version of site"""
c.run('pelican -s publishconf.py')


@task
def publish(c):
"""Publish to production via rsync"""
c.run('pelican -s publishconf.py')
c.run(
'rsync --delete --exclude ".DS_Store" -pthrvz -c '
'{} {production}:{dest_path}'.format(
CONFIG['deploy_path'].rstrip('/') + '/',
**CONFIG))


+ 37
- 0
themes/minimo/static/css/style.css View File

@@ -0,0 +1,37 @@
body {
font-family: "Courier New", Courier, monospace
font-size: 100%;
background-color: #F4F4E8;
color: #333333;
min-width: 400px;
min-height: 200px;
margin: 2% 2%;
padding:0;
height:98%;;
margin-left: 33%;
margin-right: 33%;
}

a:link { color: #003399; text-decoration: none; }
a:visited { color: #336699; text-decoration: none; }
a:hover { color: #003399; background: #ff8c19; text-decoration: none; }

h1 a { color: inherit !important }
h2 a { color: inherit !important }
h3 a { color: inherit !important }
h4 a { color: inherit !important }
h5 a { color: inherit !important }
h6 a { color: inherit !important }

#menu li {
display: inline;
}

#post-list {
margin-bottom: 1em;
margin-top: 1em;
}

pre {
margin: 2em 1em 2em 4em;
}

+ 42
- 0
themes/minimo/templates/archives.html View File

@@ -0,0 +1,42 @@
{% extends "index.html" %}
{% block title %}Archivio {{ SITENAME }}{% endblock %}
{% block ogtitle %}Archivio {{ SITENAME }}{% endblock %}
{% block ogurl %}{{ SITEURL }}/archives.html{%endblock%}
{% block canonicalurl %}{{ SITEURL }}/archives.html{%endblock%}

{% block content %}
<div class="span9">
<section>
<h1>{% block content_title %}Archivio per data{% endblock %}</h1>

{% for article in dates %}
{% set this_year = article.date.strftime('%Y') %}

{% if this_year != prev_year %}
<div class="row-fluid archive_row">
<div class="span1 archive_year">{{ this_year }}</div>
</div>
{% endif %}
{% if this_year != prev_year or this_month != prev_month %}
<div class="row-fluid archive_row">
<div class="offset1 span1 archive_month">{{ this_month }}</div>
</div>
{% endif %}
<div class="row-fluid archive_row">
{% if this_month != prev_month or this_day != prev_day %}
<div class="offset1 span1 archive_day">
{{ this_day }}
</div>
{% endif %}
<div class="{% if this_year == prev_year and this_month == prev_month and this_day == prev_day %}offset2 {% endif %}span10">
<dd><a href="{{ SITEURL }}/{{ article.url }}">{{ article.title }}</a> <small>{{ article.category }}</small></dd>
</div>
</div>
{% set prev_year = this_year %}
{% set prev_month = this_month %}
{% set prev_day = this_day %}
{% endfor %}
</section>
</div>
{% endblock %}


+ 28
- 0
themes/minimo/templates/article.html View File

@@ -0,0 +1,28 @@
{% extends "base.html" %}

{% block title %}{{ article.title|striptags }} | {{ SITENAME }}{% endblock %}
{% block ogtitle %}{{ article.title|striptags }}{% endblock %}
{% block ogurl %}{{ SITEURL }}/{{ article.url }}{%endblock%}
{% block ogtype %}article{%endblock%}
{% block canonicalurl %}{{ SITEURL }}/{{ article.url }}{%endblock%}

{% block content %}

<div class="span10 offset1">
<section>
<article>
<header>
<h1 class="entry-title">
<a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark"
title="Permalink a {{ article.title|striptags }}">{{ article.title}}</a></h1>
</header>

<div class="entry-content">
{% include 'article_infos.html' %}
{{ article.content }}
</div>

</article>
</section>
</div>
{% endblock %}

+ 25
- 0
themes/minimo/templates/article_infos.html View File

@@ -0,0 +1,25 @@
<footer class="post-info">
{% if article.author %}
<address class="vcard author">
<a class="url fn" href="{{ SITEURL }}/{{ article.author.url }}">{{ article.author }}</a>
</address>
{% endif %}

data: {{ article.date.strftime('%d %B %Y') }}

<br>

categoria: <a href="{{ SITEURL }}/{{ article.category.url }}">{{ article.category }}</a>

<br>

{% if article.tags %}
tag: {% for tag in article.tags %}
<a href="{{ SITEURL }}/{{ tag.url }}">{{ tag }}</a>
{% endfor %}
{% endif %}

{% import 'translations.html' as translations with context %}
{{ translations.translations_for(article) }}

</footer>

+ 5
- 0
themes/minimo/templates/author.html View File

@@ -0,0 +1,5 @@
{% extends "index.html" %}
{% block title %}{{ SITENAME }} - {{ author }} | {{ SITENAME }}{% endblock %}
{% block ogtitle %}{{ SITENAME }} - {{ author }}{% endblock %}
{% block ogurl %}{{ SITEURL }}/{{ author.url }}{%endblock%}
{% block canonicalurl %}{{ SITEURL }}/{{ author.url }}{%endblock%}

+ 72
- 0
themes/minimo/templates/base.html View File

@@ -0,0 +1,72 @@
<!DOCTYPE html>
<html lang="{{ DEFAULT_LANG }}">
<head>
{% block head %}
<title>{% block title %}{{ SITENAME }}{% endblock title %}</title>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="{{ SITEURL }}/theme/css/style.css" />
{% if FEED_ALL_ATOM %}
<link href="{{ FEED_DOMAIN }}/{{ FEED_ALL_ATOM }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Full Atom Feed" />
{% endif %}
{% if FEED_ALL_RSS %}
<link href="{{ FEED_DOMAIN }}/{{ FEED_ALL_RSS }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} Full RSS Feed" />
{% endif %}
{% if FEED_ATOM %}
<link href="{{ FEED_DOMAIN }}/{{ FEED_ATOM }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Atom Feed" />
{% endif %}
{% if FEED_RSS %}
<link href="{{ FEED_DOMAIN }}/{{ FEED_RSS }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} RSS Feed" />
{% endif %}
{% if CATEGORY_FEED_ATOM and category %}
<link href="{{ FEED_DOMAIN }}/{{ CATEGORY_FEED_ATOM|format(category.slug) }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Categories Atom Feed" />
{% endif %}
{% if CATEGORY_FEED_RSS and category %}
<link href="{{ FEED_DOMAIN }}/{{ CATEGORY_FEED_RSS|format(category.slug) }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} Categories RSS Feed" />
{% endif %}
{% if TAG_FEED_ATOM and tag %}
<link href="{{ FEED_DOMAIN }}/{{ TAG_FEED_ATOM|format(tag.slug) }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Tags Atom Feed" />
{% endif %}
{% if TAG_FEED_RSS and tag %}
<link href="{{ FEED_DOMAIN }}/{{ TAG_FEED_RSS|format(tag.slug) }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} Tags RSS Feed" />
{% endif %}
{% endblock head %}
</head>

<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="{{ SITEURL }}/">{{ SITENAME }} <strong>{{ SITESUBTITLE }}</strong></a></h1>
<img src="images/logo.png" alt="logo" width="85" height="85" border="0">
</header><!-- /#banner -->
<nav id="menu"><ul>
{% for title, link in MENUITEMS %}
<li><a href="{{ link }}">{{ title }}</a></li>
{% endfor %}
{% if DISPLAY_PAGES_ON_MENU %}
{% for p in pages %}
<li{% if p == page %} class="active"{% endif %}><a href="{{ SITEURL }}/{{ p.url }}">{{ p.title }}</a></li>
{% endfor %}
{% else %}
{% if DISPLAY_CATEGORIES_ON_MENU %}
{% for cat, null in categories %}
<li{% if cat == category %} class="active"{% endif %}><a href="{{ SITEURL }}/{{ cat.url }}">{{ cat }}</a></li>
{% endfor %}
{% endif %}
{% endif %}
</ul></nav><!-- /#menu -->
{% block content %}
{% endblock %}

<footer id="contentinfo" class="body">
<hr>
<address id="about" class="vcard body">
<small>
unit hacklab 2019 - Alimentato da
<a href="http://python.org">Python</a> e
<a href="http://getpelican.com/">Pelican</a>, tema
<a href="https://git.abbiamoundominio.org/dan/minimo">minimo</a>
</small>
</address><!-- /#about -->
</footer><!-- /#contentinfo -->

</body>
</html>

+ 19
- 0
themes/minimo/templates/categories.html View File

@@ -0,0 +1,19 @@
{% extends "index.html" %}
{% block title %}Categorie di {{ SITENAME }}{% endblock %}
{% block ogtitle %}Categorie di {{ SITENAME }}{% endblock %}
{% block ogurl %}{{ SITEURL }}/categories.html{%endblock%}
{% block canonicalurl %}{{ SITEURL }}/categories.html{%endblock%}

{% block content %}
<div class="span9">
<section>
<h1>{% block content_title %}Categorie {% endblock %}</h1>

<dl>
{% for category, articles in categories %}
<dd><a href="{{ SITEURL }}/{{ category.url }}">{{ category }} ({{ articles|count }})</a></dd>
{% endfor %}
</dl>
</section>
</div>
{% endblock %}

+ 6
- 0
themes/minimo/templates/category.html View File

@@ -0,0 +1,6 @@
{% extends "archives.html" %}
{% block title %}{{ SITENAME }} - {{ category }}{% endblock %}
{% block content_title %} Ricerca per categoria: {{ category }}{% endblock %}
{% block ogtitle %}{{ SITENAME }} - {{ category }}{% endblock %}
{% block ogurl %}{{ SITEURL }}/{{ category.url }}{%endblock%}
{% block canonicalurl %}{{ SITEURL }}/{{ category.url }}{%endblock%}

+ 74
- 0
themes/minimo/templates/index.html View File

@@ -0,0 +1,74 @@
{% extends "base.html" %}
{% block content_title %}{% endblock %}
{% block ogtitle %}{{ SITENAME }}{% endblock %}
{% block ogurl %}{{ SITEURL }}{%endblock%}
{% block canonicalurl %}{{ SITEURL }}{%endblock%}

{% block content %}
<div class="span9">
{% if articles %}
{% for article in articles_page.object_list %}
{% if loop.length > 0 %}
{% if loop.first %}
<section>
<ol id="posts-list" class="hfeed" start="{{ articles_paginator.per_page -1 }}">
{% endif %}
<article>
<header>
<h1 class="entry-title">
<a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark" title="Permalink: {{ article.title|striptags }}">
{{ article.title }}
</a>
</h1>
</header>
<div class="entry-content">
{% include 'article_infos.html' %}
{{ article.summary }}
<p class="readmore">
<a class="btn btn-small btn-info" href="{{ SITEURL }}/{{ article.url }}">continua..</a>
</p>
</div>
<hr/>
</article>
{% if loop.last %}
</ol><!-- /#posts-list -->
{% if loop.last and (articles_page.has_previous()
or not articles_page.has_previous() and loop.length > 1) %}
{% include 'pagination.html' %}
{% endif %}
</section><!-- /#content -->
{% endif %}
{% endif %}
{% endfor %}
{% else %}
<section>
<h2>Pages</h2>
{% for page in PAGES %}
<li><a href="{{ SITEURL }}/{{ page.url }}">{{ page.title }}</a></li>
{% endfor %}
</section>
{% endif %}
</div>
{% endblock content %}

{% if LINKS %}
<div>
<h2>Links</h2>
<ul>
{% for name, link in LINKS %}
<li><a href="{{ link }}">{{ name }}</a></li>
{% endfor %}
</ul>
</div><!-- /.Links -->
{% endif %}
{% if TAG_CLOUD_STEPS %}
<div>
<h2>Tags</h2>
<ul id="cloud">
{% for tag in tag_cloud %}
<li class="tag-{{ tag.1 }}"><a href="{{ SITEURL }}/{{ tag.0.url }}">{{ tag.0 }}</a></li>
{% endfor %}
</ul>
</div>
{% endif %}<!-- /.Tags -->
</div>

+ 15
- 0
themes/minimo/templates/page.html View File

@@ -0,0 +1,15 @@
{% extends "base.html" %}
{% block title %}{{ page.title }} | {{ SITENAME }}{% endblock %}
{% block ogtitle %}{{ page.title|striptags }}{% endblock %}
{% block ogurl %}{{ SITEURL }}/{{ page.url }}{%endblock%}%}
{% block canonicalurl %}{{ SITEURL }}/{{ page.url }}{%endblock%}

{% block content %}
<section >
<h1 class="entry-title">{{ page.title }}</h1>
{% import 'translations.html' as translations with context %}
{{ translations.translations_for(page) }}
{{ page.content }}
</section>
{% endblock %}


+ 6
- 0
themes/minimo/templates/tag.html View File

@@ -0,0 +1,6 @@
{% extends "archives.html" %}
{% block title %}{{ SITENAME }} - {{ tag }} | {{ SITENAME }}{% endblock %}
{% block content_title %}Ricerca per tag: "{{ tag }}"{% endblock %}
{% block ogtitle %}{{ SITENAME }} - {{ tag }}{% endblock %}
{% block ogurl %}{{ SITEURL }}/{{ tag.url }}{%endblock%}
{% block canonicalurl %}{{ SITEURL }}/{{ tag.url }}{%endblock%}

+ 19
- 0
themes/minimo/templates/tags.html View File

@@ -0,0 +1,19 @@
{% extends "index.html" %}
{% block title %}Tags in {{ SITENAME }}{% endblock %}
{% block ogtitle %}Tags in {{ SITENAME }}{% endblock %}
{% block ogurl %}{{ SITEURL }}/tags.html{%endblock%}%}
{% block canonicalurl %}{{ SITEURL }}/tags.html{%endblock%}

{% block content %}
<div class="span9">
<section>
<h1>{% block content_title %}Tags{% endblock %}</h1>

<dl>
{% for tag, articles in tags|sort %}
<dd><a href="{{ SITEURL }}/{{ tag.url }}">{{ tag }} ({{ articles|count }})</a></dd>
{% endfor %}
</dl>
</section>
</div>
{% endblock %}

+ 10
- 0
themes/minimo/templates/translations.html View File

@@ -0,0 +1,10 @@
{% macro translations_for(article) %}
{% if article.translations %}
<br>
Translations:
{% for translation in article.translations %}
<a href="{{ SITEURL }}/{{ translation.url }}">{{ translation.lang }}</a>
{% endfor %}
{% endif %}
{% endmacro %}


Loading…
Cancel
Save