Modifier la page d’erreur 404 sous WordPress

Publié dans Wordpress | Laisser un commentaire

Je suis très fier de la page 404 de ce blog : page 404 ! Mais j’ai eu un petit peu de mal à la faire fonctionner partout, ce qui est un comble pour une page d’erreur 😉 L’astuce, c’est qu’il faut modifier 2 fichiers WordPress pour que cela fonctionne partout ! Et qu’il faut préciser le chemin absolu vers une image et non un chemin relatif (puisqu’ils ne connaissent pas la balise « base » chez WordPress…).

  • Interface d’administration
  • Apparence > Editeur
  • Puis sélectionner la page 404.php (Modèle pour l’erreur 404)

Au début du fichier, vous trouverez quelque chose du style :
Continuer la lecture

Démarrer un projet Node.js

Publié dans Javascript | Laisser un commentaire

Je n’arrive pas à trouver un fichu « Hello World! » expliquant correctement comment créer une bonne base pour un projet Node.js ! Fichtre !
Ce que je déduis pour l’instant provient principalement de cet article Tutorial: RabbitMQ + Node.js et de ce que je commence à comprendre de cet environnement.

nodejs-logo
Continuer la lecture

Comment bien débuter avec Node.js

Publié dans Javascript | 2 commentaires

On entend parler de Node.js depuis maintenant quelques temps et même si je reste assez dubitatif à l’idée de mettre du Javascript côté serveur, j’ai plusieurs fois souhaité testé la bête. Aujourd’hui c’est chose faite puisque je suis censé produire quelque chose pour dans deux jours (enfin ça c’était il y deux jours) sur… Node.js !
En quelques bribes j’aimerai expliquer ma démarche de prise en main de Node.js. On verra plus tard si j’ai le temps d’approfondir ça dans d’autres billets.

Installation

Rendez-vous sur le site officiel de Node.js pour télécharger l’installateur. Au passage, on en profite pour mettre au chaud la documentation de l’API (un petit PDFCreator / Poche / Respawn du mode View on a single page fait bien l’affaire).
Vous pouvez désormais utiliser la ligne de commande node.
Continuer la lecture

Thunderbird, Minimize Tray – Bug à plusieurs fenêtres

Publié dans Geekeries | Laisser un commentaire

Ah. Bon. Un petit bug peut apparaître dans Thunderbird avec l’extension « Minimize Tray Revived ». Deux fenêtres de Thunderbird (ou plus) s’ouvrent au démarrage au lieu d’une seule, et il est impossible de fermer l’une des deux sans fermer l’autre…

La solution ? Désactiver temporairement « Minize Tray », relancer Thunderbird, fermer les fenêtres indésirables, réactiver « Minimize Tray », et redémarrer Thunderbird. That’s it!

PHP diff et merge

Publié dans PHP | Un commentaire

Une question que je me pose en ce moment… Comment, en PHP, comparer deux version d’un même texte et n’en faire plus qu’une contenant les différentes modifications. En gros: difference + merge. C’est ce qui est utilisé couramment dans les systèmes de Wiki (dont Wikipédia) et je vois quelques applications à cela qui pourraient être très sympathiques.
Après une petite recherche, voilà ce que je retiens de ce qui existe.

PHPDiff

Le projet PHPDiff est géré par Chris Boulton, sous licence BSD et accessible via Github: PHPDiff sur Github.
Ce projet m’intéresse particulièrement car un certain Xiphe a créé une interface Web dynamique (bref, en Javascript) pour choisir comment merger deux textes. Ce qui peut s’avérer utile en cas de conflit. C’est accessible en licence GPL sous Github: jQuery Merge for PHP Diff sur Github. La démo est vraiment bluffante : Démo jQuery Merge.
Continuer la lecture

Cygwin, SSH Agent et un peu de Git

Publié dans Geekeries | Laisser un commentaire

Cet article est une traduction (assez libre et agrémentée) de SSH Agent on Cygwin via kill the radio. Une autre resource pas mal sur le même sujet est disponible sur : Problem with ssh-add / ssh-agent under cygwin.

Il existe sûrement des dizaines de tutoriels sur l’art et la manière de démarrer un SSH Agent sur Cygwin, mais voilà qui peut toujours service !
Si jamais l’erreur suivante apparaît lorsque vous utiliser la commande ssh-add :

Could not open a connection to your authentication agent.

Cela signifie que vous n’avez pas de gestionnaire de clés SSH de démarré. Visiblement, il ne sert à rien de lancer le Pageant de Putty, il va donc falloir gérer tout ça directement dans Cygwin.
Continuer la lecture

Quelques modifications sur Leed

Publié dans Geekeries | Laisser un commentaire

On ne présente plus Leed ! L’agrégateur de flux RSS par Idleman dont on parle beaucoup en ce moment (avec d’autres) suite à l’annonce de la fin de Google Reader pour Juillet 2013. Même Tristan Nitot (de Mozilla) en fait la promotion, c’est pour dire 😉
Bref, en trois mots : j’ai quitté Google Reader il y a bien longtemps, et j’ai installé RSSLounge sur mon hébergement perso. Depuis le début de l’année, je suis passé à Leed et j’en suis ravi ! C’est plus propre, plus rapide et plus léger pour mon serveur. A posteriori, ce qui me plait peut-être le plus, c’est que le code soit bien fichu et pas outrement compliqué. Du coup, je peux adapter facilement ce lecteur de flux RSS à mes besoins !
J’ai transmis mes quelques adaptations ci-dessous (plier / déplier un article, bookmarklet amélioré) à Idleman (si besoin), qui très sympathiquement m’a expliqué qu’elles étaient déjà dans la to do list (sauf la deuxième, je crois ?). Cool ! En attendant, si besoin…
Continuer la lecture

Qt et l’héritage de QObjects

Publié dans C / C++ | Laisser un commentaire

Le modèle objet de Qt est basé sur les QObject, qui offrent notamment le système très utile de communication inter-classes via signal / slot. Gérer l’héritage avec cette architecture peut-être de prime-abord légèrement tricky ! J’ai notamment eu quelques soucis de connexion signal / slot avec des classes héritant d’une interface (classe virtual pure).

Mon architecture

Une interface IMyClass et deux classes l’implémentant MyClass et MyClassSimulation. J’ai en prime un patron « factory » pour faciliter l’instanciation de ces classes (et pour avoir plus de souplesse dans l’avenir) : MyClassFactory.

C++ inheritance and factory

C++ inheritance and factory pattern

Je connecte alors la méthode « slot » de mon instance de IMyClass (qui est soit MyClass, soit MyClassSimulation en ait) :

connect(otherClass, SIGNAL(aSuperSignal()), myClassInstance, SLOT(myGreatMethod());

L’erreur typique

QObject::connect: Cannot connect OtherClass::aSuperSignal() to (null)::myGreatMethod()

Continuer la lecture

Question2Answer – FAQ StackOverflow Like

Publié dans Geekeries | 2 commentaires

Ok, donc Question2Answer est définitivement un super système de FAQ en PHP ! Un Stack Overflow Q&A like si vous préférez. Je le trouve plus adapté à mes besoins que Coordino présenté récemment par Idleman. Au programme :

  • très simple à installer,
  • sous licence GPL,
  • Apache, Mysql 4, PHP 4.3+,
  • très paramétrables, notamment au niveau des droits d’accès (ce qui faisait parti de mes exigences),
  • plusieurs « add-on » sont disponibles, ce qui implique qu’il doit être possible d’en créer facilement,
  • la communauté a l’air active,
  • en prime, c’est un entrepreneur, Gideon Greenspan qui est derrière, je ne sais pas quel est son business model, mais cela assure une certaine pérennité.

Question2Answer

Bref, même pas besoin de détailler le fonctionnement, cette application Web de FAQ s’utilise très facilement !
Je n’ai essayé qu’en local, il faudra que je vois sur mon serveur ce que ça donne niveau consommation mémoire.

Faire un screenshot en C++ avec Qt

Publié dans C / C++ | Un commentaire

Faire un screenshot (imprim écran) en C++ à l’aide du framework Qt est étonnamment trivial. Il est très facile de « prendre en photo » tout votre écran, ou seulement une fenêtre (en connaissant son Window Id) à l’aide de la méthode grabWindow de la classe QPixmap. Un petit exemple simple pour l’écran entier (Window Id : QApplication::desktop()->winId()) que l’on enregistre dans le dossier courant en PNG.

// - Shoot the screen
QPixmap pixmap = QPixmap();
pixmap = QPixmap::grabWindow(QApplication::desktop()->winId());

// - Save this picture
QString format = "png";
QString filePath = QDir::currentPath()+"/myscreen."+format;
pixmap.save(filePath, format.toAscii());

Continuer la lecture