Carte Magic perso : Buveuse d’âmes

Vu que je ne remettrai probablement pas l'Assemblée des Funomanciens en service (trop de boulot pour un site mort). Je vais reposter ici les cartes Magic perso que j'avais postées dessus, avec les commentaires d'origine.

On commence avec la première carte postée là bas (le 29/12/2010), même si ce n'est pas forcément la plus recherchée et originale.

Buveuse d'âmes
Buveuse d'âmes

Historiquement, il s'agit de ma seconde carte, mais je l'ai retouchée par la suite.

Je suis parti d'une illustration provenant encore une fois de Deviant Art : Warmt par Nillia (pas trouvé de vrai nom, donc je laisse le pseudo).

Je partais plus sur une ambiance et un style graphique particulier que sur une originalité forte dans la capacité, d'où cette capacité relativement classique mais qui colle bien à l'illustration : on a une sorte d'esprit qui s'approche d'un cadavre mais avec un visage que je trouve plus souriant que triste (contrairement au personnage qu'elle est censée représenter d'après ce que je comprends du commentaire de l'auteur - oui, mon anglais reste approximatif, donc potentiellement si ça se trouve j'ai compris de travers :we:). Donc partant de là une créature Esprit plutôt noir s'imposait, avec une capacité liée aux morts.

J'ai écrit le texte d'ambiance avant d'introduire la référence aux samouraïs et chevaliers, mais après coup ça s'imposait tout en rendant la capacité un poil moins classique ^^

Concernant la puissance, d'un côté ça me semble assez fort mais comme pour la booster il faut d'une part avoir des créatures dans un cimetière et d'autre part l'engager (ce qui empêche d'attaquer le même tour), ça me semble pas trop abusé... Cela dit, je reconnais qu'avec les cartes qui sortent actuellement, j'ai du mal à juger sur ce point, tant je trouve que la moitié des rares sont abusées par rapport à mes critères de joueur de Magic à ses début en France (j'ai arrêté à la sortie d'Odyssée pour ne reprendre vraiment qu'en fin d'année dernière et le moins qu'on puisse dire c'est que la puissance des cartes a un peu évolué entre temps !).

Ça c'est pour la capacité, maintenant passons à la réalisation : c'est toujours sous GIMP, avec le xcf de Sovelis (me semble bien que celui là il l'a fait directement).

GIMP que je maîtrise modérément (et d'autant plus modérément quand j'ai fait la première version de cette carte), donc l'idée était notamment de voir un peu ce qu'on pouvait faire avec des textures et les différent mode d'incrustation des calques... Je suis donc parti de deux autres illustration du même auteur : Prickly Plant et So happy to see you. Ainsi on reste dans le même style graphique que l'illustration, même si on s'éloigne un peu du style Magic classique.

Concernant le symbole d'extension, j'utilise toujours le même mais comme c'est la première carte que je poste ici, je vais l'expliciter un peu : lorsque j'ai fait ma première carte (déjà postée sur Magic Corporation avant le cataclysme et que je re-posterai ici quand je l'aurai un peu révisée) je cherchais un truc sympa qui pourrait me servir pour d'autres cartes (donc pas lié particulièrement à celle-ci), ne trouvant rien de bien convaincant, j'ai cherché du côté des alphabets fantaisistes un "D" (première lettre de mon pseudo) et c'est le Quenya, l'un des alphabets elfiques imaginés par Tolkien qui l'emporte avec un symbole plutôt sympa ^^ Là par contre, pour le symbole, j'ai lâché GIMP que je maitrise moyennement pour mon bon vieux Picture Publisher que je connais sur le bout des doigt, même s'il est moins puissant.

Voilà voilà, je pense que j'ai environ tout dit ^^


Filtrage par mot-clé sur Twitter et Mastodon

Avec le début de la coupe du monde de foot, forcément on se retrouve avec beaucoup de choses sans intérêt sur les réseaux sociaux. Je me disais déjà que le temps allait être long jusqu’à ce qu’elle se termine mais en fait il y a moyen de faire un peu de nettoyage pour rendre les choses vivables !

En effet, Mastodon et Twitter proposent maintenant (je ne saurais pas dire depuis quand), en natif un filtrage des messages, Twitter uniquement par mot-clé, Mastodon via une expression rationnelle.

Mastodon

Sur Mastodon, ça se trouve sur l’en-tête de la colonne principale, en cliquant sur le bouton “Afficher les paramètres” :

Filtre par expression rationnelle sur Mastodon

On peut donc saisir une expression rationnelle, ce qui est assez riche et permet d’englober facilement des variantes. C’est aussi assez rapide à saisir puisqu’il n’y a qu’un champ.

Merci à @Drulac@framapiaf.org d’avoir rappelé que cette fonctionnalité existe.

Twitter

Sur Twitter, ça se trouve dans les préférences et il s’agit d’un filtrage par mot-clé :

Filtre par expression rationnelle sur Mastodon

C’est plus facile à comprendre pour les non-informaticiens mais largement plus laborieux à saisir (un mot à la fois, donc beaucoup de clics). Seul point positif : on peut différencier le comportement d’un mot-clé à l’autre en spécifiant la durée du masquage (ça peut être bien notamment quand on masque un sigle qui peut avoir d’autres sens).

Filtre par expression rationnelle sur Mastodon

Merci à @alainmi11 pour son tweet salvateur.

Voilà qui devrait permettre de vivre plus sereinement cette période difficile ^^


Archives par année dans Jekyll

Je continue dans mon exploration du monde merveilleux de Jekyll (le générateur de site statique qui fait maintenant tourner ce blog), avec une autre fonctionnalité de WordPress que je voulais reproduire : les archives par année avec menu dans la sidebar.

Ça semble trivial comme mais non. Avec Jekyll RIEN (ou presque) n’est trivial. Je suis assez vite tombé sur le plugin jekyll-archives qui permet de générer les pages d’arichive (non-paginées mais tant pis). Je suis assez vite arrivé à un truc qui marche de ce côté-là, pas de problème majeur.

Par contre c’était un peu plus compliqué pour générer le menu.

En cherchant un peu, j’ai fini par tomber sur cet article qui décrit comment générer une sorte de plan du site par date, basé sur une itération sur l’ensemble des articles. J’ai pu en tirer (en simplifiant) ce qu’il me fallait pour mon menu, à une exception près : le décompte des articles (forcément il n’en avait pas besoin dans son cas).

Et là je me suis heurté à un truc : comment incrémenter une variable dans Liquid (le moteur de templates de Jekyll) ? Naïvement, j’ai tenté un simple {% assign postCount = postCount + 1 %} mais ce fut un échec cuisant. Je n’ai pas trouvé ce que fait un “+” dans ce cas mais clairement pas une addition (ma variable valait toujours 0 et en inversant les arguments j’avais toujours 1). J’ai donc :

  1. cherché comment incrémenter une variable : rien trouvé dans la doc, forcément on n’a que des exemple d’assignations avec une variable en dur
  2. cherché sur le net : je suis tombé sur cette doc qui parle d’un tag increment gérant des variables incrémentales indépendantes des autres variables (pourquoi indépendantes ? qu’est-ce que ça apporte ? mystère…) et semble-t-il non-réinitialisable, donc ça ne répond pas à ma question
  3. puis j’ai fini par tomber là dessus et là j’ai enfin trouvé : pour faire une addition il faut passer par le filtre plus

Donc voilà, j’ai ma solution pour générer mon menu :

<h2>Archives</h2>
<ul>
  {% assign postCount = 0 %}
  {% for post in site.posts %}
    {% assign year = post.date | date: '%Y' %}
    {% if post.previous %}{% assign nextYear = post.previous.date | date: '%Y' %}{% else %}{% assign nextYear = 0 %}{% endif %}
    {% assign postCount = postCount | plus: 1 %}
    {% if year != nextYear %}
      <li><a href="/archives/{{ year }}/">{{ year }}</a> ({{ postCount }})</li>
      {% assign postCount = 0 %}
    {% endif %}
  {% endfor %}
</ul>

C’est laborieux mais ça marche.

Reste juste un défaut : rien qu’avec ça je suis passé de 20 à 30 secondes pour régénérer mon site. C’est un peu chiant quand on veut contrôler que ce qu’on vient de faire marche (mais ça n’a aucun impact pour le visiteur puisque lui n’accède qu’à des pages statiques).

J’ai donc cherché comment on pouvait faire un peu de caching dans Jekyll. Forcément j’ai rien trouvé de natif mais je suis tombé rapidement sur le plugin jekyll-include-cache. Il ajoute une nouvelle instruction alternative à include et qui s’utilise exactement pareil mais n’effectue l’évaluation du contenu qu’une fois : include_cached. Du coup en utilisant ça pour mes header, footer et sidebar, j’ai pu redescendre à environ 17 seconde de temps de génération. Ça reste beaucoup mais c’est quand même moitié moins.

Par contre le cache en question n’est pas régénéré à chaque changement (y compris changement du template inclus) mais seulement à chaque fois que le serveur est relancé, ce qui veut dire relancer systématiquement le serveur avant de publier pour prendre en compte les mises à jour (dans mon cas nouvel article ou changement de catégorie). Du coup ça reste largement bancal comme solution, pas sûr que je garde ça sur le long terme.


Plugin de tri des catégories pour Jekyll

Comme je le disais la semaine dernière, il restait des ajustements à faire sur le blog. L’un d’entre eux était d’afficher un menu présentant notamment les catégories (et aussi les archives par années mais ça viendra plus tard).

J’ai pas mal galéré pour trouver comment faire (ça me semble être un truc assez basique mais ce n’est pas trop mis en évidence dans la doc). J’ai assez rapidement fini par trouver dans quelle variable chercher les catégories (il s’agit de site.categories) qui se trouvent sous la forme d’un tableau associatif où la clé est le nom de la catégorie et la valeur un tableau des articles.

Ce qui m’a pris beaucoup plus de temps c’est trouver comment récupérer la clé lors de l’itération. J’ai fini par trouver dans la doc de Liquid (le moteur de templates de Jekyll) : lorsqu’on itère sur un tel tableau chaque item qu’on reçoit contient un tableau à deux entrées : la clé en 0 et la valeur en 1 (pour le coup je préfère les syntaxes de Twig ou AngularJS qui sont plus claires). Pour afficher les catégories, j’en étais donc arrivé à :

<ul>
  {% for category in site.categories %}
    <li><a href="/categories/{{ category[0]|slugify:'latin' }}/">{{ category[0] }}</a> ({{ category[1].size }})</li>
  {% endfor %}
</ul>

Restait à les trier parce que j’en ai quand même beaucoup… Et là pour le coup je n’ai rien trouvé de natif. Je suis tombé sur plusieurs plugins. D’abord un premier qui avait l’air riche mais que je n’ai pas réussi à faire fonctionner… Puis un deuxième beaucoup plus simple mais pas complètement satisfaisant (notamment le tri ne mettait à la fin ma catégorie “À propos du blog” à cause de l’accent). Ne connaissant rien à Ruby, j’ai un peu tâtonné pour épurer le truc et corriger ce qui me gênait.

Le résultat est accessible ici : jekyll-hash-table-sort-filters

L’exemple de code précédent, après installation du plugin, devient le suivant :

<ul>
  {% assign categories = site.categories | sort_by_keys %}
  {% for category in categories %}
    <li><a href="/categories/{{ category[0]|slugify:'latin' }}/">{{ category[0] }}</a> ({{ category[1].size }})</li>
  {% endfor %}
</ul>

EDIT du 10/06/2018 à 11h10 : forcément y avait une erreur dans la version du plugin que j’ai publiée… et qui faisait tout planter. C’est corrigé : jekyll-hash-table-sort-filters.

Et comme tout est généré une fois pour toute, je n’ai vu le problème qu’à la génération suivante, donc aujourd’hui.


Retour du blog

Ça faisait déjà près d’un an et demi que ce blog était mort suite à un crash serveur. Je ne pouvais pas le remettre en fonction directement parce qu’il utilisait une vieille version de WordPress qui n’était pas compatible avec PHP7 et je n’avais pas envie de pourrir mon nouveau serveur avec un vieux PHP. Quant à la mise à jour de WordPress était dissuasive parce que j’avais de nombreuses versions de retard et que ça se serait forcément fait dans la douleur.

En parallèle j’avais vu passer plusieurs articles parlant de remplacer WordPress et autres moteurs dynamiques par un générateur de site statique. Cet aspect me tentait bien mais pas pour les raisons avancées habituellement, en particulier la principale : les perfs je m’en fiche un peu (mon serveur se tourne les pouces la plupart du temps et j’ai une audience limitée).

Non, ce qui m’intéressait c’était plutôt de supprimer la maintenance et le besoin de mise à jour, soit précisément ce qui m’a fait repousser la remise en ligne du blog (et ce qui me causait sans doute de grosses failles de sécurité sur le précédent serveur). En effet, dans ce cas le générateur n’est pas en ligne, je peux le garder tranquillement en local sur mon ordi perso.

Par contre, ça a plusieurs gros inconvénients qui m’ont retenu de sauter le pas plus tôt, en particulier deux :

  • Pas de système de commentaires. C’est embêtant parce qu’il est exclus que je délègue ça à un silo genre Discuss. Et si c’est pour remettre du JS et un système de web services ben on reperd direct l’intérêt principal de s’éviter la maintenance… Je n’ai pas de solution correcte pour l’instant donc il faudra s’en passer (genre en passant par Mastodon ou à défaut Twitter), jusqu’à ce que je trouve quelque chose de viable.
  • Pas de moteur de recherche. Moins gênant mais quand même déléguer à Google et autres la recherche interne du site ça me déplaît pas mal. Là non plus je n’ai pas de solution pour l’instant (j’ai trouvé un plugin qui permettrait de le faire mais en passant par une API tierce, donc bon, on n’y gagne pas grand-chose au final).

J’ai finalement décidé de sauter le pas parce que ça m’est arrivé quand même assez souvent de me dire que j’aurais bien fait un article sur un sujet mais qu’en l’absence de blog j’ai soit rien fait, soit résumé en quelques pouets et/ou tweets.

J’ai donc cherché un peu dans les outils existants. Forcément y en a des dizaines… Du coup faut choisir. Après avoir écarté tout ce qui est NodeJS et rien trouvé en PHP, je me suis rabattu sur Jekyll (en Ruby) qui a le mérite d’avoir un peu d’ancienneté et donc pas mal de plugins dispo et probablement une durée de vie pas trop basse.

Après avoir rencontré pas mal de problèmes tels que :

  • besoin de choisir un thème
  • besoin d’installer des plugins et configurer plein de choses (Jekyll de base est assez vide)… pour la liste des plugins, cf. la page à propos
  • du temps perdu à comprendre que si ma pagination était morte d’un coup c’était parce que j’avais reformaté le fichier (oui les pages contiennent des en-têtes en YAML qui a l’idée VRAIMENT débile de se baser sur l’indentation, donc un formatage et boum ça marche plus… et vas-y pour comprendre que ça vient de là !)
  • repasser sur tous les articles pour faire en sorte que ça se rende bien (un convertisseur depuis une base WordPress est dispo mais il ne convertit pas les balises spécifiques… et j’en avais pas mal pour du code ou de la mise en forme autour des images)

J’ai enfin quelque chose de fonctionnel \o/

J’en profite également pour basculer sur un autre domaine (en .net plutôt que .com).

Il reste à mettre en place les redirections pour ressusciter les anciennes URL des articles mais ça peut attendre, après un an et demi, on est plus à quelque semaines près… Et il risque d’y avoir encore quelques ajustements mais ça a déjà le mérite d’être fonctionnel ^^