update with the latest changes

This commit is contained in:
Alexis Metaireau 2012-05-11 16:36:41 +02:00
parent deec5ed902
commit 6a1d1db12f
40 changed files with 1356 additions and 138 deletions

View file

@ -0,0 +1,55 @@
Bidouille
#########
:date: 30-04-2012
:tags: diy, électronique, hack, bidouille
:lang: fr
Bidouille bidouille bidouille.
Je pense que je suis un bidouilleur logiciel: j'aime bien aller farfouiller
dans le code pour comprendre comment tel ou tel programme fonctionne (ou
trop souvent comment il ne fonctionne pas !), faire des petites modifications,
tester, modifier, re-tester, tout casser, réparer …
Et cette bidouille, cette envie de comprendre comment les choses fonctionnent,
et depuis peu cette envie de mettre en pratique ces connaissances dépasse la
bidouille logicielle. J'ai passé une grosse partie de mon week-end à Main
d'Œuvre, où l'association `Under Construction
<http://www.underconstruction.fr>`_ faisait se rencontrer le milieu de
l'éducation populaire et le milieu de la bidouille.
Forcement, ni une ni deux, je saute dans le bateau en marche et, n'étant ni un
très grand bidouilleur ni un très grand animateur, j'en ressort enrichi de
toutes ces rencontres, de tous ces préjugés qui tombent, et de quelques
découvertes bluffantes, des idées plein la tête.
J'avais entendu parler des "`rep-raps <http://www.reprap.org>`_", des
imprimantes en 3 dimensions capables de produire des pièces en plastique
mais je n'avais jamais eu l'occasion de voir le bousin en vrai. Et
c'est impressionnant. Vraiment. ("Bienvenue dans le 21ème siècle !")
Ça laisse énormément à penser autour des questions d'émancipation
technologique, et de non dépendance envers les constructeurs, dans le milieu de
l'électro-ménager, par exemple. "Ah tiens, cette pièce est cassée, je vais
aller utiliser la rep-rap du coin pour me la fabriquer". Et hop, on mets fin à
tout un cycle d'obsolescence programmée…
Mais au delà du défi technique et technologique, j'ai pu refaire un petit peu
d'électronique, et découvrir que j'y prends vraiment gout rapidement. Il y a
bien évidemment un coté très ludique (la led s'allume quand on la branche),
mais il y a surtout cette notion de DIY (Do It Yourself) sous jacente: une fois
que je sais comment ça fonctionne, je peux vraiment faire des choses utiles de
mes 10 doigts, réparer des petits objets, bidouiller ceux existants etc.
De la récupération de composants on essaye de voir ce qu'on peut faire, on a
terminé par faire un "vibro-bot", un vibreur de téléphone portable monté sur
une tête de brosse à dents, faisant donc avancer cette dernière.
C'est pour s'amuser, c'est pas sérieux ! Pour autant, les concepts de
l'électricité sont appris et je me retrouve avec cette envie de comprendre un
peu plus ce monde de l'électronique qui, je m'en rends compte, m'échappe encore
complètement. De l'éducation à la bidouille !
Allez, demain c'est fer à souder, piles, leds, interrupteurs, potars et c'est
parti !

View file

@ -0,0 +1,79 @@
Djangocong 2012
###############
:date: 16-04-2012
:lang: fr
Ce week-end, c'était `djangocong`_, une conférence autour de `django`_,
de `python`_ et du web, qui avait lieu dans le sud, à Carnon-plage, à quelques
kilomètres de Montpellier la belle.
J'ai vraiment apprécié les trois jours passés avec cette bande de geeks. Je
m'attendais à des *nerds*, j'y ai trouvé une qualité d'écoute, des personnes qui
partagent des valeurs qui leur sont chères, mais qui ne limitent pas
leurs discussions à du technique. Eeeh ouais, encore un préjugé qui tombe,
tiens :)
En tant que *hackers*, on a le moyen de créer des outils qui sont utiles à tous,
et qui peuvent être utiles pour favoriser la collaboration et la mise en commun
des données. J'ai eu l'occasion de discuter de projets tournant autour de
l'entraide, que ça soit pour mettre en lien des associations d'économie sociale
et solidaire (ESS) ou simplement pour que les populations *non tech* `puissent
utiliser toute la puissance de l'outil qu'est le web
<http://blog.notmyidea.org/quels-usages-pour-linformatique-fr.html>`_.
Au niveau du format des conférences, je ne savais pas trop à quoi m'attendre,
au vu des échos de l'an dernier, mais c'était adapté: des mini-confs de 12mn le
samedi matin + début d'aprem, en mode no-wifi pour récupérer une qualité
d'écoute. Et contrairement à mes attentes, ce n'est pas trop court. Pas mal de
retours d'expérience pour le coup, et une matinée pas vraiment techniques, mais
ça pose le décor et permet de savoir qui fait quoi.
Parmi l'ensemble des conférences du matin, je retiens principalement
celle de Mathieu Leplatre, "des cartes d'un autre monde", qui m'a réellement
bluffée quand à la facilité de créer des cartes avec `TileMill
<http://mapbox.com/tilemill/>`_, et qui me pousse à reconsidérer le fait que "la
carto, c'est compliqué". `La vidéo est (déja !) disponible en ligne
<https://www.youtube.com/watch?v=7NPQo54NbJ8>`_, je vous invite à la regarder
(c'est une 15aine de minutes) pour vous faire un avis ;)
Une fois les conf passées, ça reste très intéressant, voire plus: il reste un
jour et demi pour discuter avec les autres présents. On a pu se retrouver avec
Mathieu pour discuter de "notre" projet `"carto
forms" <http://blog.notmyidea.org/carto-forms-fr.html>`_, qui à finalement pu se
redéfinir un peu plus et donner naissance à un `README
<https://github.com/spiral-project/daybed/blob/master/README.rst>`_. On en
à profité pour lui choisir un nouveau nom: "daybed", en référence à couchdb.
Ça devrait se transformer en code d'ici peu. La curiosité aidant, on a pu
discuter du projet avec d'autres personnes et affiner les attentes de chacun
pour finalement arriver à quelque chose d'assez sympathique.
J'ai aussi pu me rendre compte que pas mal de monde utilise `pelican
<http://pelican.notmyidea.org>`_, le bout de code que j'ai codé pour générer ce
blog, et avoir des retours utiles ! Probablement des réflexions à venir
sur comment éviter qu'un projet open-source ne devienne chronophage, et sur
comment réussir à garder une qualité dans le code source tout en ne froissant
pas les contributeurs.
Bien évidemment, c'était aussi l'occaz de rencontrer des gens qu'on ne voir que
sur les inter-nets, et de discuter un brin de tout ce qui fait que notre monde
est chouette et moins chouette.
Entres autres faits notoires, JMad a perdu au baby-foot face à Exirel, même
en m'ayant à ses cotés pour le déconcentrer (et je suis un joueur d'un autre
monde - en d'autres termes, je suis nul), David`bgk ne s'est pas levé pour
aller courir le dimanche matin (il avait dit 5 heures!), Les suisses ont essayé
de me convertir à coup d'abricotine, j'ai perdu au skulls-n-roses en quelques
tours et on a allumé un feu chez Stéphane le dimanche soir (oui oui, à
montpellier, mi avril, je vous le dis qu'ils mentent avec leur soit disant
soleil).
Et c'est sans parler de `la brasucade <http://jehaisleprintemps.net/blog/fr/2012/04/15/j-ecris-ton-nom/>`_
Bref, vivement la prochaine (et allez, cette fois ci je ferais une présentation
!)
.. _djangocong: http://rencontres.django-fr.org
.. _python: http://python.org
.. _django: http://djangoproject.org

View file

@ -0,0 +1,115 @@
Lifestyle
#########
:lang: fr
:date: 11-05-2012
Eh beh, c'est pas aussi simple qu'il y parait de trouver un environnement qui
permette autant de travailler correctement et de ne pas s'enfermer dans le
boulot.
Surtout si comme moi vous cherchez à limiter vos déplacement, que vous aimez
vivre avec peu et cherchez à trouver un équilibre entre une vie connectée et
une vie *réelle* (oui, celle avec des vrais gens qui ont d'autres
préoccupations que l'informatique !). Comment réussir à trouver un juste
milieu entre le geek inconditionnel et le bon vivant, qui à du temps à
consacrer à autre chose qu'à son travail ?
Voyages
=======
Un des premiers trucs que j'ai trouvé surprennant en arrivant à Mozilla, c'est
la fréquence des voyages que l'on peut être amené à avoir. Ah, c'est pour la
bonne cause, c'est tellement plus sympa d'avoir les collègues à coté pour
bosser, plutôt qu'à l'autre bout du monde. Mais quand même, si je le voulais,
entre les semaines de travail et les conférences, je pourrais être tous les
deux mois aux États-Unis !
Une aubaine, penserons certains. Voyager, c'est *cool* ! Bon, si on mets de
coté le cout écologique d'un voyage (nécessairement en avion), la chose qui me
dérange le plus c'est cette impression de venir pour repartir. Voyager, c'est
sympa, mais avoir le temps de prendre un rythme de vie différent, de rencontrer
des gens, de construire quelque chose, ça me manque.
Donc je décline quand je n'en ai pas l'envie, tout simplement. Je loupe des
choses intéressantes (`PyCon`_ à Santa Clara avait vraiment l'air
chouette !), mais ça me permet également d'avoir plus de temps pour vivre là ou
j'habite, pour construire quelque chose localement. Et puis des évènements, il
y en à tellement en France et en Europe auquel je n'assiste pas que ça me fait
mal au cœur d'aller à l'autre bout du monde pour faire la même chose !
Bien sur, je serais amené à voyager. Et autant que faire se peut je le
ferais avec plaisir et je tenterais de rester un peu plus avant et après sur
place (plus question de faire un aller/retour en une semaine !), question de me
faire à l'atmosphère ! `Tarek`_ est par exemple resté un mois à San Francisco
en janvier pour son dernier séjour, alors pourquoi ne pas prendre exemple ?
Tout de suite ça me parles plus.
.. _Pycon: http://pycon.us
.. _Tarek: http://ziade.org
Et quand-est-ce qu'on arrête ?
==============================
Une autre chose assez difficile à gérer, c'est le temps.
J'ai vraiment une chance monstrueuse, celle de faire un travail qui me plait,
éthiquement et techniquement. Je pourrais y passer mes journées et mes nuits
que je n'aimerais pas moins ça (même si il m'arrive bien sur de saturer !).
Mais j'ai aussi d'autres envies, qui signifient aussi passer du temps
hors-ligne, parce que bizarrement, c'est là que j'ai l'impression de réfléchir
le plus. Loin de ce surplus d'informations…
Facile à dire.
D'autant que quand il est possible de travailler depuis n'importe où,
la séparation physique entre le lieu de travail et le lieu de vie tends à
disparaitre assez facilement. Et sans séparation physique, il faut une sacré
motivation pour savoir quand commencer et quand s'arrêter.
J'essaye de me donner une règle simple: point trop n'en faut. Aucun intérêt à
rester travailler des heures durant sans s'arrêter, ou en tout cas pas
d'intérêt à le faire de manière trop régulière. Une journée qui commence tôt
(~9h) me permet de me concentrer le matin (les collègues californiens dorment)
et d'avoir un rythme assez "normal". Et puis, avec ce soleil qui commence à
inonder les terrasses, autant faire autre chose que de rester enfermé à coder
en fin d'après midi !
Surplus
=======
Tiens, je parlais de surplus, nous y sommes. Que ça soit le surplus
d'informations ou le surplus d'objets, ça m'encombre ! Une journée, pour ma
part est faite de communications diverses, de code et de lectures (se tenir au
courant de ce qui se passe dans le monde du logiciel n'est pas une tâche des
plus facile, et qui peut facilement prendre énormément de temps).
Je me demande si je ne devrais pas aspirer à la frugalité de ce coté là
également. Je reçois des mails toute la journée, et mon aggrégateur rss/atom se
remplit également très vite. Mais je n'ai aucunement besoin d'avoir toutes ces
informations dans l'heure, et de les vérifier de manière fréquente. De la même
manière, j'ai simplement arrêté de lire mes flux rss.
Quelques (longues) fois dans la semaine semblent suffire et me permettent de
réussir à rester concentrer.
Résolutions
===========
Soyons fous, tentons quelque chose de nouveau, c'est le printemps ! Pas de
communication dans la matinée, je n'en ai probablement pas besoin, sauf cas
extrêmes. Le matin, c'est pour se concentrer sur le travail à faire.
Une fois les mails du matin dépilés (à 9h30), pas la peine de garder un œil
sur ma boite mail, j'irais y faire un tour en début et en fin d'après midi.
Je pense même à débrancher internet, pour éviter les interactions et pour me
concentrer, mais j'ai comme l'impression que c'est un peu trop abrupt comme
approche.
Aussi, définir en début de journée la liste des choses prévues, et revenir
dessus jour après jour me permettra surement d'avoir un aperçu un peu plus
global du travail accompli.
L'avenir dira si tout ça fonctionne :-)

87
light/static/css/main.css Normal file
View file

@ -0,0 +1,87 @@
@import url(http://fonts.googleapis.com/css?family=Rosario);
@import url("pygment.css");
@import url("typogrify.css");
body {
width: 800px;
margin: auto;
font-size: 1.3em;
background-color: #fffff0;
font-family: "Georgia", serif;
}
a{
color: #000;
}
nav ul {
list-style-type: none;
}
nav ul li {
float: right;
margin-left: 10px;
}
.content {
clear: both;
}
.content h1, h2, h3, h4, h5, h6{
font-family: 'Rosario', arial, serif;
margin-left: -20px;
}
.content h1{
font-size: 2.5em;
}
.content p{
font-size: 1.1em;
text-align: justify;
text-justify: newspaper;
}
.content .date{
font-style: italic;
font-size: 0.7em;
}
.content h2{
font-size: 1.5em;
}
.content a{
padding: 2px;
color: #0F0F0F;
}
.content a:hover{
background-color: #0F0F0F;
color: #eaeaea;
}
.content .highlight pre{
padding: 15px;
background-color: black;
color: white;
overflow: scroll;
}
.content blockquote {
margin: 0px;
margin-right: 40px;
margin-left: 20px;
padding-left: 20px;
text-align: left;
border-left: 3px black solid;
letter-spacing: 2px;
font-style: italic;
text-align: justify;
}
.description {
margin-top: -15px;
font-style: italic;
}

View file

@ -0,0 +1,205 @@
.hll {
background-color:#FFFFCC;
}
.c {
color:#408090;
font-style:italic;
}
.err {
border:1px solid #FF0000;
}
.k {
color:#007020;
font-weight:bold;
}
.o {
color:#666666;
}
.cm {
color:#408090;
font-style:italic;
}
.cp {
color:#007020;
}
.c1 {
color:#408090;
font-style:italic;
}
.cs {
background-color:#FFF0F0;
color:#408090;
}
.gd {
color:#A00000;
}
.ge {
font-style:italic;
}
.gr {
color:#FF0000;
}
.gh {
color:#000080;
font-weight:bold;
}
.gi {
color:#00A000;
}
.go {
color:#303030;
}
.gp {
color:#C65D09;
font-weight:bold;
}
.gs {
font-weight:bold;
}
.gu {
color:#800080;
font-weight:bold;
}
.gt {
color:#0040D0;
}
.kc {
color:#007020;
font-weight:bold;
}
.kd {
color:#007020;
font-weight:bold;
}
.kn {
color:#007020;
font-weight:bold;
}
.kp {
color:#007020;
}
.kr {
color:#007020;
font-weight:bold;
}
.kt {
color:#902000;
}
.m {
color:#208050;
}
.s {
color:#4070A0;
}
.na {
color:#4070A0;
}
.nb {
color:#007020;
}
.nc {
color:#0E84B5;
font-weight:bold;
}
.no {
color:#60ADD5;
}
.nd {
color:#555555;
font-weight:bold;
}
.ni {
color:#D55537;
font-weight:bold;
}
.ne {
color:#007020;
}
.nf {
color:#06287E;
}
.nl {
color:#002070;
font-weight:bold;
}
.nn {
color:#0E84B5;
font-weight:bold;
}
.nt {
color:#062873;
font-weight:bold;
}
.nv {
color:#BB60D5;
}
.ow {
color:#007020;
font-weight:bold;
}
.w {
color:#BBBBBB;
}
.mf {
color:#208050;
}
.mh {
color:#208050;
}
.mi {
color:#208050;
}
.mo {
color:#208050;
}
.sb {
color:#4070A0;
}
.sc {
color:#4070A0;
}
.sd {
color:#4070A0;
font-style:italic;
}
.s2 {
color:#4070A0;
}
.se {
color:#4070A0;
font-weight:bold;
}
.sh {
color:#4070A0;
}
.si {
color:#70A0D0;
font-style:italic;
}
.sx {
color:#C65D09;
}
.sr {
color:#235388;
}
.s1 {
color:#4070A0;
}
.ss {
color:#517918;
}
.bp {
color:#007020;
}
.vc {
color:#BB60D5;
}
.vg {
color:#BB60D5;
}
.vi {
color:#BB60D5;
}
.il {
color:#208050;
}

View file

@ -0,0 +1,3 @@
.caps {font-size:.92em;}
.amp {color:#666; font-size:1.05em;font-family:"Warnock Pro", "Goudy Old Style","Palatino","Book Antiqua",serif; font-style:italic;}
.dquo {margin-left:-.38em;}

View file

@ -0,0 +1,30 @@
{% extends "base.html" %}
{% block title %}{{ article.title }}{% endblock title %}
{% block content %}
<h1>{{ article.title }}</h1>
<p class="date">{% if article.lang == "fr" %}Publié le{% else %}Published
on{% endif%} {{ article.locale_date }}.
{% if article.translations %}
{% if article.lang == "fr" %}Vous pouvez aussi lire cet article en {% else %}You can also read this article in {% endif %}
{% for tr in article.translations %}
<a href="{{ SITEURL }}/{{ tr.url}}">{{ tr.lang }}</a>
{% endfor %}
{% endif %}
</p>
{{ article.content }}
{% if DISQUS_SITENAME %}
<div class="comments">
<h2>Comments</h2>
<div id="disqus_thread"></div>
<script type="text/javascript">
var disqus_identifier = "{{ article.url }}";
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'http://{{ DISQUS_SITENAME }}.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
</div>
{% endif %}
{% endblock %}

12
light/templates/base.html Normal file
View file

@ -0,0 +1,12 @@
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="{{ SITEURL }}/theme/css/{{ CSS_FILE }}" type="text/css" media="screen" charset="utf-8">
<link href="{{ SITEURL }}/{{ FEED }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} ATOM Feed" />
<title>Alexis Métaireau</title>
</head>
<body>
<div class="content clear">{% block content %}{% endblock %}</div>
</body>
</html>

View file

@ -0,0 +1,23 @@
{% extends "base.html" %}
{% block content %}
<p>Hi and welcome in this web logs. I try here to talk about freedom, free
software, activism and education. And about anything I think would be
valuable to share.</p>
<p>Bienvenue sur ces carnets. J'essaye de parler ici de liberté,
de logiciel libre d'activisme et d'éducation. Et finalement d'un peu tout
ce qui me passe par la tête et que j'ai envie de partager.</p>
{% for article in articles %}
<h2><a href="{{ SITEURL }}/{{ article.url }}">{{ article.title }} ({{article.lang}})</a>
{% if article.translations %}
<small>(also in {% for article in article.translations %}<a href="{{ SITEURL }}/{{ article.url }}">{{ article.lang }}</a>{% endfor %})</small>
{% endif %}
<span class="date">{{ article.date.strftime('%B %Y')}}</span>
</h2>
{% if article.description %}
<p class="description">{{ article.description }}</p>
{% endif %}
{% endfor %}
{% endblock %}

View file

@ -3,8 +3,8 @@ PATH = "content"
AUTHOR = u'Alexis Métaireau' AUTHOR = u'Alexis Métaireau'
SITENAME = u"Alexis' log" SITENAME = u"Alexis' log"
THEME = "theme" THEME = "theme"
CSS_FILE = "wide.css"
DISQUS_SITENAME = "blog-notmyidea"
SITEURL = 'http://blog.notmyidea.org' SITEURL = 'http://blog.notmyidea.org'
GITHUB_URL = "http://github.com/ametaireau/" GITHUB_URL = "http://github.com/ametaireau/"

View file

@ -1,105 +1,430 @@
@import url(http://fonts.googleapis.com/css?family=Rosario); /*
Name: Smashing HTML5
Date: July 2009
Description: Sample layout for HTML5 and CSS3 goodness.
Version: 1.0
Author: Enrique Ramírez
Autor URI: http://enrique-ramirez.com
*/
/* Imports */
@import url("reset.css");
@import url("pygment.css"); @import url("pygment.css");
@import url("typogrify.css"); @import url("typogrify.css");
@import url(http://fonts.googleapis.com/css?family=Yanone+Kaffeesatz&subset=latin);
body { /***** Global *****/
width: 800px; /* Body */
margin: auto; body {
font-size: 1.3em; background: #F5F4EF;
background-color: #fffff0; color: #000305;
font-family: "Georgia", serif; font-size: 87.5%; /* Base font size: 14px */
font-family: 'Trebuchet MS', Trebuchet, 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', Arial, sans-serif;
line-height: 1.429;
margin: 0;
padding: 0;
text-align: left;
} }
a{ /* Headings */
color: #000; h1 {font-size: 2em }
h2 {font-size: 1.571em} /* 22px */
h3 {font-size: 1.429em} /* 20px */
h4 {font-size: 1.286em} /* 18px */
h5 {font-size: 1.143em} /* 16px */
h6 {font-size: 1em} /* 14px */
h1, h2, h3, h4, h5, h6 {
font-weight: 400;
line-height: 1.1;
margin-bottom: .8em;
font-family: 'Yanone Kaffeesatz', arial, serif;
} }
nav ul { h3, h4, h5, h6 { margin-top: .8em; }
list-style-type: none;
hr { border: 2px solid #EEEEEE; }
/* Anchors */
a {outline: 0;}
a img {border: 0px; text-decoration: none;}
a:link, a:visited {
color: #C74350;
padding: 0 1px;
text-decoration: underline;
}
a:hover, a:active {
background-color: #C74350;
color: #fff;
text-decoration: none;
text-shadow: 1px 1px 1px #333;
} }
nav ul li { h1 a:hover {
float: right; background-color: inherit
margin-left: 10px; }
/* Paragraphs */
p {margin-bottom: 1.143em;}
strong, b {font-weight: bold;}
em, i {font-style: italic;}
::-moz-selection {background: #F6CF74; color: #fff;}
::selection {background: #F6CF74; color: #fff;}
/* Lists */
ul {
list-style: outside disc;
margin: 1em 0 1.5em 1.5em;
} }
#top {} ol {
#top .author { list-style: outside decimal;
float: left; margin: 1em 0 1.5em 1.5em;
}
#top .links {
float: right;
list-style-type: none;
}
#top .links, #top .links li{
display: inline;
}
#top .links li{
margin-left: 10px;
}
.content {
clear: both;
} }
.content h1, h2, h3, h4, h5, h6{
font-family: 'Rosario', arial, serif;
margin-left: -20px;
}
.content h1{ .post-info {
font-size: 2.5em; float:right;
} margin:10px;
padding:5px;
}
.content p{ .post-info p{
font-size: 1.1em; margin-bottom: 1px;
text-align: justify; }
text-justify: newspaper;
}
.content .date{ .readmore { float: right }
margin-top: -20px;
font-style: italic;
}
.content h2{ dl {margin: 0 0 1.5em 0;}
font-size: 1.5em; dt {font-weight: bold;}
} dd {margin-left: 1.5em;}
.content a{ pre{background-color: #000; padding: 10px; color: #fff; margin: 10px; overflow: auto;}
padding: 2px;
color: #0F0F0F;
}
.content a:hover{ /* Quotes */
background-color: #0F0F0F; blockquote {
color: #eaeaea; margin: 20px;
}
.content .highlight pre{
padding: 15px;
background-color: black;
color: white;
overflow: scroll;
}
.content blockquote {
margin: 0px;
margin-right: 40px;
margin-left: 20px;
padding-left: 20px;
text-align: left;
border-left: 3px black solid;
letter-spacing: 2px;
font-style: italic;
text-align: justify;
}
.description {
margin-top: -15px;
font-style: italic; font-style: italic;
} }
cite {}
q {}
div.note {
float: right;
margin: 5px;
font-size: 85%;
max-width: 300px;
}
/* Tables */
table {margin: .5em auto 1.5em auto; width: 98%;}
/* Thead */
thead th {padding: .5em .4em; text-align: left;}
thead td {}
/* Tbody */
tbody td {padding: .5em .4em;}
tbody th {}
tbody .alt td {}
tbody .alt th {}
/* Tfoot */
tfoot th {}
tfoot td {}
/* HTML5 tags */
header, section, footer,
aside, nav, article, figure {
display: block;
}
/***** Layout *****/
.body {clear: both; margin: 0 auto; width: 800px;}
img.right figure.right {float: right; margin: 0 0 2em 2em;}
img.left, figure.left {float: right; margin: 0 0 2em 2em;}
/*
Header
*****************/
#banner {
margin: 0 auto;
padding: 2.5em 0 0 0;
}
/* Banner */
#banner h1 {font-size: 3.571em; line-height: 0;}
#banner h1 a:link, #banner h1 a:visited {
color: #000305;
display: block;
font-weight: bold;
margin: 0 0 .6em .2em;
text-decoration: none;
width: 427px;
}
#banner h1 a:hover, #banner h1 a:active {
background: none;
color: #C74350;
text-shadow: none;
}
#banner h1 strong {font-size: 0.36em; font-weight: normal;}
/* Main Nav */
#banner nav {
background: #000305;
font-size: 1.143em;
height: 40px;
line-height: 30px;
margin: 0 auto 2em auto;
padding: 0;
text-align: center;
width: 800px;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
#banner nav ul {list-style: none; margin: 0 auto; width: 800px;}
#banner nav li {float: left; display: inline; margin: 0;}
#banner nav a:link, #banner nav a:visited {
color: #fff;
display: inline-block;
height: 30px;
padding: 5px 1.5em;
text-decoration: none;
}
#banner nav a:hover, #banner nav a:active,
#banner nav .active a:link, #banner nav .active a:visited {
background: #C74451;
color: #fff;
text-shadow: none !important;
}
#banner nav li:first-child a {
border-top-left-radius: 5px;
-moz-border-radius-topleft: 5px;
-webkit-border-top-left-radius: 5px;
border-bottom-left-radius: 5px;
-moz-border-radius-bottomleft: 5px;
-webkit-border-bottom-left-radius: 5px;
}
/*
Featured
*****************/
#featured {
background: #fff;
margin-bottom: 2em;
overflow: hidden;
padding: 20px;
width: 760px;
border-radius: 10px;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
}
#featured figure {
border: 2px solid #eee;
float: right;
margin: 0.786em 2em 0 5em;
width: 248px;
}
#featured figure img {display: block; float: right;}
#featured h2 {color: #C74451; font-size: 1.714em; margin-bottom: 0.333em;}
#featured h3 {font-size: 1.429em; margin-bottom: .5em;}
#featured h3 a:link, #featured h3 a:visited {color: #000305; text-decoration: none;}
#featured h3 a:hover, #featured h3 a:active {color: #fff;}
/*
Body
*****************/
#content {
background: #fff;
margin-bottom: 2em;
overflow: hidden;
padding: 20px 20px;
width: 760px;
border-radius: 10px;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
}
/*
Extras
*****************/
#extras {margin: 0 auto 3em auto; overflow: hidden;}
#extras ul {list-style: none; margin: 0;}
#extras li {border-bottom: 1px solid #fff;}
#extras h2 {
color: #C74350;
font-size: 1.429em;
margin-bottom: .25em;
padding: 0 3px;
}
#extras a:link, #extras a:visited {
color: #444;
display: block;
border-bottom: 1px solid #F4E3E3;
text-decoration: none;
padding: .3em .25em;
}
#extras a:hover, #extras a:active {color: #fff;}
/* Blogroll */
#extras .blogroll {
float: left;
width: 615px;
}
#extras .blogroll li {float: left; margin: 0 20px 0 0; width: 185px;}
/* Social */
#extras .social {
float: right;
width: 175px;
}
#extras div[class='social'] a {
background-repeat: no-repeat;
background-position: 3px 6px;
padding-left: 25px;
}
/* Icons */
.social a[href*='delicious.com'] {background-image: url('../images/icons/delicious.png');}
.social a[href*='digg.com'] {background-image: url('../images/icons/digg.png');}
.social a[href*='facebook.com'] {background-image: url('../images/icons/facebook.png');}
.social a[href*='last.fm'], .social a[href*='lastfm.'] {background-image: url('../images/icons/lastfm.png');}
.social a[type$='atom+xml'], .social a[type$='rss+xml'] {background-image: url('../images/icons/rss.png');}
.social a[href*='twitter.com'] {background-image: url('../images/icons/twitter.png');}
.social a[href*='linkedin.com'] {background-image: url('../images/icons/linkedin.png');}
/*
About
*****************/
#about {
background: #fff;
font-style: normal;
margin-bottom: 2em;
overflow: hidden;
padding: 20px;
text-align: left;
width: 760px;
border-radius: 10px;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
}
#about .primary {float: left; width: 165px;}
#about .primary strong {color: #C64350; display: block; font-size: 1.286em;}
#about .photo {float: left; margin: 5px 20px;}
#about .url:link, #about .url:visited {text-decoration: none;}
#about .bio {float: right; width: 500px;}
/*
Footer
*****************/
#contentinfo {padding-bottom: 2em; text-align: right;}
/***** Sections *****/
/* Blog */
.hentry {
display: block;
clear: both;
border-bottom: 1px solid #eee;
padding: 1.5em 0;
}
li:last-child .hentry, #content > .hentry {border: 0; margin: 0;}
#content > .hentry {padding: 1em 0;}
.hentry img{display : none ;}
.entry-title {font-size: 3em; margin-bottom: 10px; margin-top: 0;}
.entry-title a:link, .entry-title a:visited {text-decoration: none; color: #333;}
.entry-title a:visited {background-color: #fff;}
.hentry .post-info * {font-style: normal;}
/* Content */
.hentry footer {margin-bottom: 2em;}
.hentry footer address {display: inline;}
#posts-list footer address {display: block;}
/* Blog Index */
#posts-list {list-style: none; margin: 0;}
#posts-list .hentry {padding-left: 10px; position: relative;}
#posts-list footer {
left: 10px;
position: relative;
float: left;
top: 0.5em;
width: 190px;
}
/* About the Author */
#about-author {
background: #f9f9f9;
clear: both;
font-style: normal;
margin: 2em 0;
padding: 10px 20px 15px 20px;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
#about-author strong {
color: #C64350;
clear: both;
display: block;
font-size: 1.429em;
}
#about-author .photo {border: 1px solid #ddd; float: left; margin: 5px 1em 0 0;}
/* Comments */
#comments-list {list-style: none; margin: 0 1em;}
#comments-list blockquote {
background: #f8f8f8;
clear: both;
font-style: normal;
margin: 0;
padding: 15px 20px;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
#comments-list footer {color: #888; padding: .5em 1em 0 0; text-align: right;}
#comments-list li:nth-child(2n) blockquote {background: #F5f5f5;}
/* Add a Comment */
#add-comment label {clear: left; float: left; text-align: left; width: 150px;}
#add-comment input[type='text'],
#add-comment input[type='email'],
#add-comment input[type='url'] {float: left; width: 200px;}
#add-comment textarea {float: left; height: 150px; width: 495px;}
#add-comment p.req {clear: both; margin: 0 .5em 1em 0; text-align: right;}
#add-comment input[type='submit'] {float: right; margin: 0 .5em;}
#add-comment * {margin-bottom: .5em;}

View file

@ -0,0 +1,52 @@
/*
Name: Reset Stylesheet
Description: Resets browser's default CSS
Author: Eric Meyer
Author URI: http://meyerweb.com/eric/tools/css/reset/
*/
/* v1.0 | 20080212 */
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
background: transparent;
border: 0;
font-size: 100%;
margin: 0;
outline: 0;
padding: 0;
vertical-align: baseline;
}
body {line-height: 1;}
ol, ul {list-style: none;}
blockquote, q {quotes: none;}
blockquote:before, blockquote:after,
q:before, q:after {
content: '';
content: none;
}
/* remember to define focus styles! */
:focus {
outline: 0;
}
/* remember to highlight inserts somehow! */
ins {text-decoration: none;}
del {text-decoration: line-through;}
/* tables still need 'cellspacing="0"' in the markup */
table {
border-collapse: collapse;
border-spacing: 0;
}

49
theme/static/css/wide.css Normal file
View file

@ -0,0 +1,49 @@
@import url("main.css");
body {
font:1.3em/1.3 "Hoefler Text","Georgia",Georgia,serif,sans-serif;
}
.published{
float: right;
margin-bottom: 10px;
}
#banner nav {
display: none;
-moz-border-radius: 0px;
margin-bottom: 20px;
overflow: hidden;
font-size: 1em;
background: #F5F4EF;
}
#banner nav ul{
padding-right: 50px;
}
#banner nav li{
float: right;
color: #000;
}
#banner nav li a {
color: #000;
}
#banner h1 {
margin-bottom: -18px;
}
#featured, #extras {
padding: 50px;
}
#featured {
padding-top: 20px;
}
#extras {
padding-top: 0px;
padding-bottom: 0px;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 963 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 980 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 896 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 835 B

View 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 %}

View file

@ -0,0 +1,13 @@
{% extends "base.html" %}
{% block content %}
<section id="content" class="body">
<h1>Archives for {{ SITENAME }}</h1>
<dl>
{% for article in dates %}
<dt>{{ article.locale_date }}</dt>
<dd><a href="{{ article.url }}">{{ article.title }}</a></dd>
{% endfor %}
</dl>
</section>
{% endblock %}

View file

@ -1,29 +1,39 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block content %} {% block title %}{{ article.title }}{% endblock %}
<h1>{{ article.title }}</h1> {% block content %}
<p class="date">{% if article.lang == "fr" %}Publié le{% else %}Published <section id="content" class="body">
on{% endif%} {{ article.locale_date }}. <article>
{% if article.translations %} <header> <h1 class="entry-title"><a href="{{ pagename }}" rel="bookmark" title="Permalink to {{ article.title }}">
{% if article.lang == "fr" %}Vous pouvez aussi lire cet article en {% else %}You can also read this article in {% endif %} {{ article.title }}</a></h1> {% include 'twitter.html' %} </header>
{% for tr in article.translations %} <div class="entry-content">
<a href="{{ SITEURL }}/{{ tr.url}}">{{ tr.lang }}</a>
{% endfor %}
{% endif %}
</p>
{{ article.content }}
{% if DISQUS_SITENAME %} <abbr class="published" title="{{ article.date.isoformat() }}">
<div class="comments"> {{ article.locale_date }}
<h2>Comments</h2> </abbr>
<div id="disqus_thread"></div> {{ article.content }}
<script type="text/javascript">
var disqus_identifier = "{{ article.url }}"; <div class="info">
(function() { <p>Published in <a href="{{ SITEURL }}/{{ article.category.url
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; }}">{{ article.category }}</a>. {% if PDF_PROCESSOR %}<a
dsq.src = 'http://{{ DISQUS_SITENAME }}.disqus.com/embed.js'; href="{{ SITEURL }}/pdf/{{ article.slug }}.pdf">get the
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); pdf</a>{% endif %}{% include 'taglist.html' %}</p>
})(); </div>
</script> </div><!-- /.entry-content -->
</div> {% if DISQUS_SITENAME %}
{% endif %} <div class="comments">
<h2>Comments !</h2>
<div id="disqus_thread"></div>
<script type="text/javascript">
var disqus_identifier = "{{ article.url }}";
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'http://{{ DISQUS_SITENAME }}.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
</div>
{% endif %}
</article>
</section>
{% endblock %} {% endblock %}

View file

@ -0,0 +1,14 @@
<footer class="post-info">
<abbr class="published" title="{{ article.date.isoformat() }}">
{{ article.locale_date }}
</abbr>
{% if article.author %}
<address class="vcard author">
By <a class="url fn" href="{{ SITEURL }}/{{ article.author.url }}">{{ article.author }}</a>
</address>
{% endif %}
<p>In <a href="{{ SITEURL }}/{{ article.category.url }}">{{ article.category }}</a>. {% if PDF_PROCESSOR %}<a href="{{ SITEURL }}/pdf/{{ article.slug }}.pdf">get the pdf</a>{% endif %}</p>
{% include 'taglist.html' %}
{% include 'translations.html' %}
</footer><!-- /.post-info -->

View file

@ -0,0 +1,2 @@
{% extends "index.html" %}
{% block title %}{{ SITENAME }} - {{ author }}{% endblock %}

View file

View file

@ -1,16 +1,48 @@
<!DOCTYPE HTML> <!DOCTYPE html>
<html> <html lang="en">
<head> <head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>{% block title %}{{ SITENAME }}{%endblock%}</title>
<link rel="stylesheet" href="{{ SITEURL }}/theme/css/{{ CSS_FILE }}" type="text/css" media="screen" charset="utf-8"> <meta charset="utf-8" />
<link href="{{ SITEURL }}/{{ FEED }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} ATOM Feed" /> <link rel="stylesheet" href="{{ SITEURL }}/theme/css/{{ CSS_FILE }}" type="text/css" />
<title>Alexis Métaireau</title> <link href="{{ FEED_DOMAIN }}/{{ FEED }}" type="application/atom+xml" rel="alternate" title="{{ SITENAME }} Atom Feed" />
{% if FEED_RSS %}
<link href="{{ FEED_DOMAIN }}/{{ FEED_RSS }}" type="application/rss+xml" rel="alternate" title="{{ SITENAME }} RSS Feed" />
{% endif %}
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
<!--[if lte IE 7]>
<link rel="stylesheet" type="text/css" media="all" href="{{ SITEURL }}/css/ie.css"/>
<script src="{{ SITEURL }}/js/IE8.js" type="text/javascript"></script><![endif]-->
<!--[if lt IE 7]>
<link rel="stylesheet" type="text/css" media="all" href="{{ SITEURL }}/css/ie6.css"/><![endif]-->
</head> </head>
<body>
<div id="top"> <body id="index" class="home">
<p class="author"><a href="http://notmyidea.org">{{ AUTHOR }}</a>'s thoughts</p> {% include 'github.html' %}
<ul class="links">{% block links %}{% endblock %}</ul> <header id="banner" class="body">
</div> <h1><a href="{{ SITEURL }}">{{ SITENAME }} {% if SITESUBTITLE %} <strong>{{ SITESUBTITLE }}</strong>{% endif %}</a></h1>
<div class="content clear">{% block content %}{% endblock %}</div> <nav><ul>
{% for title, link in MENUITEMS %}
<li><a href="{{ link }}">{{ title }}</a></li>
{% endfor %}
{% if DISPLAY_PAGES_ON_MENU %}
{% for page in PAGES %}
<li><a href="{{ SITEURL }}/{{ page.url }}">{{ page.title }}</a></li>
{% endfor %}
{% endif %}
{% for cat, null in categories %}
<li {% if cat == category %}class="active"{% endif %}><a href="{{ SITEURL }}/{{ cat.url }}">{{ cat }}</a></li>
{% endfor %}
</ul></nav>
</header><!-- /#banner -->
{% block content %}
{% endblock %}
{% include 'analytics.html' %}
{% include 'disqus_script.html' %}
</body> </body>
</html> </html>

View file

@ -0,0 +1,8 @@
{% extends "base.html" %}
{% block content %}
<ul>
{% for category, articles in categories %}
<li><a href="{{ category.url }}">{{ category }}</a></li>
{% endfor %}
</ul>
{% endblock %}

View file

@ -0,0 +1,2 @@
{% extends "index.html" %}
{% block title %}{{ SITENAME }} - {{ category }}{% endblock %}

View file

@ -0,0 +1 @@
{% if DISQUS_SITENAME %}<p>There are <a href="{{ SITEURL }}/{{ article.url }}#disqus_thread">comments</a>.</p>{% endif %}

View 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 = 'http://' + disqus_shortname + '.disqus.com/count.js';
(document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
}());
</script>
{% endif %}

View 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 %}

View file

@ -1,19 +1,35 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block content %} {% block content_title %}{% endblock %}
{% block content %}
{% if articles %}
{% for article in articles_page.object_list %}
<p>Hey, I'm Alexis and this is my blog. I try to talk about freedom, free {% if loop.first and articles_page.has_previous %}
software and activism. I'm currently spending my days in Paris, doing <section id="content" class="body">
python at mozilla, on the services team.</p> <ol id="posts-list" class="hfeed" start="{{ articles_paginator.per_page -1 }}">
{% for article in articles %}
<h2><a href="{{ SITEURL }}/{{ article.url }}">{{ article.title }}</a>
{% if article.translations %}
<small>(also in {% for article in article.translations %}<a href="{{ SITEURL }}/{{ article.url }}">{{ article.lang }}</a>{% endfor %})</small>
{% endif %} {% endif %}
</h2> <li><article class="hentry">
<p class="date">{{ article.locale_date }}</p> <h1><a href="{{ SITEURL }}/{{ article.url }}" rel="bookmark"
{% if article.description %} title="Permalink to {{ article.title}}">{{ article.title
<p class="description">{{ article.description }}</p> }}</a></h1> {{ article.locale_date }}, in <a href="{{ SITEURL }}/{{ article.category.url }}">{{ article.category }}</a>.
</div><!-- /.entry-content -->
</article></li>
{% if loop.last and (articles_page.has_previous()
or not articles_page.has_previous() and loop.length > 1) %}
{% include 'pagination.html' %}
{% endif %}
{% if loop.last %}
</ol><!-- /#posts-list -->
</section><!-- /#content -->
{% endif %} {% endif %}
{% endfor %} {% endfor %}
{% endblock %} {% else %}
<section id="content" class="body">
<h2>Pages</h2>
{% for page in PAGES %}
<li><a href="{{ SITEURL }}/{{ page.url }}">{{ page.title }}</a></li>
{% endfor %}
</section>
{% endif %}
{% endblock content %}

10
theme/templates/page.html Normal file
View file

@ -0,0 +1,10 @@
{% extends "base.html" %}
{% block title %}{{ page.title }}{% endblock %}
{% block content %}
<section id="content" class="body">
<h1 class="entry-title">{{ page.title }}</h1>
{% if PDF_PROCESSOR %}<a href="{{ SITEURL }}/pdf/{{ page.slug }}.pdf">get
the pdf</a>{% endif %}
{{ page.content }}
</section>
{% endblock %}

View 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">&laquo;</a>
{% else %}
<a href="{{ SITEURL }}/{{ page_name }}{{ articles_page.previous_page_number() }}.html">&laquo;</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">&raquo;</a>
{% endif %}
</p>
{% endif %}

View 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 %}

2
theme/templates/tag.html Normal file
View file

@ -0,0 +1,2 @@
{% extends "index.html" %}
{% block title %}{{ SITENAME }} - {{ tag }}{% endblock %}

View file

@ -0,0 +1,2 @@
{% if article.tags %}tags: {% for tag in article.tags %}<a href="{{ SITEURL
}}/{{ tag.url }}">{{ tag }}</a>&nbsp;{% endfor %}{% endif %}

View file

View file

@ -0,0 +1,6 @@
{% if article.translations %}
Translations:
{% for translation in article.translations %}
<a href="{{ SITEURL }}/{{ translation.url }}">{{ translation.lang }}</a>
{% endfor %}
{% endif %}

View 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 %}