[Vidéo] The League of Steam

Tout le monde connaît les célèbres Gosthbusters, dotés d’un matériel de pointe dans une Amérique moderne. Il est donc temps de changer d’époque, d’espace temps même, puisque les vidéos de The League of Steam se situe dans « l’époque » SteamPunk. Cette confrérie de chasseur de fantômes et autres manifestations surnaturelles dispose néanmoins de nombreux appareils divers et variés. Il ne recule devant rien… ou presque.

The League of Steam a terminé sa deuxième « saison » de vidéo et une troisième série est d’ores et déjà prévue. Les dialogues sont bien sûr en anglais, mais cela n’empêche en rien de suivre avec plaisir les mésaventures du groupe. Les différents épisodes peuvent pour la plupart être visionnés indépendamment les uns des autres. Le mieux reste de les prendre dans l’ordre chronologique de diffusion.

Voici l’un de mes épisodes préférés de la saison 1.
Direction l’Irlande avec ses créatures fantastiques, et sa musique.

Lien vers «  »Fool’s Gold » – Adventures of the League of STEAM »

Node-Elastical: Delete by query option

What is Elastical?

Elastical is a Node.js client library for the ElasticSearch REST API.

That’s it for the presentation.

Until a few weeks ago, it wasn’t possible to delete data by query without using a hack. The hack was the following:

client.delete('twitter', 'tweet', '', {q: 'user:Shay'} );

Here, we set id to an empty string and we use the options parameter to perform a search on user with value Shay. Not so practical at all.

Using curl to interact with ElasticSearch, it is possible to delete by query:

curl -XDELETE 'http://localhost:9200/twitter/tweet/_query' -d ' 
  { "term" : { "user" : "kimchy" } 
}
'

This handy way of deleting things in ElasticSearch was not possible with Elastical (unless, you managed to use the hack above).

So I’ve added a new parameter options.query which allow us to perform such a query more easily.

client.delete('twitter', 'tweet', '', {query:
  { "term" : { "user" : "kimchy" } } 
});

When using the query parameter, id and all other options except ignoreMissing will be ignored.

Let’s take a quick look at the code involved:

if(params.query) {
  url = '/' + encode(this.name) + '/' + encode(type) + '/_query';

  this.client._request(url, {method: 'DELETE', json: params.query}
  , function (err, res) {
    if (err) {
      if (ignoreMissing && res && res.found === false) {
        return callback(null, res), undefined;
      } else {
        return callback(err, res), undefined;
      }
    }
    callback(null, res);
  });
} else {

It’s pretty simple. First, we need to build the url, then we’re requesting ElasticSearch on the given url, passing the query in the json parameter. If options.query doesn’t exist, then the original code is used.

As a conclusion, delete by query is now available in Elastical and you should use it!

 

ElasticSearch: Delete By Query API

Journées Du Logiciel Libre 2012

Ce week-end avait lieu la 14e édition des Journées Du Logiciel Libre à Lyon, l’occasion pour moi donc de retrouver l’ambiance des RMLL en plus petit, mais toujours avec autant de convivialité. Une bonne série de conférence était au programme, plusieurs stands d’associations, des représentants de distribution GNU/Linux, et bien d’autres.

Ce fut donc l’occasion d’aller discuter avec les représentants de la FSFE, l’April, Illyse le fournisseur d’accès associatif du coin, MozillaFr entre autres. Découverte également de la LOLBox, une pirateBox améliorée qui permet de diffuser en live la musique stockée dans la pirateBox, le tout grâce à une magnifique radio Ghetto-blaster d’époque. Découverte également de Movim, réseau social alternatif basé sur le protocole XMPP et discussion avec son créateur. Présentation de Newebe, autre réseau social où chacun héberge son nœud.

Conférence Pourquoi GIMP n’a pas besoin de CMJN, réédition de celle des RMLL 2012 à laquelle je n’avais pas pu assister. Présentation de la campagne Libérez Votre Android! de la FSFE. Je viens d’ailleurs de constater que le mode fastboot est bloqué sur mon téléphone et m’empêche donc de le rooter pour le moment, tout ça à cause de l’opérateur. Bref, deux journées bien remplies, avec comme toujours de nombreuses choses à découvrir.

Combattre le spam

S’il y a bien une chose de désagréable lorsqu’un met en place un site web, avec des formulaires de commentaires à la disposition des visiteurs, c’est vous l’avez deviné… le spam. Ça commence par un commentaire de temps en temps, puis un commentaire par jour, puis deux, puis trois et leur nombre augmente encore.

Pour lutter, j’avais donc mis en place le plugin Akismet, qui fait du bon travail, il faut bien le reconnaître. Néanmoins, je préfèrerais me passer de 251 commentaires classés indésirables en moins d’une journée. C’est pourquoi, après quelques recherches, j’ai trouvé le plugin GrowMap Anti-Spambot. Ce plugin ajoute une case à cocher pour confirmer que le visiteur n’est pas un spammeur, si la case n’est pas coché, le commentaire n’est pas sauvegardé. GrowMap ajoute également un champ de formulaire invisible pour les visiteurs mais visible pour un bot lisant le code source de la page. Le bot de spam va donc compléter le champ et identifier ainsi le commentaire comme étant du spam.

Je viens donc de désactiver Askimet pour tester GrowMap pendant quelques jours afin de juger son efficacité. Curieux de voir le résultat.

Pull Request: Remarques

Quelques bons usages qui peuvent faciliter l’acceptation d’une Pull Request sur Github et que j’ai découvert après quelques Pull Request.

  • Toujours décrire la fonctionnalité que vous ajoutez du mieux possible.
  • Faire des Pull Request contenant peu de fichier. On gagne ici en lisibilité. En effet, une Pull Request ajoutant 50 000 fichiers à cause de nouvelles dépendances, à beaucoup de chance de rebuter le développeur. En conclusion, faire quelque chose de clair!
  • Utiliser les outils de tests du projet. Cela nécessite peut-être de prendre en main des nouveaux outils mais augmente grandement les chances de faire accepter votre demande. Et surtout, vous évitez les commit de plusieurs milliers de fichiers.
  • Ça peut sembler idiot, mais utiliser le mécanisme de test du projet libre à la place de tester seulement son cas de test à la main peut vous évitez de chercher pendant des heures pourquoi cela ne marche pas comme vous le pensez.