Mais c’était quand déjà ? (partie 2)

Salut à tous!

Allez, je mets les pieds dans le plat. Vous vous rappelez mon dernier article à l’arrière goût nostalgique? Non? Mais siiiii… Il est juste en dessous, là… J’expliquais que cet article avait pris le pas sur ce que je désirais réellement écrire ce jour-là. Hé bien voilà, depuis longtemps, je cherche des dates. C’est con hein, mais par exemple, « C’était quand la dernière fois que j’ai changé de caleçon? »

Pardon? Ah. On me fait signe en régie que cet exemple n’est pas génial. Disons plutôt « je fais le plein de ma voiture tous les combien? Et combien ça me coûte, en cumulé? »

Ou encore « c’était quand la dernière fois que j’ai eu mal au crâne? » Ça pourrait être intéressant de savoir si j’ai plus souvent mal à la tête le vendredi ou le samedi, par exemple. Ou plus l’hiver que l’été.

Alors j’ai attrapé mon plus beau clavier et j’ai développé une application web qui permet justement de tracer les événements de ma vie, qu’ils soient ponctuels ou récurrents (c’est surtout intéressant pour les récurrents), et dont je veux pouvoir retrouver les dates plus tard, voire établir des statistiques. statistics-exampleJe peux aussi faire un rapprochement entre les répétitions du vendredi soir et le mal de crâne du samedi matin (bien que cette corrélation fût déjà établie…)

Et surtout, plus que tout: je saurai enfin tous les combien on change la pile de la pendule du salon! Non mais c’est vrai quoi, elle les bouffe ou bien?

Alors j’ai mis en ligne whenwas.it, et je l’utilise évidemment, puisqu’à la base je l’ai conçu selon mes besoins.

J’y note les cafés que je bois, les jours où j’achète des clopes, les matins où je me lève avec le mal de crâne, quand je fais le plein (et dans ce cas j’indique les montants pour pouvoir calculer automatiquement des cumuls), et pas mal d’autres événements récurrents.

Je me suis dit que ce genre d’application pourrait être utile à pas mal de monde, alors les inscriptions sont ouvertes.

L’interface est responsive, et construite à base d’agrumes avec le très agréable framework materializecss.

Mais qu’est-ce que que je raconte avec mes citrons… Voyez plutôt:

when-was-it-nico

Et si vous pensez que ça peut vous être utile, alors n’hésitez pas!

Tschüss!

Communiquer avec Adafruit IO en PHP

Salut tout le monde!

Voilà un moment que je n’ai rien posté, mais j’ai de bonnes raisons… Bricolage intensif sur l’ESP8266 (merci Sandrine de Bloguelinux) sur lequel je ferai très bientôt un gros billet 🙂

Bref, pour aujourd’hui, je vais vous parler de la plateforme Adafruit IO, qui est un superbe environnement pour stocker les données d’objets connectés.

La structure des données est simple et efficace: on crée des feeds, qui sont de simples listes de valeurs.

Chaque élément d’un feed a une valeur (une température par exemple), et éventuellement des coordonnées GPS.

Pour ma part, j’ai utilisé un capteur DHT22, et l’ESP8266 balance les données de température et d’humidité relative dans deux feeds.

Et avec les feeds, on peut (entre autres) afficher des courbes :

adafruit io graphique
Ça caille encore un peu dans le salon…

https://io.adafruit.com/toxnico

L’interaction avec AdaFruit IO pour envoyer ou lire les données se fait par une API REST; du coup je me suis dit qu’il serait intéressant d’avoir la possibilité, en PHP, de charger la dernière valeur de chaque feed pour l’afficher sur un site web par exemple.

Alors j’ai écrit cette petite librairie sous GPL v2 pour permettre à tout le monde de récupérer facilement ses données : https://github.com/toxnico/php-adafruitio

Vos retours et impressions sont les bienvenus!

A très bientôt pour une grosse aventure ESP8266 🙂

Plugin WordPress pour bloquer les tentatives d’intrusion (et les spams de commentaires?)

Si comme moi, vous avez un site qui tourne sous WordPress, vous avez probablement des dizaines de tentatives d’intrusion par jour.

Pendant un temps, j’ai utilisé le plugin All in one WordPress Security. Il bloque les adresses IP après 3 tentatives de login infructueuses, et vous envoie une notification. C’est très bien mais je l’ai trouvé un peu trop lourd pour ce que je cherchais à faire, à savoir sécuriser ma page de login.

Ne trouvant pas de solution simple pour masquer cette putain de page, j’ai décidé d’écrire mon propre plugin qui fait le boulot. C’était l’occasion d’apprendre à développer des plugins WordPress, hé bien ce n’est pas si compliqué que ça en a l’air! Accessoirement, il bloque aussi les appels XML-RPC. Et comme side effect non prévu et très intéressant, les spams de commentaires… Je ne sais pas pourquoi, mais c’est ce que je constate chez moi en tout cas 🙂

Pour la petite histoire, j’ai tenté de le vendre via la plateforme codecanyon (je ne mets pas le lien, c’est volontaire car à mon humble avis ce sont des raclures). Pour ça, j’ai packagé mon petit bouzin, j’ai documenté le code à mort et je leur ai envoyé pour qu’ils l’analysent et le publient.

Deux semaines plus tard, j’ai reçu un email me disant que mon plugin a été refusé. Pourquoi? Parce que. Merci les gars pour la précision des explications, et allez vous faire empapaouter.

Alors tant pis pour la vente, je l’ai mis sous GPL2 et je l’ai publié sur Github.

Mais il marche comment ton plugin?

Le principe est très simple. Normalement, quand on veut s’authentifier sur un site WordPress, on tombe sur la page wp-login.php et on a accès au formulaire login/mot de passe.

Hé bien une fois que ce plugin est activé, il faut juste ajouter un paramètre de votre choix dans l’URL pour que la page de login soit visible. Par exemple, wp-login.php&dirty=marmotte

C’est tout. Vous pouvez essayer chez moi si vous voulez.

Vous pouvez aussi essayer d’envoyer des requêtes POST directement sur wp-login.php, même si le login/mot de passe est correct, si la clé n’est pas là ça ne passera pas;)

Et donc, je disais plus haut que ce plugin vous permet aussi de désactiver le XML-RPC, qui est un web service permettant d’effectuer des opérations sur WordPress depuis des applications tierces. C’est un vecteur important d’attaques brute force, et il est activé par défaut alors que la plupart du temps il n’est pas utile.

Et les spams de commentaires?

Alors ça, c’est le point imprévu de ce plugin.

Je soupçonne que les spambots se basent sur la présence d’une page wp-login.php pour savoir si on est sur wordpress, et à partir de là, ils savent comment poster un commentaire de façon automatique.

Ici, comme il n’y a plus de wp-admin.php standard, ils ne sauraient pas comment envoyer un commentaire. Enfin c’est mon analyse, je ne sais pas si elle est correcte… Toujours est-il que sur mon blog, j’ai zéro spam détecté par akismet, et rien en file d’attente. C’est plutôt cool du coup. N’hésitez pas à me faire un petit retour si ce n’est pas le cas chez vous, et dans ce cas je corrigerai cet article.

Voici l’archive du plugin à installer dans WordPress : wp-login-door.zip

wp-login-door sur GitHub

Et si ce plugin vous plait, pourquoi pas faire un petit don?

A bientôt!

Podcasts, RSS et PHP

Oyo!

Un petit billet « copinage » pour les podcasts que j’écoute, et promo pour podcast addict, un lecteur de podcasts sur android. Vous les trouverez (en partie) dans le menu de gauche, sous « podcasts ».

Breaking news : http://www.nextinpact.com/news/98103-podcast-addict-retire-play-store-son-developpeur-cherche-solution.htm

Non mais qu’est-ce que c’est que ce bordel?? Podcast addict retiré aujourd’hui du play store pour cause de contenu pornographique… Non mais n’importe quoi les gars… Un conseil Xavier: pars sur F-Droid…

Edit : au 18.01.2016, Podcast Addict est revenu dans le play store.

Je les écoute dans la voiture; parmi eux NipSource, une très bonne équipe dont j’aimerais bien entendre le premier épisode de 2016 au passage… Un membre de cette équipe, Donkluivert, fait son propre podcast et est hébergé sur une plateforme qui ne lui permet pas de l’exporter correctement en RSS. Quand je dis correctement, c’est juste qu’un lien vers le fichier son doit être présent dans les items du flux pour qu’il soit téléchargeable par podcast addict (susmentionné:) sur ma tablette.

Bref, je voulais ajouter son podcast à mes flux et ça ne marchait pas.

Alors j’ai écrit un petit proxy en PHP qui enrichit son flux en allant extraire les liens sons depuis les pages cibles, et qui les insère dans les items du flux RSS.

Avec un petit système de cache pour ne pas envoyer trop de requêtes vers le site initial.

Le flux complet de l’ami DK est donc ici : chroniques du jeune manchot

Alors voilà, si l’un d’entre vous anime un podcast ET a des problèmes de flux RSS (je dirais probabilité… nulle?), ce proxy est pour vous!

Planning Machine V2

Après le relatif succès de la Planning Machine, et après avoir découvert Bootstrap il y a maintenant une bonne année, j’ai décidé de faire une refonte complète de l’application. Plus jolie (même si ça reste subjectif), plus facile à maintenir, et plus intuitive.

L’inscription et la connexion se font maintenant uniquement avec OpenID (Google, Yahoo, ou n’importe quel autre provider OpenID). Cela évite de remplir un formulaire, recevoir un mail de confirmation à valider… Beaucoup plus simple.

A propos d’OpenID, sachez que je ne lis, ni ne stocke aucune information, à part évidemment l’URI unique délivrée par le provider OpenID. Quand je dis aucune, c’est vraiment aucune, pas même votre adresse mail.

Alors voilà, si vous avez des choses à planifier, c’est par là que ça se passe.

Dirty Feed Reader

Récemment, une nouvelle m’a bien attristé : Google va fermer Google Reader. Et merde, me suis-je dit.

Je suis un consommateur régulier de flus RSS, et Google Reader était parfaitement adapté à mes besoins, notamment sur mon galaxy tab 2.

Je suis allé faire un tour sur le net pour voir quelles étaient les alternatives envisageables, et je suis tombé sur Feedly (dont j’avais auparavant entendu parler en bien). J’ai installé le bidule sur la tablette.

  1. Magnifique: j’entre seulement mon adresse gmail, et il m’importe tous mes flux.
  2. Je m’émerveille devant la présentation des flux. Visuellement, ça pète!
  3. J’explore un peu, et je ne comprends RIEN. Pourquoi m’affiche-t-il les articles de façon aléatoire? Ce que je veux, c’est simplement avoir la liste de mes flux, la liste des articles, et rien de plus… Feedly est trop compliqué pour moi… Visuellement superbe, mais à mes yeux inutilisable.

Ça me démangeait depuis un moment de développer mon propre lecteur de flux RSS, alors c’était l’occasion.

J’ai donc développé ce lecteur en gardant la même structure: des répertoires, et des flux rangés dedans.

A côté de ça, je me suis amusé à implémenter une authentification OpenID. Bon ok, le seul fournisseur d’identité en place est pour l’instant… Google… Mais ça marche! Plus besoin, donc, de remplir un formulaire d’inscription avec nom d’utilisateur et mot de passe. Un bon gain de temps pour se créer un compte 🙂

Je suis globalement satisfait de ce programme; il reste à peaufiner l’interface pour les tablettes et ce sera parfait!

J’ai écrit une fonction pour importer un fichier opml, histoire de récupérer la liste des flux actuels de Google Reader.

Pour ceux que ça intéresse, c’est par là!

Todo machine : la machine à gérer des listes

Voici une nouvelle application web qui va nous, vous, enfin en tout cas me aider à gérer des projets, sous forme de todo lists : la todo machine.

Le système se veut volontairement simple, avec deux niveaux : projet et tâche. Un projet contient des tâches, point.

 

En sélectionnant un projet, on voit la liste des tâches apparaitre :

Pour marquer une tâche comme terminée, il suffit de cliquer sur la petite coche verte. La tâche devient transparente et est envoyée à la fin de la liste. En cliquant à nouveau, on la réactive. Il est possible de saisir une description précise de la tâche :

 

Les tâches sont triées par ordre alphabétique, donc pour ajouter une notion de date, il suffit d’écrire par example 2012-12-05 : titre de la tâche. Pas de prise de tête.

Perso, j’ai quelques projets à gérer en parallèle, et cette petite application m’est bien utile. On n’est jamais mieux servi que par soi-même…

Evidemment, cette application a été développée dans le framework Mozaic, comme d’hab.

Ca me fait penser… Il faut que je mette à jour le wiki, car les choses ont pas mal évolué… Hop, une nouvelle tâche pour le projet Mozaic !

Je vais aussi noter de faire les traductions à l’occasion…