Revamping the blog...in progress

- 2013-04-06

revamping the blog with Node.JS

From now on this blog will be held in english only. Despite I am not a native english speaker, I feel more easier writing in Shakespeare language. I writing this post to announce the upcoming blob revamp.

The blog is currently running WordPress with a full LAMP stack on one my own dedicated server. That totally an overkill setup. Moreover WordPress is fatnessing day after day. I only need to run a personal blog system, not a whole CMS engine.

My choice went to a light NodeJS based blog engine, that does only why I need. It is called Lectroid, it doesn’t require database, posts are stored in markdown.

I also decided to completely lighten the dev process and wanted to give PaaS a try. I played a couple of days with several ones and chose Pagodabox, which meets my needs. I will use Cloud9 IDE and Git for versioning and deploying to Pagodabox. I’ll keep you all updated.

L’import RSS natif d’eZ Publish avec support de la balise enclosure

- 2012-07-20

Le besoin

eZ publish offre la possibilité sans écrire une seule ligne de code, d’importer des contenus d’un flux RSS, sous forme de contenus eZpublish. Mais cette fonctionnalité native ne permet pas d’importer les média inclus dans la balise <enclosure>

Je vais donc vous montrer comme vous permettre de récupérer ce media (image ou autre fichier tel que pdf, doc ou flv) et de l’insérer de manière transparente dans vos contenus eZ Publish. Cette fonctionnalité est un peu codé en dur dans eZ Publish et n’est pas extensible proprement. Je vais vous la manière Quick and dirty pour arriver à vos fin. A vous ensuite de choisir si vous voulez passer du temp à faire cela proprement.

<enclosure url="http://www.example.com/images/voiture.jpg" length="" type="image/jpeg"/>

Implémentation quick and dirty

Voici les fichiers qui seront impacter par nos modifications. Ce sont des fichiers du noyau eZPublish

  • La fonction setObjectAttributeValue() dans le fichier cronjobs/rssimport.php (script php apellé par crond pour aller récupérer les nouveaux items des flux RSS configurés en Back Office)
  • La methode rssFieldDefinition() dans le fichier kernel/classes/ezrssimport.php

La fonction setObjectAttributeValue() permet de traiter la récupération des différents types d’attributs (ligne de texte, bloc xml), c’est donc ici que nous allons naturellement ajouter le traitement de notre attribut ezimage (cela fonctionne aussi avec ezfile). Nous allons rajouter le case ‘ezimage’

function setObjectAttributeValue( $objectAttribute, $value )
{
    //…
    switch( $dataType )
    {
        //…
        case ‘ezimage’:
        {
            $file = pathinfo($value);
            $image = eZHTTPTool::getDataByURL( $value );
            if($image !== false)
            {
                $fp = fopen(‘/tmp/’.$file[‘basename’],‘wb’);
                fwrite($fp, $image, strlen($image));
                fclose($fp);
                $objectAttribute->fromString( ‘/tmp/’.$file[‘basename’] );
            }
        } break;
        //..
    }
}

Après s’être occupé d’apprendre à eZ Publish comment traiter les ezimage. Nous allons maintenant ajouter Item – Enclosure – Url dans le <select> (voir image plus haut). Occupons nous de la méthode rssFieldDefinition()

case ’2.0′:
case ’0.91′:
case ’0.92′:
{
  return array( ‘item’ => array( ‘elements’ => array( ‘title’,
                                                      ‘link’,
                                                      ‘description’,
                                                      ‘author’,
                                                      ‘category’,
                                                      ‘comments’,
                                                      ‘guid’,
                                                      ‘pubDate’,
                                                      ‘enclosure’ => array( ‘attributes’ => array( ‘url’ ) ) ) ),
                ‘channel’ => array( ‘elements’ => array( ‘title’,
                                                         ‘link’,
                                                         ‘description’,
                                                         ‘copyright’,
                                                         ‘managingEditor’,
                                                         ‘webMaster’,
                                                         ‘pubDate’,
                                                         ‘lastBuildDate’,
                                                         ‘category’,
                                                         ‘generator’,
                                                         ‘docs’,
                                                         ‘cloud’,
                                                         ‘ttl’ ) ) );
}

Implémentation plus propre

Au lieu de modifier le cron rssimport.php vous pouvez le copier dans votre extension y apporter les modifications pour le ezimage. Et appeler ce dernier au lieu du rssimport.php par défaut d’eZ Publish. La méthode rssFieldDefinition() est utilisé dans une autre méthode de la même classe, on remarque la présence d’un hook qui permet d’étendre sa définition a partir des classes présentes dans nos extensions custom. Voici le hook qui est dans la méthode fieldMap()

$fieldDefinition = eZRSSImport::rssFieldDefinition();

$ini = eZINI::instance();
foreach( $ini->variable( ‘RSSSettings’, ‘ActiveExtensions’ ) as $activeExtension )
{
    if ( file_exists( eZExtension::baseDirectory() . ‘/’ . $activeExtension . ‘/rss/’ . $activeExtension . ‘rssimport.php’ ) )
    {
        include_once( eZExtension::baseDirectory() . ‘/’ . $activeExtension . ‘/rss/’ . $activeExtension . ‘rssimport.php’ );
        $fieldDefinition = eZRSSImport::arrayMergeRecursive( $fieldDefinition, call_user_func( array(  $activeExtension . ‘rssimport’, ‘rssFieldDefinition’ ), array() ) );
    }
}

Il nous suffit donc de créer une classe dans extension/monextension/rss/ezrssimage.php avec ce code, avec une methode du même nom: rssFieldDefinition()

class ezrssimagerssimport
{
    static function rssFieldDefinition()
    {
        return array( ‘item’ => array( ‘elements’ => array( ‘enclosure’ => array( ‘attributes’ => array( ‘url’ ) ) ) ) );
    }
}

et de déclarer cette classe dans le fichier monextension/settings/site.ini.append.php.

[RSSSettings]
ActiveExtensions[]=ezrssimage

Voila pour ce tutoriel. Si je trouve le temps je packagerai cela dans une extension que je publierai sur GitHub ou projects.ez.no (sauf si quelqu'un me devance d’ici là). N’hésitez pas à me signaler des erreurs ou améliorations que vous jugerez utiles.

Vous pouvez retrouver les snippets PHP précédent ici https://gist.github.com/killerwolf/5430167

Filtre custom ImageMagick pour eZ Publish

- 2011-07-13

Les filtres par défaut d’eZ Publish, ne vous permettent pas de rogner les images pour les faire entrer dans des dimensions précises. Le fichier de conf image.ini vous permet d’implémenter sous eZ Publish toutes les possibilités offertes par les outils CLI d’ImageMagick. Voici 2 filtres qui effectuent la même tâche mais avec 2 manières différentes: rogner et redimensionner les images, libre à vous de les utiliser avec vos Alias

Filters[]=geometry/thumbnailize=-thumbnail "%1x%2^" -gravity center -extent %1x%2
Filters[]=geometry/thumbnailize2=-geometry %1x%2^ -gravity center -crop %1x%2+0+0 +repage

Mon premier widget UWA netvibes / iGoogle

- 2009-01-18

NetVibes iGoogle Widget

A la base, le projet etait prévu pour mon tag:tag NabKiller, but i wanted to mess with the netvibes UWA. Ce widget affiche les horaires de diffusion des séries que je regarde régulièrement.

Aimant beaucoup les mashups, je me suis pas amusé à lister toutes les séries qui existent. j’ai donc utilisé pour cela un services proposé par TVRage. Une fois votre compte créé sur TVRage et vos séries préférées ajoutées a votre compte, TVRage vous met à disposition un “Personalized RSS Feed” des séries difusées pendant la semaine en cours.

Voici le mien: http://www.tvrage.com/myweekrss.php?tid=32948&hash=a60a8c06b3fd2afda135e2a42ab88a7e

Comme vous pouvez le voir, le flux est très sale, on peut pas le manipuler aisément , les items sont hétérogènes. Donc ce fut assez laborieux pour agréger ce flux et lui donner l’apparence que j’ai voulu.

Voulant allez le plus rapidement possible pour voir mon widget fonctionner, j’ai écrit une petite API en PHP5 qui agrège ce flux et ordonne correctement les données. Il est aussi possible de se servir du parser UWA/JS fourni par netvibes, et c’est une meilleur solution. car actuellement le widget est dépendant le l’api que j’ai écrite et qui est hostée sur un de mes sites, mais qu’importe, je compte pas diffuser mon widget pour le moment, la solution PHP me convient.

Le widget prend 3 paramètres, le tid et le hash que vous trouvez dans l’url de votre flux personnalisé, et le troisiéme qui est l’adresse de mon API.

NetVibes iGoogle Widget

GreaseMonkey or how to enhance you web experience

- 2008-12-21

GreaseMonkey est une extension pour Firefox, elle vous permet de prendre le controle du web. Vous trouvez tel site intéressent malgré le faite qu’il soit infesté de pub. Grace a GreaseMonkey et a un petit script de quelque ligne, le rendu visuel de votre site préféré sera modifié selon votre désir.

Pour illustrer mon propos, j’ai écris à chaud le script JS ci-dessous, il supprime “Les Liens sponorisés” qui peuvent apparaitre lors de vos recherche sur Google. La connaissance du Javascript est biensur indispensable, mais aussi du Dom et/ou XPath .

Je vous ai convaicu d’écrire vos propres scripts , pensez à partagez les partager sur UserScripts.org si vous pensez qu’il peuvent être utiles à d’autre. Mon Google Sponsored Links remover est disponible sur UserScripts et est disposé à toute critique de votre part.

// ==UserScript==
// @name           Google Sponsored Links remover
// @namespace      http://www.laadhari.fr
// @description    remove google sponsored links from SERPS
// @include        http://www.google.com/*
// ==/UserScript==

(function() {
  var sidebarads = document.getElementById(‘mbEnd’);
  var skyads = document.getElementById(‘tads’);
  if (sidebarads) {
    sidebarads.parentNode.removeChild(sidebarads);
    }
  if (skyads) {
    skyads.parentNode.removeChild(skyads);
    }  
  }
)();

A homemade sensorbar pour Wii

- 2008-12-21

Si vous avez un quelconque soucis avec votre sensor bar, pas de panique, aucune raison d’en racheter une. Vous pouvez en bricoler une pour 3 fois rien. Voilà un test réalisé par votre serviteur et un de ses acolytes dénommé Biggest.

Premier essai avec l’API de mon nabkiller

- 2008-12-12

J’ai récemment fait l’acquisition il y a une semaine d’un Nabaztag:tag, voir le site officiel si vous ne savez pas ce que c’est. Violet, le fabricant du Nabaztag:tag fournit une API avec son lapin. On peut interagir avec son propre lapin, lui faire faire plein de chose. Mon idée était de pouvoir faire faire lire les messages qu’on m’écrivait sur MSN par mon lapin, quand je met met en statut “AFK” (c-a-d Away from keyboard pour les non geek), je pourrais entendre les messages de mes amis quand je ne suis pas derrière mon écran pour les lire. Le lapin a une fonctionnalité Text To Speech, on lui envoie un texte par l’intermédiaire de l’API, et il les lit dès réception.

Dernière étape: faire en sorte que MSN puisse déclencher certaines actions de l’API en fonctions de certains de ses événements interne. Et c’est la que Messenger plus live trouve son utilité. Tout le monde connait cet addon de MSN, mais ses possiblité de scripting ne sont pas connu de tous, c’est qu’on a la possibilité d’exécuter nos propres commandes grâce à l’environnement Javascript embarqué dans Mesenger plus live. En plus des Événements basique de MSN, cet addon implémente toutes une séries d’évènements très utile, il suffit donc d’implémenter les fonctions-évènements qui nous intéressent dans notre script JS. Voici la documentation fourni par Mesenger. Ci-dessous une courte vidéo montrant mes premier tests effectué avec mon NabKiller (c’est le nom que j’ai donné à mon lapin).

Idée que je vais surement développer avec mon lapin: Mon Nabkiller me préviendra dès qu’un nouvelle épisode des séries que je regarde est publié, et il me dira si les sous-titres de ce même épisode sont disponibles, à défault il me préviendra dès que ce sera le cas Doter mon lapin d’une intelligence artificiel, avec un bot pandorabot par exemple. Pour exemple voici Voldo un bot doté d’un IA.

Les noms de domaines

- 2008-02-21

Je suis toujours à l’affût quand il s’agit d’acquérir un nouveau nom de domaine, j’essaye de trouver des niches, des domaines peu ou pas exploités, et des noms de domaines qui peuvent être associés. L’idée ou le nom de domaine peuvent me venir à l’esprit à n’importe quel moment de la journée, dans la douche, pendant le déjeuner, ou juste avant de m’endormir. Alors je regarde s’il est disponible ou pas. Si oui, il y a de forte chance que je l’achète tout de suite, ou du moins je le note quelque part pour ne pas oublier d’y repenser avec du recul. S’il est toujours libre aujourd’hui il y a de forte chance qu’il le soit encore dans quelques jours. Il faut tout de même faire gaffe car j’ai vu quelques noms de domaine très bon m’échapper de cette manière. Il existe de nombreux outils, services web qui permettent de gérer, surveiller vos propres noms de domaines ou ceux que vous convoitez. J’en parlerai dans un prochain billet et je parlerai aussi de la fulltitude de noms de domaines que je possède, et pour lesquels j’ai des projets….durs a réaliser si on en a pas le temps. Tchuss tout le monde.

Come back

- 2008-02-20

J’ai décidé de reprendre la mise à jour de mon blog après 6 mois de non activité. Profitant de cette semaine de vacances pour m’y consacrer un peu.

Thermodynamique mystique

- 2008-02-11

Je reçois ces mails, trop pas sollicités de la part de mes amis, des chaines qui te persuade de forwarder pour la bonne cause et des trucs dans le genre. Mais de rares fois, on tombe sur quelque chose d’intéressant. C’est le cas de ce mail reçu il y a quelques jour. ENJOY.

Ci dessous est la version d’une soi-disant question de chimie donnée à l’université de Montpellier. La réponse d’un étudiant a été si profonde que le professeur l’a partagé avec ses collègues, via internet, et c’est pourquoi nous avons le plaisir de la lire.

Question bonus: L’enfer est il exothermique (évacue de la chaleur) ou endothermique ( absorbe de la chaleur) ? La plupart des étudiants ont exprimé leur croyance en utilisant la loi de Boyle (si un gaz se dilate il se refroidit et inversement) ou ses variantes. Cependant un étudiant eut la réponse suivante:

Premièrement, nous avons besoin de connaître comment varie la masse de l’enfer avec le temps. Nous avons donc besoin de connaître à quel taux les âmes entrent et sortent de l’enfer. Je pense que nous pouvons sans risque assumer qu’une fois entrée en enfer, l’âme n’y ressortira plus. Du coup, aucune âme ne sort. De même pour le calcul du nombre d’entrée des âmes en enfer, nous devons regarder le fonctionnement des différentes religions qui existent de par le monde aujourd’hui. La plupart de ces religions affirment que si vous n’êtes pas un membre de leur religion alors vous irez en enfer. Comme il existe plus d’une religion exprimant cette règle et comme les gens n’appartiennent pas a plus d’une religion, nous pouvons projeter que toutes les âmes vont en enfer. Maintenant regardons la vitesse de changement de volume de l’enfer parce que la loi de Boyle spécifie que pour que la pression et la température reste identique en enfer, le volume de l’enfer doit se dilater proportionnellement à l’entrée des âmes.

Cela donne deux possibilités : 1 Si l’enfer se dilate à une vitesse moindre que l’entrée des âmes en enfer, alors la température et la pression en enfer augmenteront indéfiniment jusqu’à ce que l’enfer éclate. 2 Si l’enfer se dilate à une vitesse supérieure à la vitesse d’entrée des âmes en enfer, alors la température diminuera jusqu’à ce que l’enfer gèle.

Laquelle choisir ?

Si nous acceptons le postulat que Teresa m’a répondu durant ma première année d’étudiant “qu’ il fera froid en enfer avant que je couche avec toi” et e tenant compte du fait que j’ai couché avec elle la nuit dernière alors l’hypothèse doit être vrai et alors je suis sûr que l’enfer est exothermique et a déjà gelé. Le corollaire de cette théorie c’est que comme l’enfer a déjà gelé, il s’en suit qu’il n’accepte plus aucune âme et du coup qu’il n’existe plus… Laissant ainsi seul le paradis, ainsi prouvant l’existence d’un être divin ce qui explique pourquoi, la nuit dernière, Teresa n’arrêtait pas de crier ” oh mon dieu”

C’EST LE SEUL ETUDIANT A AVOIR RECU LA NOTE 20

www.flickr.com
killerwolf éléments Aller à la galerie de killerwolf