19 oct. 2011

Les nouveautés du trimestre

Comme si j'ajoutais de nouvelles fonctionnalités à ce blog chaque trimestre... N'importe quoi, ce titre.

Quoi qu'il en soit, si vous fouillez un peu les pages ici ou là, vous allez trouver deux changements cosmétiques d'importance :

  • la possibilité d'imprimer les articles de ce blog au format PDF, grâce à une extension réalisée par JC Denis et basée sur le service gratuit offert par joliprint. Le PDF résultant est très agréable à regarder, et la bannière joliprint figurant sur chaque page est discrète au possible (plus, elle n'aurait pas été visible). Je suppute qu'avec un compte payant, je peux faire disparaître cette bannière et avoir un contrôle plus fin sur le rendu final. Mais bon, on ne vas quand même pas trop en demander !
  • grâce à Osku et son extension dcHighlight basée sur Highlight.js version 6.0, le code source est maintenant automatiquement détecté, et il est mis en couleur - pour faciliter votre lecture. Malheureusement, l'extension est basée sur une analyse à posteriori de la page (c'est à dire au moment de l'affichage), ce qui fait que l'impression ne sait pas prendre en compte cet type de transformation. Du coup, on ne peux pas avoir impression en PDF et code source mis en couleur en même temps. Malheureusement bis, un code complexe peut faire se tromper le parseur javascript qui fait l'auto-détection du langage.

Histoire de vous donner un exemple, voici un peu de code C++ qui fait tourner en bourique cette extension.

struct __Sfinae_base
{
    typedef char1 one;
    typedef char2 two;
};
template <class A, class B> struct inherit_from : __Sfinae_base { private: two check(...); one check(B*); public: static bool value = (sizeof(check((A*)0) == sizeof(one)); };

Le problème vient de la détection du mot-clef class dans les paramètres templates. Dans certains cas, on peut le remettre sur le droit chemin (par exemple ici, en utilisant typename au lieu de class dans la déclaration des paramètres templates).

template <typename A, typename B>
struct inherit_from : __Sfinae_base
{
private: 
   two check(...);
    one check(B*);
public:
    static bool value = (sizeof(check((A*)0) == sizeof(one));
};

Il y a en outre d'autres améliorations que vous ne verrez pas. En particulier, plusieurs plugins ont été désactivé - le résultat net est une légère (mais sensible) accélération du chargement des pages du blog. Il est tout à fait probable que d'autres extensions dotclear ralentissent encore cet affichage - auquel cas je vais prendre un malin plaisir à les désactiver.

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant une syntaxe wiki simplifiée.

Fil des commentaires de ce billet