commit ceacdb8ccff397b8155a89abecfea084c27d68ea Author: putro Date: Sat Mar 23 22:29:32 2019 +0100 prima versione del sito in pelican diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fc90558 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +__pycache__/ +cache/ +output/ +*.pyc +pelican.pid diff --git a/LEGGIMI.md b/LEGGIMI.md new file mode 100644 index 0000000..bba9ef9 --- /dev/null +++ b/LEGGIMI.md @@ -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. + diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..a12a3b9 --- /dev/null +++ b/Makefile @@ -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 diff --git a/content/images/logo.png b/content/images/logo.png new file mode 100644 index 0000000..e3893fd Binary files /dev/null and b/content/images/logo.png differ diff --git a/content/media/c2c-screenshot-mobile.jpg b/content/media/c2c-screenshot-mobile.jpg new file mode 100644 index 0000000..bbd6d32 Binary files /dev/null and b/content/media/c2c-screenshot-mobile.jpg differ diff --git a/content/media/nolike.pdf b/content/media/nolike.pdf new file mode 100644 index 0000000..edb8f57 Binary files /dev/null and b/content/media/nolike.pdf differ diff --git a/content/media/pmomp-flyer.png b/content/media/pmomp-flyer.png new file mode 100644 index 0000000..9529ad2 Binary files /dev/null and b/content/media/pmomp-flyer.png differ diff --git a/content/news/001-comunicato_sgombero.md b/content/news/001-comunicato_sgombero.md new file mode 100644 index 0000000..1f08012 --- /dev/null +++ b/content/news/001-comunicato_sgombero.md @@ -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 diff --git a/content/news/002-welcome_pelican.md b/content/news/002-welcome_pelican.md new file mode 100644 index 0000000..e7b164f --- /dev/null +++ b/content/news/002-welcome_pelican.md @@ -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. + + diff --git a/content/pages/c2c.md b/content/pages/c2c.md new file mode 100644 index 0000000..9eaa435 --- /dev/null +++ b/content/pages/c2c.md @@ -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) + diff --git a/content/pages/contatti.md b/content/pages/contatti.md new file mode 100644 index 0000000..3230c30 --- /dev/null +++ b/content/pages/contatti.md @@ -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 irc.autistici.org + +o puoi passare a trovarci il mercoledi sera presso Macao, in via Molise 68 a Milano diff --git a/content/pages/criptolibretto.md b/content/pages/criptolibretto.md new file mode 100644 index 0000000..099704c --- /dev/null +++ b/content/pages/criptolibretto.md @@ -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) + + + + diff --git a/content/pages/faq.md b/content/pages/faq.md new file mode 100644 index 0000000..679532a --- /dev/null +++ b/content/pages/faq.md @@ -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/) + + + diff --git a/content/pages/howto_mailinglist.md b/content/pages/howto_mailinglist.md new file mode 100644 index 0000000..4468f16 --- /dev/null +++ b/content/pages/howto_mailinglist.md @@ -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_ diff --git a/content/pages/index.md b/content/pages/index.md new file mode 100644 index 0000000..e782763 --- /dev/null +++ b/content/pages/index.md @@ -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._ + + diff --git a/content/pages/manifesto.md b/content/pages/manifesto.md new file mode 100644 index 0000000..5e75aa6 --- /dev/null +++ b/content/pages/manifesto.md @@ -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 + +=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= diff --git a/content/pages/nolike.md b/content/pages/nolike.md new file mode 100644 index 0000000..09a6a31 --- /dev/null +++ b/content/pages/nolike.md @@ -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_ + diff --git a/content/pages/pmomp.md b/content/pages/pmomp.md new file mode 100644 index 0000000..3d7c6e1 --- /dev/null +++ b/content/pages/pmomp.md @@ -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/) diff --git a/pelicanconf.py b/pelicanconf.py new file mode 100644 index 0000000..f66f877 --- /dev/null +++ b/pelicanconf.py @@ -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'),) diff --git a/publishconf.py b/publishconf.py new file mode 100644 index 0000000..551f15b --- /dev/null +++ b/publishconf.py @@ -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 = "" diff --git a/tasks.py b/tasks.py new file mode 100644 index 0000000..bf83bdc --- /dev/null +++ b/tasks.py @@ -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)) + diff --git a/themes/minimo/static/css/style.css b/themes/minimo/static/css/style.css new file mode 100644 index 0000000..8bcc524 --- /dev/null +++ b/themes/minimo/static/css/style.css @@ -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; +} diff --git a/themes/minimo/templates/archives.html b/themes/minimo/templates/archives.html new file mode 100644 index 0000000..7b9b10d --- /dev/null +++ b/themes/minimo/templates/archives.html @@ -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 %} +
+
+

{% block content_title %}Archivio per data{% endblock %}

+ + {% for article in dates %} + {% set this_year = article.date.strftime('%Y') %} + + {% if this_year != prev_year %} +
+
{{ this_year }}
+
+ {% endif %} + {% if this_year != prev_year or this_month != prev_month %} +
+
{{ this_month }}
+
+ {% endif %} +
+ {% if this_month != prev_month or this_day != prev_day %} +
+ {{ this_day }} +
+ {% endif %} +
+
{{ article.title }} {{ article.category }}
+
+
+ {% set prev_year = this_year %} + {% set prev_month = this_month %} + {% set prev_day = this_day %} + {% endfor %} +
+
+{% endblock %} + diff --git a/themes/minimo/templates/article.html b/themes/minimo/templates/article.html new file mode 100644 index 0000000..2055670 --- /dev/null +++ b/themes/minimo/templates/article.html @@ -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 %} + +
+
+
+
+

+ {{ article.title}}

+
+ +
+ {% include 'article_infos.html' %} + {{ article.content }} +
+ +
+
+
+{% endblock %} diff --git a/themes/minimo/templates/article_infos.html b/themes/minimo/templates/article_infos.html new file mode 100644 index 0000000..72d253b --- /dev/null +++ b/themes/minimo/templates/article_infos.html @@ -0,0 +1,25 @@ + diff --git a/themes/minimo/templates/author.html b/themes/minimo/templates/author.html new file mode 100644 index 0000000..e5db843 --- /dev/null +++ b/themes/minimo/templates/author.html @@ -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%} diff --git a/themes/minimo/templates/base.html b/themes/minimo/templates/base.html new file mode 100644 index 0000000..83a5e4c --- /dev/null +++ b/themes/minimo/templates/base.html @@ -0,0 +1,72 @@ + + + + {% block head %} + {% block title %}{{ SITENAME }}{% endblock title %} + + + {% if FEED_ALL_ATOM %} + + {% endif %} + {% if FEED_ALL_RSS %} + + {% endif %} + {% if FEED_ATOM %} + + {% endif %} + {% if FEED_RSS %} + + {% endif %} + {% if CATEGORY_FEED_ATOM and category %} + + {% endif %} + {% if CATEGORY_FEED_RSS and category %} + + {% endif %} + {% if TAG_FEED_ATOM and tag %} + + {% endif %} + {% if TAG_FEED_RSS and tag %} + + {% endif %} + {% endblock head %} + + + + + + {% block content %} + {% endblock %} + + + + + diff --git a/themes/minimo/templates/categories.html b/themes/minimo/templates/categories.html new file mode 100644 index 0000000..2ec2f33 --- /dev/null +++ b/themes/minimo/templates/categories.html @@ -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 %} +
+
+

{% block content_title %}Categorie {% endblock %}

+ +
+ {% for category, articles in categories %} +
{{ category }} ({{ articles|count }})
+ {% endfor %} +
+
+
+{% endblock %} diff --git a/themes/minimo/templates/category.html b/themes/minimo/templates/category.html new file mode 100644 index 0000000..d38824e --- /dev/null +++ b/themes/minimo/templates/category.html @@ -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%} diff --git a/themes/minimo/templates/index.html b/themes/minimo/templates/index.html new file mode 100644 index 0000000..d325ad1 --- /dev/null +++ b/themes/minimo/templates/index.html @@ -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 %} +
+ {% if articles %} + {% for article in articles_page.object_list %} + {% if loop.length > 0 %} + {% if loop.first %} +
+
    + {% endif %} + + {% if loop.last %} +
+ {% if loop.last and (articles_page.has_previous() + or not articles_page.has_previous() and loop.length > 1) %} + {% include 'pagination.html' %} + {% endif %} +
+ {% endif %} + {% endif %} + {% endfor %} + {% else %} +
+

Pages

+ {% for page in PAGES %} +
  • {{ page.title }}
  • + {% endfor %} +
    + {% endif %} +
    +{% endblock content %} + +{% if LINKS %} +
    +

    Links

    + +
    +{% endif %} +{% if TAG_CLOUD_STEPS %} +
    +

    Tags

    + +
    +{% endif %} + diff --git a/themes/minimo/templates/page.html b/themes/minimo/templates/page.html new file mode 100644 index 0000000..6ff8139 --- /dev/null +++ b/themes/minimo/templates/page.html @@ -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 %} +
    +

    {{ page.title }}

    + {% import 'translations.html' as translations with context %} + {{ translations.translations_for(page) }} + {{ page.content }} +
    +{% endblock %} + diff --git a/themes/minimo/templates/tag.html b/themes/minimo/templates/tag.html new file mode 100644 index 0000000..293c64e --- /dev/null +++ b/themes/minimo/templates/tag.html @@ -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%} diff --git a/themes/minimo/templates/tags.html b/themes/minimo/templates/tags.html new file mode 100644 index 0000000..b81ff60 --- /dev/null +++ b/themes/minimo/templates/tags.html @@ -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 %} +
    +
    +

    {% block content_title %}Tags{% endblock %}

    + +
    + {% for tag, articles in tags|sort %} +
    {{ tag }} ({{ articles|count }})
    + {% endfor %} +
    +
    +
    +{% endblock %} diff --git a/themes/minimo/templates/translations.html b/themes/minimo/templates/translations.html new file mode 100644 index 0000000..75ed375 --- /dev/null +++ b/themes/minimo/templates/translations.html @@ -0,0 +1,10 @@ +{% macro translations_for(article) %} +{% if article.translations %} +
    +Translations: + {% for translation in article.translations %} + {{ translation.lang }} + {% endfor %} +{% endif %} +{% endmacro %} +