mirror of
https://github.com/almet/notmyidea.git
synced 2025-04-28 11:32:39 +02:00
Update of the blog!
This commit is contained in:
parent
9f9e98c887
commit
592f4d8c76
63 changed files with 839 additions and 65 deletions
2
Makefile
2
Makefile
|
@ -7,7 +7,7 @@ CONFFILE=$(BASEDIR)/pelicanconf.py
|
||||||
PUBLISHCONF=$(BASEDIR)/publishconf.py
|
PUBLISHCONF=$(BASEDIR)/publishconf.py
|
||||||
|
|
||||||
VENV := $(shell echo $${VIRTUAL_ENV-$(shell pwd)/.venv})
|
VENV := $(shell echo $${VIRTUAL_ENV-$(shell pwd)/.venv})
|
||||||
VIRTUALENV = virtualenv -p /usr/bin/python3.7
|
VIRTUALENV = python3 -m venv
|
||||||
INSTALL_STAMP = $(VENV)/.install.stamp
|
INSTALL_STAMP = $(VENV)/.install.stamp
|
||||||
|
|
||||||
PYTHON=$(VENV)/bin/python
|
PYTHON=$(VENV)/bin/python
|
||||||
|
|
79
content/Journal/2020-03-01-artfevre.md
Normal file
79
content/Journal/2020-03-01-artfevre.md
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
---
|
||||||
|
title: Artfevre 2020 - Défi artistique en février
|
||||||
|
---
|
||||||
|
|
||||||
|
En Février, il y a 29 Jours, et avec un ami on s'est dit qu'on aimerait bien utiliser chacun d'entre eux pour créer — de manière intensive et sans jugement — hors de notre zone de confort, et avec des contraintes imposées.
|
||||||
|
|
||||||
|
L'idée, c'est qu'à la fin du mois, chacun⋅e puisse se retourner (c'est une image hein) et se dire : « Ouah, j’ai fait tout ça !? »
|
||||||
|
|
||||||
|
C’est donc une une liste de 29 thèmes (un par jour du mois) : chaque jour, on doit faire quelque chose d’artistique à partir du thème proposé.
|
||||||
|
|
||||||
|
## Quelques retours
|
||||||
|
|
||||||
|
Je n'ai pas réussi à faire des créations pour les 29 thèmes, mais dans l'ensemble je suis très content de ce que j'ai pu créer : j'ai pu expérimenter des choses que je n'avais pas imaginées. J'ai pu faire :
|
||||||
|
|
||||||
|
- Du montage vidéo ;
|
||||||
|
- De la musique acoustique ;
|
||||||
|
- De la musique électronique ;
|
||||||
|
- Du montage audio ;
|
||||||
|
- De l'écriture de nouvelles ;
|
||||||
|
- Une comptine ;
|
||||||
|
- De la photo ;
|
||||||
|
- Du montage photo ;
|
||||||
|
- De l'Art Plastique ;
|
||||||
|
|
||||||
|
C'était très sympa de voir les créations des unes et des uns arriver sur notre espace de partage de fichiers, certaines créations étaient vraiment géniales ! Et j'ai même carrément hâte de remettre ça l'an prochain :-)
|
||||||
|
|
||||||
|
## Un peu plus d'infos
|
||||||
|
|
||||||
|
Voici des infos qu'on a envoyé aux participant⋅e⋅s, et que je consigne ici question de l'avoir quelque part
|
||||||
|
|
||||||
|
Voici une liste d'idées de « trucs » à faire chaque jour : Faire un dessin, Composer (et enregistrer ?) une musique, Filmer quelque chose, Inventer une chorégraphie, Écrire un texte, Inventer une origami, Se faire un tatouage (en fonction du thème, pas conseillé), Inventer un exercice de théâtre, Créer un jeu, Faire une sculpture d’argile, Créer une position de Yoga, Prendre une photo, inventer une recette de cuisine, Écrire un slam, etc, etc.
|
||||||
|
|
||||||
|
Vous pouvez décider de ne choisir qu’une forme artistique (par exemple que la musique) pour vous forcer à explorer un médium en dehors de votre zone de confort (« je sais faire une musique rapidement, mais sais-je faire 29 fois une musique différente rapidement ? »), ou alors changer d’expression artistique tous les jours. Voyez ce qui vous amuse / anime le plus !
|
||||||
|
|
||||||
|
On aimerait mettre en commun nos productions quelque part, pour voir comment les gens différents se sont approprié un même thème ! Bien sur c'est tout à fait optionnel : libre à vous de participer sans publier vos créations.
|
||||||
|
|
||||||
|
Ça vous botte ? Envoyez nous un petit mail a artfevre@notmyidea.org et on vous tient au courant !
|
||||||
|
Techniquement ?
|
||||||
|
|
||||||
|
Si vous voulez poster vos créations, on vous propose de le faire sur un espace en ligne. Plusieurs choses sur ce « cloud » :
|
||||||
|
|
||||||
|
- On a préparé un dossier par jour, postez votre / vos création(s) dans le dossier qui va bien. Il y a également un dossier « Les thèmes & ressources » qui contient les photos, vidéos et musiques qui serviront de contraintes certains jours, ainsi qu'un rappel des thèmes ;
|
||||||
|
|
||||||
|
- On a aucun moyen de savoir qui poste quoi, si vous voulez être crédités, mettez votre pseudo / nom dans le nom du fichier (ex. « Sam-3-fevrier.jpg » ou « AlexCompo7Fevrier.mp3 »). Si vous préférez l'ombre à la lumière, vous pouvez laisser un titre poétique comme «W33.jpg » ;
|
||||||
|
|
||||||
|
- Ne repostez pas les contenus d'autres participant⋅es (d'aucun diraient « d'autrui ») sans leur accord ;
|
||||||
|
|
||||||
|
Pour avoir l'adresse du cloud magique, envoyez nous un mail à artfevre@notmyidea.org.
|
||||||
|
|
||||||
|
## Invitations
|
||||||
|
|
||||||
|
Le défi commence le samedi 1er Février, mais il est possible de nous rejoindre en route : si vous voulez en parler à des ami⋅e⋅s, n'hésitez pas !
|
||||||
|
|
||||||
|
Donnez leur l'adresse du site web : https://artfevre.notmyidea.org
|
||||||
|
|
||||||
|
## Rappels
|
||||||
|
|
||||||
|
Pas de pression : Amusons-nous, l'idée est de passer de bons moments
|
||||||
|
|
||||||
|
- Je ne veux faire qu'une seule semaine ? Pas de soucis !
|
||||||
|
- J'ai pas envie de poser mes publications en public… No problem !
|
||||||
|
- J'ai loupé trois jours, c'est la merde ! Hakuna Matata !
|
||||||
|
- J'ai envie de faire un thème à plusieurs ! No problemo !
|
||||||
|
|
||||||
|
Personne d'autre que vous ne juge ce que vous faites ! Et… à propos de ça, même vous d'ailleurs n'y êtes pas obligés.
|
||||||
|
|
||||||
|
## Des questions ? Des réponses !
|
||||||
|
|
||||||
|
### J’ai envie de le faire, mais je suis trop perfectionniste pour finir un truc par jour !
|
||||||
|
|
||||||
|
C’est tout le sens du projet ! Si je dois finir cette chanson/ce dessin/ce texte aujourd’hui, ça ne sera peut-être pas le meilleur des dessins, mais au moins il aura le mérite d’exister. Dans mon expérience personnelle, si j’attends d’avoir produit le meilleur objet, je finis par ne rien finir, car rien n’est parfait. Là, au moins, l’objet existe, et si vous le souhaitez, il peut servir de base plus tard à un re-travail pour viser quelque chose de plus « fignolé ».
|
||||||
|
|
||||||
|
### Mais si je rate un jour, si j’ai pas le temps ?
|
||||||
|
|
||||||
|
Chacun⋅e fait comme iel veut/peut et s’astreint la discipline qu’iel a envie de tester ! Personne ne viendra surveiller ou juger le travail des autres. Si vous prenez 2 jours par thème et que vous continuez le truc jusqu’à fin mars pour finir, pas de soucis !
|
||||||
|
|
||||||
|
### J’ai peur de pas avoir l’inspiration !
|
||||||
|
|
||||||
|
Pour nous, attendre l’inspiration est un prétexte qu'on se donne pour repousser le moment de se mettre au travail. L’inspiration, ça se provoque, ça ne s’attend pas. Et puis peut-être que je trouverai nulle ma création du jour, mais au moins j’aurai fait quelque chose. 1 vaut mieux que 0. Et de ce truc que moi je trouve nul (c’est pas pour ça que c’est nul, à vrai dire), peut-être que j'en tirerai une note que j’aime bien, une formulation qui me plaît, un mouvement que j’adore, et que je ré-utiliserai après dans une autre création. Ou alors, peut-être que je ne retirerai que la satisfaction de l’avoir fait, et c’est déjà pas mal !
|
|
@ -1,8 +1,6 @@
|
||||||
title: Antisexisme ou antiracisme ? Un faux dilemme
|
title: Antisexisme ou antiracisme ? Un faux dilemme
|
||||||
author: Christine Delphy
|
author: Christine Delphy
|
||||||
tags: sexisme
|
tags: sexisme, voile, racisme
|
||||||
voile
|
|
||||||
racisme
|
|
||||||
link: https://www.cairn.info/revue-nouvelles-questions-feministes-2006-1-page-59.htm
|
link: https://www.cairn.info/revue-nouvelles-questions-feministes-2006-1-page-59.htm
|
||||||
read_on: Septembre 2019
|
read_on: Septembre 2019
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
title: Comment la non-violence protège l'état
|
title: Comment la non-violence protège l'état
|
||||||
headline: Essai sur l'inefficacité des mouvements sociaux
|
headline: Essai sur l'inefficacité des mouvements sociaux
|
||||||
author: Peter Gelderloos
|
author: Peter Gelderloos
|
||||||
tags: non-violence
|
tags: non-violence, anarchisme
|
||||||
critique
|
|
||||||
isbn: 978-2-9556782-4-4
|
isbn: 978-2-9556782-4-4
|
||||||
image: https://www.editionslibre.org/wp-content/uploads/2018/02/siteinternet4.png
|
image: https://www.editionslibre.org/wp-content/uploads/2018/02/siteinternet4.png
|
||||||
read_on: Juin 2019
|
read_on: Juin 2019
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
title: Hommes Anarchistes face au féminisme
|
title: Hommes Anarchistes face au féminisme
|
||||||
author: Françis Dupuis-Déri
|
author: Françis Dupuis-Déri
|
||||||
tags: féminisme
|
tags: féminisme, anarchisme
|
||||||
anarchisme
|
|
||||||
headline: Pistes de réflexion au sujet de la politique, de l'amour et de la sexualité
|
headline: Pistes de réflexion au sujet de la politique, de l'amour et de la sexualité
|
||||||
read_on: Septembre 2019
|
read_on: Septembre 2019
|
||||||
link: https://refractions.plusloin.org/IMG/pdf/2412_1_.pdf
|
link: https://refractions.plusloin.org/IMG/pdf/2412_1_.pdf
|
||||||
|
|
|
@ -18,7 +18,7 @@ read_on: Janvier 2020
|
||||||
|
|
||||||
## Penser ensemble l'émancipation
|
## Penser ensemble l'émancipation
|
||||||
|
|
||||||
> L'objectif de changer le sort de toutes les femmes semble s'être perdu en route quand le féminisme n'est plus décrit par certaines camarades que comme un outil pour être « à l'aise avec [s]on identité de genre ». Ainsi une oppression ne serait problématique que parce qu'elle crée du malaise, pas quand elle est si bien intégrée qu'elle en paraît naturelle. Ce féminisme ne s'adresse plus à toutes les femmes mais à celles qui sauront s'en saisir dans leur parcours de vie. Le mouvement qui donnait une importance nouvelle au personnel pour changer le politique laisse apparaître parfois de manière marginale, parfois de manière plus prégnante, une entreprise émancipatrice individuelle ou à la dimension collective réduite, attentive aux parcours et identités des personnes qui l'investissent.
|
> L'objectif de changer le sort de toutes les femmes semble s'être perdu en route quand le féminisme n'est plus décrit par certaines camarades que comme un outil pour être « à l'aise avec son identité de genre ». Ainsi une oppression ne serait problématique que parce qu'elle crée du malaise, pas quand elle est si bien intégrée qu'elle en paraît naturelle. Ce féminisme ne s'adresse plus à toutes les femmes mais à celles qui sauront s'en saisir dans leur parcours de vie. Le mouvement qui donnait une importance nouvelle au personnel pour changer le politique laisse apparaître parfois de manière marginale, parfois de manière plus prégnante, une entreprise émancipatrice individuelle ou à la dimension collective réduite, attentive aux parcours et identités des personnes qui l'investissent.
|
||||||
|
|
||||||
> Au lieu de lutter de front contre les assignations de genre, de tenter de les neutraliser — au moins le temps de l'enfance, comme le proposent les féministes pour les écoles suédoises — on va plutôt chercher à les adapter aux besoins individuels et à rendre confortable l'habitude (finalement plus problématique du tout !) de s'adresser à chacun⋅e en fonction de son identité de genre, pourvu qu'elle coïncide avec ses souhaits.
|
> Au lieu de lutter de front contre les assignations de genre, de tenter de les neutraliser — au moins le temps de l'enfance, comme le proposent les féministes pour les écoles suédoises — on va plutôt chercher à les adapter aux besoins individuels et à rendre confortable l'habitude (finalement plus problématique du tout !) de s'adresser à chacun⋅e en fonction de son identité de genre, pourvu qu'elle coïncide avec ses souhaits.
|
||||||
|
|
||||||
|
|
|
@ -1,10 +0,0 @@
|
||||||
title: Le « mouvement » est mort, Vive… la réforme !
|
|
||||||
headline: Une critique de la « composition » et de ses élites
|
|
||||||
author: Un groupuscule Insignifiant
|
|
||||||
tags: zad
|
|
||||||
anarchisme
|
|
||||||
apellisme
|
|
||||||
read_on: Décembre 2019
|
|
||||||
status: draft
|
|
||||||
|
|
||||||
>
|
|
|
@ -1,7 +1,6 @@
|
||||||
title: L'effondrement, parlons-en...
|
title: L'effondrement, parlons-en...
|
||||||
author: Jérémie Cravatte
|
author: Jérémie Cravatte
|
||||||
tags: écologie
|
tags: écologie, collapsologie
|
||||||
collapsologie
|
|
||||||
headline: Les limites de la "collapsologie".
|
headline: Les limites de la "collapsologie".
|
||||||
read_on: Octobre 2019
|
read_on: Octobre 2019
|
||||||
link: http://www.barricade.be/publications/analyses-etudes/effondrement-parlons-limites-collapsologie
|
link: http://www.barricade.be/publications/analyses-etudes/effondrement-parlons-limites-collapsologie
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
title: Refuser d'être un homme
|
title: Refuser d'être un homme
|
||||||
author: John Stolenberg
|
author: John Stolenberg
|
||||||
tags: féminisme
|
tags: féminisme, masculinisme
|
||||||
masculinisme
|
|
||||||
headline: Pour en finir avec la virilité
|
headline: Pour en finir avec la virilité
|
||||||
read_on: Octobre 2019
|
read_on: Octobre 2019
|
||||||
image: https://www.syllepse.net/syllepse_images/produits/refuser_d_etre_un_homme.jpg
|
image: https://www.syllepse.net/syllepse_images/produits/refuser_d_etre_un_homme.jpg
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
title: Rupture anarchiste et trahison pro-féministe
|
title: Rupture anarchiste et trahison pro-féministe
|
||||||
author: Léo Thiers-Vidal
|
author: Léo Thiers-Vidal
|
||||||
tags: féminisme
|
tags: féminisme, anarchisme, masculinismes
|
||||||
anarchisme
|
|
||||||
masculinismes
|
|
||||||
isbn: 978-2954323701
|
isbn: 978-2954323701
|
||||||
headline: Écrits et échanges de Léo Thiers-Vidal.
|
headline: Écrits et échanges de Léo Thiers-Vidal.
|
||||||
read_on: Août 2019
|
read_on: Août 2019
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
title: Égologie
|
title: Égologie
|
||||||
headline: Écologie, individualisme et course au bonheur
|
headline: Écologie, individualisme et course au bonheur
|
||||||
author: Aude Vidal
|
author: Aude Vidal
|
||||||
tags: écologie
|
tags: écologie, développement-personnel
|
||||||
développement-personnel
|
|
||||||
isbn: 979-10-91772-19-8
|
isbn: 979-10-91772-19-8
|
||||||
image: https://products-images.di-static.com/image/aude-vidal-egologie/9791091772198-475x500-1.jpg
|
image: https://products-images.di-static.com/image/aude-vidal-egologie/9791091772198-475x500-1.jpg
|
||||||
read_on: Septembre 2019
|
read_on: Septembre 2019
|
||||||
|
|
|
@ -40,7 +40,7 @@ Ce second graphique montre les personnes qui se considèrent en recherche d'empl
|
||||||
|
|
||||||
## Budget de l'assurance chômage
|
## Budget de l'assurance chômage
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Financement de l'assurance chômage
|
## Financement de l'assurance chômage
|
||||||
|
|
||||||
|
|
53
content/Réfléxions/2020-03-06-forum-ouvert.md
Normal file
53
content/Réfléxions/2020-03-06-forum-ouvert.md
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
---
|
||||||
|
title: Forum ouvert, animation et posture
|
||||||
|
headline: Quelques retours et questionnements sur les postures d'animation au sein des forums ouverts
|
||||||
|
---
|
||||||
|
|
||||||
|
Début Février j'ai participé à un Forum Ouvert. Il s'agit de la troisième fois, et cette fois ci j'étais particulièrement attentif aux procédés mis en place pour sa tenue, puisque je faisais partie de l'équipe d'organisation.
|
||||||
|
|
||||||
|
## Un forum ouvert ?
|
||||||
|
|
||||||
|
Les forums ouverts sont des outils qui permettent de se retrouver avec un groupe de personnes et d'avoir des échanges. L'idée est de créer un cadre assez léger qui permette aux personnes d'échanger de manière assez horizontale.
|
||||||
|
|
||||||
|
Les 4 principes :
|
||||||
|
|
||||||
|
- les personnes présentes sont les bonnes personnes ;
|
||||||
|
- quoi qu'il arrive, c'est la seule chose qui pouvait arriver ;
|
||||||
|
- ça commence quand ça commence ;
|
||||||
|
- quand c’est fini, c’est fini.
|
||||||
|
|
||||||
|
La loi de la mobilité ou loi des deux pieds : si à un moment vous vous rendez compte que vous n'être ni en train d’apprendre, ni de contribuer, aller voir autre chose !
|
||||||
|
|
||||||
|
Retours :
|
||||||
|
|
||||||
|
- J'étais hyper surpris de voir à quel point l'outil est fonctionnel en tant que tel : les discussions auxquelles j'ai pu participer étaient souvent assez « poussées » alors même que les personnes ne se connaissaient pas d'avant le forum.
|
||||||
|
|
||||||
|
- Durant le forum ouvert, il y avait la possibilité de prendre des notes, et de les partager avec tout le monde dans un espace prévu pour ça. Je n'y croyais pas trop, mais ça à vraiment fonctionné ! On avait préparé des pads en ligne (un espace de prise de notes partagées) avant l'évènement ce qui à permis de faciliter la prise de notes ;
|
||||||
|
|
||||||
|
- Avoir un endroit pour afficher les notes prises durant les discussions est utile, et créé un sentiment de satisfaction collectif ;
|
||||||
|
|
||||||
|
- Répartition de la parole : à un moment, on propose aux participant⋅e⋅s de venir proposer des sujets, et on s'est rendu compte que c'était (comme bien trop souvent) en grande partie des hommes cis (assignés hommes à la naissance) qui prenaient la parole à ce moment là. Pour éviter que ce ne soit le cas, laisser un temps de réflexion à tou⋅te⋅s avant de prendre la parole peut être utile.
|
||||||
|
|
||||||
|
- Inclusion des personnes trans et non-binaires : Faire un tour des pronoms peut permettre aux personnes trans et non-binaires d'être plus incluses, ou en tout cas de visibiliser leur présence. On ne l'avait pas fait lors du premier jour et ça à manqué ;
|
||||||
|
|
||||||
|
- Sur un plan plus pragmatique, trouver une logistique pour faire à manger de manière collective / faire le ménage / installer les tables etc, pourrait permettre aux organisateur⋅ice⋅s de participer aux discussions.
|
||||||
|
|
||||||
|
- Lors de la phase d'organisation, il est possible de fusionner les sujets, et ça à été le cas pour au moins deux sujets proposés, ce qui à créé une situations problématique. Dans son livre qui parle des forums ouverts, Owen indique que parfois il vaut mieux ne pas fusionner les sujets, et je pense qu'on aurait sûrement du ici. Les attentes des participant⋅e⋅s ne sont pas forcement les mêmes, et ça peut créer de la frustration si les choses ne sont pas forcément bien amenées. C'est sûrement quelque chose à souligner aux participant⋅e⋅s lors du temps d'accueil.
|
||||||
|
|
||||||
|
## Animer et/ou participer ?
|
||||||
|
|
||||||
|
A titre personnel, j'ai été assez frustré par la posture un peu floue que j'avais durant le forum : je faisais partie de l'équipe d'organisation mais je ne m'occupais pas de l'animation, nourrissant l'espoir de participer aux discussions.
|
||||||
|
|
||||||
|
J'ai pu participer à certaines discussions, mais jamais (sauf une exception) pour une session entière, et j'ai trouvé ça dommage. Après une discussion avec Thomas qui à déjà animé au moins un forum ouvert, il semble possible d'« ouvrir » et de « fermer » les temps d'organisation, pour permettre aux organisateur⋅ice⋅s d'animer et de participer.
|
||||||
|
|
||||||
|
J'aime bien cette idée, parce que ça veut dire que tout le monde peut participer, et que la posture d'animation ne signifie pas un « sacrifice », mais peut-être que cette idée à aussi ses défauts : lors d'une discussion avec un⋅e des animateurs⋅rices iel m'a indiqué qu'iel préférait rester extérieur aux discussions, pour éviter les prises de pouvoir.
|
||||||
|
|
||||||
|
Autrement dit, faire l'animation du forum ouvert conférerait un pouvoir qui pourrait être néfaste lors des discussions. Je ne sais pas trop quoi penser de cette idée, mais il me semble pertinent de pousser la réflexion. Dans une posture plus « classique » de facilitation, on s'efforce de rester extérieur aux discussions, pour ne pas avoir de conflit d'intérêt.
|
||||||
|
|
||||||
|
Mais dans le cas du forum ouvert, je n'ai pas l'impression que faire l'animation confère un pouvoir sur le groupe, autre que celui d'être garant⋅e des règles du fonctionnement collectif (rappel de l'heure par exemple, rappel du cadre de bienveillance). Si vous avez des retours sur ce sujet je suis preneur !
|
||||||
|
|
||||||
|
Voire, je me demande même quel rapports cela génère de — justement — rester extérieur et de ne pas participer, alors même qu'on est présent⋅e. Dit autrement, alors que tout le monde se rencontre à travers les discussions, se met en jeu, ce n'est pas le cas des animateur⋅ice⋅s, et je me demande si ça impacte l'ambiance générale ?
|
||||||
|
|
||||||
|
En tout cas, j'aime bien l'idée qu'il soit possible d'à la fois animer les temps de forums et de participer. Dans ce cas là, existe-il des stratagèmes / artifices pour permettre de visibiliser ces prises de pouvoir pendant les discussions ?
|
||||||
|
|
||||||
|
Je suis preneur de tout retour d'expérience sur le sujet !
|
|
@ -17,7 +17,8 @@ PEP20](http://www.python.org/dev/peps/pep-0020/), qui constituent une
|
||||||
très bonne introduction au langage, qui prends la forme d'un *easter
|
très bonne introduction au langage, qui prends la forme d'un *easter
|
||||||
egg* présent dans python
|
egg* présent dans python
|
||||||
|
|
||||||
``` sourceCode bash
|
```bash
|
||||||
|
|
||||||
>>> import this
|
>>> import this
|
||||||
The Zen of Python, by Tim Peters
|
The Zen of Python, by Tim Peters
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,8 @@ If you want to find all the distributions of the "EggsAndSpam" project,
|
||||||
you could do the following (do not take so attention to the names here,
|
you could do the following (do not take so attention to the names here,
|
||||||
as the API will probably change a bit):
|
as the API will probably change a bit):
|
||||||
|
|
||||||
``` sourceCode python
|
```python
|
||||||
|
|
||||||
>>> index = SimpleIndex()
|
>>> index = SimpleIndex()
|
||||||
>>> index.find("EggsAndSpam")
|
>>> index.find("EggsAndSpam")
|
||||||
[EggsAndSpam 1.1, EggsAndSpam 1.2, EggsAndSpam 1.3]
|
[EggsAndSpam 1.1, EggsAndSpam 1.2, EggsAndSpam 1.3]
|
||||||
|
@ -79,7 +80,8 @@ as the API will probably change a bit):
|
||||||
|
|
||||||
We also could use version specifiers:
|
We also could use version specifiers:
|
||||||
|
|
||||||
``` sourceCode python
|
```python
|
||||||
|
|
||||||
>>> index.find("EggsAndSpam (< =1.2)")
|
>>> index.find("EggsAndSpam (< =1.2)")
|
||||||
[EggsAndSpam 1.1, EggsAndSpam 1.2]
|
[EggsAndSpam 1.1, EggsAndSpam 1.2]
|
||||||
```
|
```
|
||||||
|
|
|
@ -25,7 +25,7 @@ You can find a repository to fork at
|
||||||
If you just want to get started, use your installer of choice (pip,
|
If you just want to get started, use your installer of choice (pip,
|
||||||
easy\_install, …) And then have a look to the help (pelican --help)
|
easy\_install, …) And then have a look to the help (pelican --help)
|
||||||
|
|
||||||
``` sourceCode bash
|
```
|
||||||
$ pip install pelican
|
$ pip install pelican
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ $ pip install pelican
|
||||||
|
|
||||||
Here's a sample usage of pelican
|
Here's a sample usage of pelican
|
||||||
|
|
||||||
``` sourceCode bash
|
``` bash
|
||||||
$ pelican .
|
$ pelican .
|
||||||
writing /home/alexis/projets/notmyidea.org/output/index.html
|
writing /home/alexis/projets/notmyidea.org/output/index.html
|
||||||
writing /home/alexis/projets/notmyidea.org/output/tags.html
|
writing /home/alexis/projets/notmyidea.org/output/tags.html
|
||||||
|
@ -48,7 +48,8 @@ Done !
|
||||||
You also can use the --help option for the command line to get more
|
You also can use the --help option for the command line to get more
|
||||||
informations
|
informations
|
||||||
|
|
||||||
``` sourceCode bash
|
```bash
|
||||||
|
|
||||||
$pelican --help
|
$pelican --help
|
||||||
usage: pelican [-h] [-t TEMPLATES] [-o OUTPUT] [-m MARKUP] [-s SETTINGS] [-b]
|
usage: pelican [-h] [-t TEMPLATES] [-o OUTPUT] [-m MARKUP] [-s SETTINGS] [-b]
|
||||||
path
|
path
|
||||||
|
|
|
@ -12,20 +12,23 @@ Some time ago, I've made a little python script to ease that, and you
|
||||||
can now use it too. It's named "gnome-background-generator", and you can
|
can now use it too. It's named "gnome-background-generator", and you can
|
||||||
install it via pip for instance.
|
install it via pip for instance.
|
||||||
|
|
||||||
``` sourceCode shell
|
```
|
||||||
|
shell
|
||||||
$ pip install gnome-background-generator
|
$ pip install gnome-background-generator
|
||||||
```
|
```
|
||||||
|
|
||||||
Then, you have just to use it this way:
|
Then, you have just to use it this way:
|
||||||
|
|
||||||
``` sourceCode shell
|
```
|
||||||
|
shell
|
||||||
$ gnome-background-generator -p ~/Images/walls -s
|
$ gnome-background-generator -p ~/Images/walls -s
|
||||||
/home/alexis/Images/walls/dynamic-wallpaper.xml generated
|
/home/alexis/Images/walls/dynamic-wallpaper.xml generated
|
||||||
```
|
```
|
||||||
|
|
||||||
Here is a extract of the \`--help\`:
|
Here is a extract of the \`--help\`:
|
||||||
|
|
||||||
``` sourceCode shell
|
```
|
||||||
|
shell
|
||||||
$ gnome-background-generator --help
|
$ gnome-background-generator --help
|
||||||
usage: gnome-background-generator [-h] [-p PATH] [-o OUTPUT]
|
usage: gnome-background-generator [-h] [-p PATH] [-o OUTPUT]
|
||||||
[-t TRANSITION_TIME] [-d DISPLAY_TIME] [-s]
|
[-t TRANSITION_TIME] [-d DISPLAY_TIME] [-s]
|
||||||
|
|
|
@ -11,7 +11,8 @@ After a bit of reflexion, that's also really easy to do using directly
|
||||||
the command line tools curl, grep and tail (but really harder to
|
the command line tools curl, grep and tail (but really harder to
|
||||||
read).
|
read).
|
||||||
|
|
||||||
``` sourceCode bash
|
```bash
|
||||||
|
|
||||||
curl -X POST -u joel:joel http://bebox.config/cgi/b/info/restart/\?be\=0\&l0\=1\&l1\=0\&tid\=RESTART -d "0=17&2=`curl -u joel:joel http://bebox.config/cgi/b/info/restart/\?be\=0\&l0\=1\&l1\=0\&tid\=RESTART | grep -o "name='2' value='[0-9]\+" | grep -o "[0-9]\+" | tail -n 1`&1"
|
curl -X POST -u joel:joel http://bebox.config/cgi/b/info/restart/\?be\=0\&l0\=1\&l1\=0\&tid\=RESTART -d "0=17&2=`curl -u joel:joel http://bebox.config/cgi/b/info/restart/\?be\=0\&l0\=1\&l1\=0\&tid\=RESTART | grep -o "name='2' value='[0-9]\+" | grep -o "[0-9]\+" | tail -n 1`&1"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -20,7 +21,8 @@ curl -X POST -u joel:joel http://bebox.config/cgi/b/info/restart/\?be\=0\&l0\=1\
|
||||||
Well, that's not the optimal solution, that's a bit "gruik", but it
|
Well, that's not the optimal solution, that's a bit "gruik", but it
|
||||||
works.
|
works.
|
||||||
|
|
||||||
``` sourceCode python
|
```python
|
||||||
|
|
||||||
import urllib2
|
import urllib2
|
||||||
import urlparse
|
import urlparse
|
||||||
import re
|
import re
|
||||||
|
|
|
@ -16,7 +16,8 @@ wheel, so it is easily pluggable with validations frameworks, such as
|
||||||
|
|
||||||
Here is how it works:
|
Here is how it works:
|
||||||
|
|
||||||
``` sourceCode python
|
```python
|
||||||
|
|
||||||
service = Service(name="service", path="/service")
|
service = Service(name="service", path="/service")
|
||||||
|
|
||||||
|
|
||||||
|
@ -72,7 +73,8 @@ to the requests.
|
||||||
For instance, in our validator, we can chose to validate the parameter
|
For instance, in our validator, we can chose to validate the parameter
|
||||||
passed and use it in the body of the webservice:
|
passed and use it in the body of the webservice:
|
||||||
|
|
||||||
``` sourceCode python
|
```python
|
||||||
|
|
||||||
service = Service(name="service", path="/service")
|
service = Service(name="service", path="/service")
|
||||||
|
|
||||||
|
|
||||||
|
@ -109,7 +111,8 @@ Let's refine a bit our previous example, by specifying which
|
||||||
content-types are supported, using the accept
|
content-types are supported, using the accept
|
||||||
parameter:
|
parameter:
|
||||||
|
|
||||||
``` sourceCode python
|
```python
|
||||||
|
|
||||||
@service.get(validator=is_awesome, accept=("application/json", "text/json"))
|
@service.get(validator=is_awesome, accept=("application/json", "text/json"))
|
||||||
def get1(request):
|
def get1(request):
|
||||||
return {"test": "yay!"}
|
return {"test": "yay!"}
|
||||||
|
@ -135,7 +138,8 @@ writing documentation for web services can be painful, especially when
|
||||||
your services evolve. Cornice provides a sphinx directive to
|
your services evolve. Cornice provides a sphinx directive to
|
||||||
automatically document your API in your docs.
|
automatically document your API in your docs.
|
||||||
|
|
||||||
``` sourceCode rst
|
```
|
||||||
|
rst
|
||||||
.. services::
|
.. services::
|
||||||
:package: coolapp
|
:package: coolapp
|
||||||
:service: quote
|
:service: quote
|
||||||
|
|
|
@ -17,7 +17,8 @@ without the need from the developer to deal with them nor to know them.
|
||||||
If you're not familiar with Cornice, here is how you define a simple
|
If you're not familiar with Cornice, here is how you define a simple
|
||||||
service with it:
|
service with it:
|
||||||
|
|
||||||
``` sourceCode python
|
```python
|
||||||
|
|
||||||
from cornice.service import Service
|
from cornice.service import Service
|
||||||
bar = Service(path="/bar")
|
bar = Service(path="/bar")
|
||||||
|
|
||||||
|
@ -40,7 +41,8 @@ this was via an extensive use of decorators internally.
|
||||||
The API of the cornice.service.Service class was as following
|
The API of the cornice.service.Service class was as following
|
||||||
(simplified so you can get the gist of it).
|
(simplified so you can get the gist of it).
|
||||||
|
|
||||||
``` sourceCode python
|
```python
|
||||||
|
|
||||||
class Service(object):
|
class Service(object):
|
||||||
|
|
||||||
def __init__(self, **service_kwargs):
|
def __init__(self, **service_kwargs):
|
||||||
|
@ -110,7 +112,8 @@ touching the API that much.
|
||||||
|
|
||||||
Here is the gist of the new architecture:
|
Here is the gist of the new architecture:
|
||||||
|
|
||||||
``` sourceCode python
|
```python
|
||||||
|
|
||||||
class Service(object):
|
class Service(object):
|
||||||
# we define class-level variables that will be the default values for
|
# we define class-level variables that will be the default values for
|
||||||
# this service. This makes things more extensible than it was before.
|
# this service. This makes things more extensible than it was before.
|
||||||
|
@ -170,7 +173,8 @@ and nothing more. No more route registration logic goes here. Instead, I
|
||||||
added this as another feature, even in a different module. The function
|
added this as another feature, even in a different module. The function
|
||||||
is named register\_service\_views and has the following signature:
|
is named register\_service\_views and has the following signature:
|
||||||
|
|
||||||
``` sourceCode python
|
```python
|
||||||
|
|
||||||
register_service_views(config, service)
|
register_service_views(config, service)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,8 @@ consume any REST API with a SPORE endpoint.
|
||||||
|
|
||||||
Here is how you can let cornice describe your web service for you
|
Here is how you can let cornice describe your web service for you
|
||||||
|
|
||||||
``` sourceCode python
|
```python
|
||||||
|
|
||||||
from cornice.ext.spore import generate_spore_description
|
from cornice.ext.spore import generate_spore_description
|
||||||
from cornice.service import Service, get_services
|
from cornice.service import Service, get_services
|
||||||
|
|
||||||
|
@ -101,7 +102,8 @@ You can [find the project on
|
||||||
github](http://github.com/spiral-project/respire), but here is how to
|
github](http://github.com/spiral-project/respire), but here is how to
|
||||||
use it, really quickly (these examples are how to interact with daybed)
|
use it, really quickly (these examples are how to interact with daybed)
|
||||||
|
|
||||||
``` sourceCode python
|
```python
|
||||||
|
|
||||||
>>> from respire import client_from_url
|
>>> from respire import client_from_url
|
||||||
|
|
||||||
>>> # create the client from the SPORE definition
|
>>> # create the client from the SPORE definition
|
||||||
|
|
|
@ -137,7 +137,8 @@ CORS support as well.
|
||||||
|
|
||||||
In Cornice, you define a service like this:
|
In Cornice, you define a service like this:
|
||||||
|
|
||||||
``` sourceCode python
|
```python
|
||||||
|
|
||||||
from cornice import Service
|
from cornice import Service
|
||||||
|
|
||||||
foobar = Service(name="foobar", path="/foobar")
|
foobar = Service(name="foobar", path="/foobar")
|
||||||
|
@ -151,7 +152,8 @@ def get_foobar(request):
|
||||||
To add CORS support to this resource, you can go this way, with the
|
To add CORS support to this resource, you can go this way, with the
|
||||||
cors\_origins parameter:
|
cors\_origins parameter:
|
||||||
|
|
||||||
``` sourceCode python
|
```python
|
||||||
|
|
||||||
foobar = Service(name='foobar', path='/foobar', cors_origins=('*',))
|
foobar = Service(name='foobar', path='/foobar', cors_origins=('*',))
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -166,7 +168,8 @@ need to stick with \*, which means "authorize everyone".
|
||||||
|
|
||||||
You can define the headers you want to expose for the service:
|
You can define the headers you want to expose for the service:
|
||||||
|
|
||||||
``` sourceCode python
|
```python
|
||||||
|
|
||||||
foobar = Service(name='foobar', path='/foobar', cors_origins=('*',))
|
foobar = Service(name='foobar', path='/foobar', cors_origins=('*',))
|
||||||
|
|
||||||
@foobar.get(cors_headers=('X-My-Header', 'Content-Type'))
|
@foobar.get(cors_headers=('X-My-Header', 'Content-Type'))
|
||||||
|
@ -212,7 +215,8 @@ the time.
|
||||||
I introduced another way to pass the CORS policy, so you can do
|
I introduced another way to pass the CORS policy, so you can do
|
||||||
something like that:
|
something like that:
|
||||||
|
|
||||||
``` sourceCode python
|
```python
|
||||||
|
|
||||||
policy = dict(enabled=False,
|
policy = dict(enabled=False,
|
||||||
headers=('X-My-Header', 'Content-Type'),
|
headers=('X-My-Header', 'Content-Type'),
|
||||||
origins=('*.notmyidea.org'),
|
origins=('*.notmyidea.org'),
|
||||||
|
|
|
@ -80,7 +80,8 @@ into two parts, the first 32 hex caracters are the hawk id, and the next
|
||||||
|
|
||||||
Credentials:
|
Credentials:
|
||||||
|
|
||||||
``` sourceCode javascript
|
```
|
||||||
|
javascript
|
||||||
credentials = {
|
credentials = {
|
||||||
'id': keyMaterial[0:32],
|
'id': keyMaterial[0:32],
|
||||||
'key': keyMaterial[32:64],
|
'key': keyMaterial[32:64],
|
||||||
|
@ -109,7 +110,8 @@ Doing hawk requests in your terminal is now as simple as:
|
||||||
In addition, it will help you to craft requests using the requests
|
In addition, it will help you to craft requests using the requests
|
||||||
library:
|
library:
|
||||||
|
|
||||||
``` sourceCode python
|
```python
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
from requests_hawk import HawkAuth
|
from requests_hawk import HawkAuth
|
||||||
|
|
||||||
|
@ -123,7 +125,8 @@ Alternatively, if you don't have the token id and key, you can pass the
|
||||||
hawk session token I talked about earlier and the lib will take care of
|
hawk session token I talked about earlier and the lib will take care of
|
||||||
the derivation for you:
|
the derivation for you:
|
||||||
|
|
||||||
``` sourceCode python
|
```python
|
||||||
|
|
||||||
hawk_auth = HawkAuth(
|
hawk_auth = HawkAuth(
|
||||||
hawk_session=resp.headers['hawk-session-token'],
|
hawk_session=resp.headers['hawk-session-token'],
|
||||||
server_url=self.server_url
|
server_url=self.server_url
|
||||||
|
@ -140,7 +143,8 @@ simple it is to use it.
|
||||||
|
|
||||||
Here is a demo of how we implemented it for Daybed:
|
Here is a demo of how we implemented it for Daybed:
|
||||||
|
|
||||||
``` sourceCode python
|
```python
|
||||||
|
|
||||||
from pyramid_hawkauth import HawkAuthenticationPolicy
|
from pyramid_hawkauth import HawkAuthenticationPolicy
|
||||||
|
|
||||||
policy = HawkAuthenticationPolicy(decode_hawk_id=get_hawk_id)
|
policy = HawkAuthenticationPolicy(decode_hawk_id=get_hawk_id)
|
||||||
|
@ -164,7 +168,8 @@ finally came up factorizing everything in a library for express, named
|
||||||
In order to plug it in your application, you'll need to use it as a
|
In order to plug it in your application, you'll need to use it as a
|
||||||
middleware:
|
middleware:
|
||||||
|
|
||||||
``` sourceCode javascript
|
```
|
||||||
|
javascript
|
||||||
var express = require("express");
|
var express = require("express");
|
||||||
var hawk = require("express-hawkauth");
|
var hawk = require("express-hawkauth");
|
||||||
app = express();
|
app = express();
|
||||||
|
|
|
@ -112,7 +112,8 @@ terme, et que *Remote Storage* devienne une facette de notre solution.
|
||||||
permet de manipuler des enregistrements en local et de les synchroniser
|
permet de manipuler des enregistrements en local et de les synchroniser
|
||||||
vers une base distante.
|
vers une base distante.
|
||||||
|
|
||||||
``` sourceCode javascript
|
```
|
||||||
|
javascript
|
||||||
var db = new PouchDB('dbname');
|
var db = new PouchDB('dbname');
|
||||||
|
|
||||||
db.put({
|
db.put({
|
||||||
|
|
|
@ -42,15 +42,13 @@ Une phrase de passe devrait:
|
||||||
Une des techniques consiste à utiliser des mots du dictionnaire,
|
Une des techniques consiste à utiliser des mots du dictionnaire,
|
||||||
sélectionnés de manière aléatoire, puis modifiés.
|
sélectionnés de manière aléatoire, puis modifiés.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Micah Lee [travaille également sur un
|
Micah Lee [travaille également sur un
|
||||||
outil](https://github.com/micahflee/passphrases) qui vise à rendre la
|
outil](https://github.com/micahflee/passphrases) qui vise à rendre la
|
||||||
mémorisation des phrases de passe plus aisée, de par leur répétition
|
mémorisation des phrases de passe plus aisée, de par leur répétition
|
||||||
avec des pauses de plus en plus longues.
|
avec des pauses de plus en plus longues.
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
Oui, ce n'est pas aussi simple que ce qu'il y parait. Pour ma part, j'ai
|
Oui, ce n'est pas aussi simple que ce qu'il y parait. Pour ma part, j'ai
|
||||||
une copie en local de mes clés, dans un fichier chiffré avec une autre
|
une copie en local de mes clés, dans un fichier chiffré avec une autre
|
||||||
clé que j'ai généré pour l'occasion et que je ne partagerait pas. J'ai
|
clé que j'ai généré pour l'occasion et que je ne partagerait pas. J'ai
|
||||||
|
|
|
@ -3,6 +3,7 @@ Service de nuages : Garantir l'intégrité des données via des signatures
|
||||||
|
|
||||||
:summary: Comment garantir l'intégrité des données en utilisant les signatures.
|
:summary: Comment garantir l'intégrité des données en utilisant les signatures.
|
||||||
:lang: fr
|
:lang: fr
|
||||||
|
:date: 2016-03-01
|
||||||
|
|
||||||
*Cet article est repris depuis le blog « Service de Nuages » de mon équipe à Mozilla*
|
*Cet article est repris depuis le blog « Service de Nuages » de mon équipe à Mozilla*
|
||||||
|
|
3
mnmlist/LICENSE
Normal file
3
mnmlist/LICENSE
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
This theme is uncopyrighted (http://mathieu.agopian.info/mnmlist/theme.html), and is an adaptation of the mnmlist theme for wordpress, which is also uncopyrighted (http://mnmlist.com/theme/).
|
||||||
|
|
||||||
|
This theme is also free, and offered as is.
|
28
mnmlist/README.rst
Normal file
28
mnmlist/README.rst
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
mnmlist
|
||||||
|
#######
|
||||||
|
|
||||||
|
This is the `mnmlist theme <http://mnmlist.com/theme>`_ adapted for Pelican.
|
||||||
|
|
||||||
|
|
||||||
|
Settings
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
There's one additional setting used by this theme, if present:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
HIDE_DATE = False
|
||||||
|
|
||||||
|
If ``HIDE_DATE`` is set to ``True``, dates won't be displayed under the blog post titles.
|
||||||
|
|
||||||
|
|
||||||
|
Compass
|
||||||
|
~~~~~~~
|
||||||
|
|
||||||
|
The ``main.css`` file is generated from the ``compass/src/main.scss`` sass file, using http://compass-style.org/.
|
||||||
|
|
||||||
|
Screenshot
|
||||||
|
----------
|
||||||
|
|
||||||
|
.. image:: screenshot.png
|
||||||
|
:alt: Screenshot of the theme
|
BIN
mnmlist/screenshot.png
Normal file
BIN
mnmlist/screenshot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 121 KiB |
296
mnmlist/static/css/main.css
Normal file
296
mnmlist/static/css/main.css
Normal file
|
@ -0,0 +1,296 @@
|
||||||
|
/*
|
||||||
|
Theme Name: mnmlist modified by leplatrem
|
||||||
|
Theme URI: http://mathieu.agopian.info/mnmlist/theme.html
|
||||||
|
Description: Theme adapted from http://mnmlist.com/theme/ from Leo Babauta, a very clean minimalist theme, without comments, search, archives or other features.
|
||||||
|
Author: Mathieu Agopian, Mathieu Leplatre
|
||||||
|
Autor URI: http://mathieu.agopian.info
|
||||||
|
|
||||||
|
This theme is uncopyrighted, free, and offered as is.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import url("pygment.css");
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--main-bg-color: #fff;
|
||||||
|
--border-color: #ACACAC;
|
||||||
|
--code-bg-color: #e5e5e2;
|
||||||
|
--link-color:
|
||||||
|
#BB7DD4
|
||||||
|
;
|
||||||
|
--text-color: #2d2d2d;
|
||||||
|
--menu-color:
|
||||||
|
#7971D0
|
||||||
|
;
|
||||||
|
--link-color-menu:
|
||||||
|
#36194D
|
||||||
|
;
|
||||||
|
--headers-color: #000;
|
||||||
|
--citation-bold-color: #bb7dd49a
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background: var(--main-bg-color);
|
||||||
|
color: var(--text-color);
|
||||||
|
font-family: "Helvetica Neue",Arial,sans-serif;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
padding: 16px;
|
||||||
|
|
||||||
|
max-width: 35em;
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section {
|
||||||
|
margin-top: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4 {
|
||||||
|
color: var(--headers-color);
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 2em;
|
||||||
|
font-weight: normal;
|
||||||
|
margin-bottom: 0;
|
||||||
|
font-weight: bold;
|
||||||
|
line-height: 1.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 a {
|
||||||
|
text-decoration-style: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: 1.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
font-size: 0.9em;
|
||||||
|
}
|
||||||
|
|
||||||
|
time {
|
||||||
|
font-weight: bold;
|
||||||
|
border-bottom: 1px solid;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
padding-right: 5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
border: none;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-right {
|
||||||
|
float: right;
|
||||||
|
max-width: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-center {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
width: max-content;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footnote:first-of-type {
|
||||||
|
padding-top: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footnote:last-of-type {
|
||||||
|
padding-bottom: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footnote-reference {
|
||||||
|
vertical-align: super;
|
||||||
|
font-size: 0.7em;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
position: relative;
|
||||||
|
margin: 1.5em 2ch 1.5em 2ch;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote strong {
|
||||||
|
background-color: var(--citation-bold-color);
|
||||||
|
font-weight: normal !important;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote::before {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: -2ch;
|
||||||
|
bottom: 0;
|
||||||
|
width: 1ch;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: pre;
|
||||||
|
line-height: 30px;
|
||||||
|
content: ">\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a>\a";
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
p {
|
||||||
|
line-height: 30px;
|
||||||
|
margin:30px auto;
|
||||||
|
text-indent: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.caption {
|
||||||
|
font-size: 80%;
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration-color: var(--link-color);
|
||||||
|
text-decoration-thickness: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: var(--link-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ul, ol {
|
||||||
|
padding: .5em 0em 1em 3.2em;
|
||||||
|
}
|
||||||
|
ul li, ol li {
|
||||||
|
line-height: 30px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
tt, pre {
|
||||||
|
font-family: Inconsolata, Monaco, monospace;
|
||||||
|
line-height: 1.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
font-size: 0.8em;
|
||||||
|
overflow: auto;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
padding-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
header a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h1 {
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
dt {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
section.index {
|
||||||
|
margin-top: 3em;
|
||||||
|
line-height: 1.5em;
|
||||||
|
}
|
||||||
|
section.index h1 {
|
||||||
|
margin-top: 5px;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.index time {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#links {
|
||||||
|
}
|
||||||
|
|
||||||
|
#links li {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#links a {
|
||||||
|
margin-right: 15px;
|
||||||
|
padding-top: 5px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
|
||||||
|
text-decoration-color: var(--link-color-menu);
|
||||||
|
/*text-decoration-thickness: unset;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
#links a:hover {
|
||||||
|
color: var(--link-color-menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
#links a.selected {
|
||||||
|
color: #fff;
|
||||||
|
background-color: var(--link-color-menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
#links a.selected:hover {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#article-list {
|
||||||
|
margin-top: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#article-list ol li {
|
||||||
|
line-height: 1.2em;
|
||||||
|
list-style-type: none;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.note {
|
||||||
|
background: var(--code-bg-color);
|
||||||
|
font-style: italic;
|
||||||
|
padding: 1em 0.5em;
|
||||||
|
margin: 1em 0;
|
||||||
|
font-family: Georgia, serif;
|
||||||
|
}
|
||||||
|
.note p {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.note p.first {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.note p.first::after {
|
||||||
|
content: ' : ';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
footer {
|
||||||
|
color: var(--headers-color);
|
||||||
|
font-size: 13px;
|
||||||
|
letter-spacing:4px;
|
||||||
|
margin-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer li {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer p {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer a {
|
||||||
|
text-decoration-thickness: unset;
|
||||||
|
}
|
74
mnmlist/static/css/pygment.css
Normal file
74
mnmlist/static/css/pygment.css
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
pre { line-height: 125%; margin: 0; }
|
||||||
|
td.linenos pre { color: #000000; background-color: #f0f0f0; padding: 0 5px 0 5px; }
|
||||||
|
span.linenos { color: #000000; background-color: #f0f0f0; padding: 0 5px 0 5px; }
|
||||||
|
td.linenos pre.special { color: #000000; background-color: #ffffc0; padding: 0 5px 0 5px; }
|
||||||
|
span.linenos.special { color: #000000; background-color: #ffffc0; padding: 0 5px 0 5px; }
|
||||||
|
.highlight .hll { background-color: #ffffcc }
|
||||||
|
.highlight { background: #f8f8f8; }
|
||||||
|
.highlight .c { color: #408080; font-style: italic } /* Comment */
|
||||||
|
.highlight .err { border: 1px solid #FF0000 } /* Error */
|
||||||
|
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
|
||||||
|
.highlight .o { color: #666666 } /* Operator */
|
||||||
|
.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
|
||||||
|
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
|
||||||
|
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
|
||||||
|
.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
|
||||||
|
.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */
|
||||||
|
.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */
|
||||||
|
.highlight .gd { color: #A00000 } /* Generic.Deleted */
|
||||||
|
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||||
|
.highlight .gr { color: #FF0000 } /* Generic.Error */
|
||||||
|
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
||||||
|
.highlight .gi { color: #00A000 } /* Generic.Inserted */
|
||||||
|
.highlight .go { color: #888888 } /* Generic.Output */
|
||||||
|
.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
|
||||||
|
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||||
|
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
||||||
|
.highlight .gt { color: #0044DD } /* Generic.Traceback */
|
||||||
|
.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
|
||||||
|
.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
|
||||||
|
.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
|
||||||
|
.highlight .kp { color: #008000 } /* Keyword.Pseudo */
|
||||||
|
.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
|
||||||
|
.highlight .kt { color: #B00040 } /* Keyword.Type */
|
||||||
|
.highlight .m { color: #666666 } /* Literal.Number */
|
||||||
|
.highlight .s { color: #BA2121 } /* Literal.String */
|
||||||
|
.highlight .na { color: #7D9029 } /* Name.Attribute */
|
||||||
|
.highlight .nb { color: #008000 } /* Name.Builtin */
|
||||||
|
.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */
|
||||||
|
.highlight .no { color: #880000 } /* Name.Constant */
|
||||||
|
.highlight .nd { color: #AA22FF } /* Name.Decorator */
|
||||||
|
.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
|
||||||
|
.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
|
||||||
|
.highlight .nf { color: #0000FF } /* Name.Function */
|
||||||
|
.highlight .nl { color: #A0A000 } /* Name.Label */
|
||||||
|
.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
|
||||||
|
.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
|
||||||
|
.highlight .nv { color: #19177C } /* Name.Variable */
|
||||||
|
.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
|
||||||
|
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
||||||
|
.highlight .mb { color: #666666 } /* Literal.Number.Bin */
|
||||||
|
.highlight .mf { color: #666666 } /* Literal.Number.Float */
|
||||||
|
.highlight .mh { color: #666666 } /* Literal.Number.Hex */
|
||||||
|
.highlight .mi { color: #666666 } /* Literal.Number.Integer */
|
||||||
|
.highlight .mo { color: #666666 } /* Literal.Number.Oct */
|
||||||
|
.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
|
||||||
|
.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
|
||||||
|
.highlight .sc { color: #BA2121 } /* Literal.String.Char */
|
||||||
|
.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
|
||||||
|
.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
|
||||||
|
.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
|
||||||
|
.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
|
||||||
|
.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
|
||||||
|
.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
|
||||||
|
.highlight .sx { color: #008000 } /* Literal.String.Other */
|
||||||
|
.highlight .sr { color: #BB6688 } /* Literal.String.Regex */
|
||||||
|
.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
|
||||||
|
.highlight .ss { color: #19177C } /* Literal.String.Symbol */
|
||||||
|
.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
|
||||||
|
.highlight .fm { color: #0000FF } /* Name.Function.Magic */
|
||||||
|
.highlight .vc { color: #19177C } /* Name.Variable.Class */
|
||||||
|
.highlight .vg { color: #19177C } /* Name.Variable.Global */
|
||||||
|
.highlight .vi { color: #19177C } /* Name.Variable.Instance */
|
||||||
|
.highlight .vm { color: #19177C } /* Name.Variable.Magic */
|
||||||
|
.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */
|
11
mnmlist/templates/analytics.html
Normal file
11
mnmlist/templates/analytics.html
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{% if GOOGLE_ANALYTICS %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
|
||||||
|
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
|
||||||
|
</script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
try {
|
||||||
|
var pageTracker = _gat._getTracker("{{GOOGLE_ANALYTICS}}");
|
||||||
|
pageTracker._trackPageview();
|
||||||
|
} catch(err) {}</script>
|
||||||
|
{% endif %}
|
14
mnmlist/templates/archives.html
Normal file
14
mnmlist/templates/archives.html
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% block content %}
|
||||||
|
<header>
|
||||||
|
<h1>Archives</h1>
|
||||||
|
</header>
|
||||||
|
<section id="content" class="body">
|
||||||
|
<dl>
|
||||||
|
{% for article in dates %}
|
||||||
|
<dt>{{ article.locale_date }}</dt>
|
||||||
|
<dd><a href='{{ SITEURL }}/{{ article.url }}'>{{ article.title }}</a></dd>
|
||||||
|
{% endfor %}
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
{% endblock %}
|
32
mnmlist/templates/article.html
Normal file
32
mnmlist/templates/article.html
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% block title %}{{ article.title }} - {{ super() }}{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<header>
|
||||||
|
{% if article.category == "Lectures" %}
|
||||||
|
<h3>Notes de lecture</h3>
|
||||||
|
<h1 class="post-title">« {{ article.title }} » par {{ article.author }}</h1>
|
||||||
|
<time datetime="{{ article.date.isoformat() }}">Lu le {{ article.locale_date }}</time>
|
||||||
|
{% else %}
|
||||||
|
<h1 class="post-title">{{ article.title }}</h1>
|
||||||
|
<time datetime="{{ article.date.isoformat() }}">{{ article.locale_date }}</time>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
</header>
|
||||||
|
<article>
|
||||||
|
{{ article.content }}
|
||||||
|
{% if article.tags %}
|
||||||
|
<p>
|
||||||
|
{% for tag in article.tags %}
|
||||||
|
<a href="{{ SITEURL }}/{{ tag.url }}">#{{ tag }}</a>{% if not loop.last %}, {% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
- Posted in the <a href="{{ SITEURL }}/{{ article.category.url }}">{{ article.category }}</a> category
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
</article>
|
||||||
|
{% endblock %}
|
2
mnmlist/templates/author.html
Normal file
2
mnmlist/templates/author.html
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
{% extends "index.html" %}
|
||||||
|
{% block title %}{{ SITENAME }} - {{ author }}{% endblock %}
|
0
mnmlist/templates/authors.html
Normal file
0
mnmlist/templates/authors.html
Normal file
27
mnmlist/templates/base.html
Normal file
27
mnmlist/templates/base.html
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<title>{% block title %}{{ SITENAME }}{%endblock%}</title>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="{{ SITEURL }}/theme/css/{{ CSS_FILE }}" type="text/css" />
|
||||||
|
<link href="{{ FEED_DOMAIN }}/{{ FEED_ALL_ATOM }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} ATOM Feed" />
|
||||||
|
{% if FEED_RSS %}
|
||||||
|
<link href="{{ FEED_DOMAIN }}/{{ FEED_ALL_RSS }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} RSS Feed" />
|
||||||
|
{% endif %}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<section id="links">
|
||||||
|
<li>
|
||||||
|
<a class="{% if page_name == 'index' %}selected{% endif %}" href="{{ SITEURL }}/" id="site-title">Blog</a>
|
||||||
|
</li>
|
||||||
|
{% for p in pages %}
|
||||||
|
<li><a class="{% if page and page.slug == p.slug %}selected{% endif %}" href="{{ SITEURL }}/{{ p.url }}">{{ p.title }}</a></li>
|
||||||
|
{% endfor %}
|
||||||
|
</section>
|
||||||
|
{% include 'github.html' %}
|
||||||
|
{% block content %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
8
mnmlist/templates/categories.html
Normal file
8
mnmlist/templates/categories.html
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% block content %}
|
||||||
|
<ul>
|
||||||
|
{% for category, articles in categories %}
|
||||||
|
<li><a href="{{ SITEURL }}/{{ category.url }}">{{ category }}</a></li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% endblock %}
|
3
mnmlist/templates/category.html
Normal file
3
mnmlist/templates/category.html
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{% extends "index.html" %}
|
||||||
|
{% block title %}{{ category }} - {{ super() }}{% endblock %}
|
||||||
|
{% block pagetitle %}{{ category }} posts{% endblock %}
|
20
mnmlist/templates/comments.html
Normal file
20
mnmlist/templates/comments.html
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
{% if DISQUS_SITENAME %}
|
||||||
|
<hr>
|
||||||
|
<div id="disqus_thread"></div>
|
||||||
|
<script>
|
||||||
|
var disqus_config = function() {
|
||||||
|
this.page.url = '{{ SITEURL }}/{{ output_file }}';
|
||||||
|
this.page.identifier = '{{ article.slug }}';
|
||||||
|
};
|
||||||
|
(function() {
|
||||||
|
var d = document;
|
||||||
|
var s = d.createElement('script');
|
||||||
|
s.src = '//{{ DISQUS_SITENAME }}.disqus.com/embed.js';
|
||||||
|
s.setAttribute('data-timestamp', +new Date());
|
||||||
|
(d.head || d.body).appendChild(s);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
<noscript class="text-muted">
|
||||||
|
Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a>
|
||||||
|
</noscript>
|
||||||
|
{% endif %}
|
11
mnmlist/templates/disqus_script.html
Normal file
11
mnmlist/templates/disqus_script.html
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{% if DISQUS_SITENAME %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
var disqus_shortname = '{{ DISQUS_SITENAME }}';
|
||||||
|
(function () {
|
||||||
|
var s = document.createElement('script'); s.async = true;
|
||||||
|
s.type = 'text/javascript';
|
||||||
|
s.src = 'https://' + disqus_shortname + '.disqus.com/count.js';
|
||||||
|
(document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
|
||||||
|
}());
|
||||||
|
</script>
|
||||||
|
{% endif %}
|
9
mnmlist/templates/github.html
Normal file
9
mnmlist/templates/github.html
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{% if GITHUB_URL %}
|
||||||
|
<a href="{{ GITHUB_URL }}">
|
||||||
|
{% if GITHUB_POSITION != "left" %}
|
||||||
|
<img style="position: absolute; top: 0; right: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub" />
|
||||||
|
{% else %}
|
||||||
|
<img style="position: absolute; top: 0; left: 0; border: 0;" src="http://s3.amazonaws.com/github/ribbons/forkme_left_white_ffffff.png" alt="Fork me on GitHub" />
|
||||||
|
{% endif %}
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
30
mnmlist/templates/index.html
Normal file
30
mnmlist/templates/index.html
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% block content %}
|
||||||
|
<h1>{% block pagetitle %}{% endblock %}</h1>
|
||||||
|
{% if articles %}
|
||||||
|
{% for article in articles %}
|
||||||
|
{% if loop.index <= DEFAULT_PAGINATION %}
|
||||||
|
<section class="section index">
|
||||||
|
{% if not HIDE_DATE %}
|
||||||
|
<time datetime="{{ article.date.isoformat() }}">{{ article.locale_date }}</time>
|
||||||
|
{% endif %}
|
||||||
|
<h1><a href="{{ SITEURL }}/{{ article.url }}" id="page-title">{{ article.title }}</a></h1>
|
||||||
|
{{ article.content|striptags|truncate(200) }}
|
||||||
|
</section>
|
||||||
|
{% else %}
|
||||||
|
{% if loop.index0 == DEFAULT_PAGINATION %}
|
||||||
|
<section>
|
||||||
|
<h1>More...</h1>
|
||||||
|
<ul>
|
||||||
|
{% endif %}
|
||||||
|
<li><a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark" title="Permalink to {{ article.title|striptags }}">{{ article.title }}</a></li>
|
||||||
|
{% if loop.last %}
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{% else %}
|
||||||
|
No posts found.
|
||||||
|
{% endif %}
|
||||||
|
{% endblock content %}
|
9
mnmlist/templates/page.html
Normal file
9
mnmlist/templates/page.html
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% block title %}{{ page.title }} - {{ super() }}{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
<header>
|
||||||
|
</header>
|
||||||
|
<article>
|
||||||
|
{{ page.content }}
|
||||||
|
</article>
|
||||||
|
{% endblock %}
|
15
mnmlist/templates/pagination.html
Normal file
15
mnmlist/templates/pagination.html
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{% if DEFAULT_PAGINATION %}
|
||||||
|
<p class="paginator">
|
||||||
|
{% if articles_page.has_previous() %}
|
||||||
|
{% if articles_page.previous_page_number() == 1 %}
|
||||||
|
<a href="{{ SITEURL }}/{{ page_name }}.html">«</a>
|
||||||
|
{% else %}
|
||||||
|
<a href="{{ SITEURL }}/{{ page_name }}{{ articles_page.previous_page_number() }}.html">«</a>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
Page {{ articles_page.number }} / {{ articles_paginator.num_pages }}
|
||||||
|
{% if articles_page.has_next() %}
|
||||||
|
<a href="{{ SITEURL }}/{{ page_name }}{{ articles_page.next_page_number() }}.html">»</a>
|
||||||
|
{% endif %}
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
16
mnmlist/templates/piwik.html
Normal file
16
mnmlist/templates/piwik.html
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{% if PIWIK_URL and PIWIK_SITE_ID %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
{% if PIWIK_SSL_URL %}
|
||||||
|
var pkBaseURL = (("https:" == document.location.protocol) ? "https://{{ PIWIK_SSL_URL }}/" : "http://{{ PIWIK_URL }}/");
|
||||||
|
{% else %}
|
||||||
|
var pkBaseURL = (("https:" == document.location.protocol) ? "https://{{ PIWIK_URL }}/" : "http://{{ PIWIK_URL }}/");
|
||||||
|
{% endif %}
|
||||||
|
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
|
||||||
|
</script><script type="text/javascript">
|
||||||
|
try {
|
||||||
|
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", {{ PIWIK_SITE_ID }});
|
||||||
|
piwikTracker.trackPageView();
|
||||||
|
piwikTracker.enableLinkTracking();
|
||||||
|
} catch( err ) {}
|
||||||
|
</script><noscript><p><img src="http://{{ PIWIK_URL }}/piwik.php?idsite={{ PIWIK_SITE_ID }}" style="border:0" alt="" /></p></noscript>
|
||||||
|
{% endif %}
|
3
mnmlist/templates/tag.html
Normal file
3
mnmlist/templates/tag.html
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{% extends "index.html" %}
|
||||||
|
{% block title %}{{ tag }} - {{ super() }}{% endblock %}
|
||||||
|
{% block pagetitle %}Posts with #{{ tag }} tag{% endblock %}
|
2
mnmlist/templates/taglist.html
Normal file
2
mnmlist/templates/taglist.html
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
{% if article.tags %}<p>tags: {% for tag in article.tags %}<a href="{{ SITEURL }}/{{ tag.url }}">{{ tag }}</a>{% endfor %}</p>{% endif %}
|
||||||
|
{% if PDF_PROCESSOR %}<p><a href="{{ SITEURL }}/pdf/{{ article.slug }}.pdf">get the pdf</a></p>{% endif %}
|
9
mnmlist/templates/tags.html
Normal file
9
mnmlist/templates/tags.html
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% block content %}
|
||||||
|
<ul>
|
||||||
|
{% for tag, articles in tags %}
|
||||||
|
<li><a href="{{ SITEURL }}/{{ tag.url }}">{{ tag }}</a></li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% endblock %}
|
||||||
|
|
6
mnmlist/templates/translations.html
Normal file
6
mnmlist/templates/translations.html
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{% if article.translations %}
|
||||||
|
Translations:
|
||||||
|
{% for translation in article.translations %}
|
||||||
|
<a href="{{ SITEURL }}/{{ translation.url }}">{{ translation.lang }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
3
mnmlist/templates/twitter.html
Normal file
3
mnmlist/templates/twitter.html
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{% if TWITTER_USERNAME %}
|
||||||
|
<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="{{TWITTER_USERNAME}}">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
|
||||||
|
{% endif %}
|
|
@ -3,8 +3,9 @@
|
||||||
PATH = "content"
|
PATH = "content"
|
||||||
AUTHOR = u""
|
AUTHOR = u""
|
||||||
SITENAME = u"Carnets en ligne"
|
SITENAME = u"Carnets en ligne"
|
||||||
THEME = "theme"
|
THEME = "mnmlist"
|
||||||
DISQUS_SITENAME = "notmyidea"
|
DISQUS_SITENAME = "notmyidea"
|
||||||
|
DEFAULT_PAGINATION = 10
|
||||||
STATIC_PATHS = ["static", "images"]
|
STATIC_PATHS = ["static", "images"]
|
||||||
|
|
||||||
SITEURL = ""
|
SITEURL = ""
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
pelican
|
pelican
|
||||||
markdown
|
markdown
|
||||||
|
datefinder
|
||||||
|
|
|
@ -14,7 +14,7 @@ class BlockquotesPreprocessor(Preprocessor):
|
||||||
new_lines = []
|
new_lines = []
|
||||||
for line in lines:
|
for line in lines:
|
||||||
if line.startswith(">"):
|
if line.startswith(">"):
|
||||||
new_lines.append(" ")
|
# new_lines.append(" ")
|
||||||
new_lines.append(line)
|
new_lines.append(line)
|
||||||
else:
|
else:
|
||||||
new_lines.append(line)
|
new_lines.append(line)
|
||||||
|
|
Loading…
Reference in a new issue