Blog Le blog développeur de Clément Desmidt 2017-09-16T21:51:00+02:00 Clément Desmidt https://shikiryu.com/devblog La petite histoire de la ville qui n'aime pas l'informatique https://shikiryu.com/devblog/la-petite-histoire-de-la-ville-qui-n-aime-pas-informatique 2017-09-16T21:51:00+02:00 2017-09-16T21:51:00+02:00 Tout débuta lorsque, lors d'un développement pour un client, je fasse un test sur un code postal tapé totalement aléatoirement : 24560.

Ce code postal existe, et est attribué à plusieurs villes. Néanmoins, une en particulier a attiré mon attention : 0.

Au départ, je pensais qu'une ville s'appelait "O" comme l'eau et je trouvais ça fou mais en le collant dans mon IDE, j'ai vu que c'était un chiffre.

Impossible me dis-je ! Que nenni ! Une recherche Googol me prouve le contraire avec le site education.gouv.fr. Il semble qu'officiellement 0 existe.

Passé l'étonnement, je clique sur "Localisez" et arrive sur cette page de localisation qui me dit toujours que "0" existe au code postal 24560. Arrivé à ce point, j'ai juste envie de déménager là bas. Sérieusement.

C'est pour que dans un dernier élan, je m'empresse de savoir où se trouve cette ville magique en cliquant sur situer sur la carte. Là, une Google Maps (sigh) s'ouvre ne me montrant pas une ville appelée 0 mais Faux. Et là, tout s'explique.

On sent bien que le gouverment utilise un tableur et que "Faux" s'est transformé en "0" et que rien n'a été corrigé après :)

]]>
Script pour SSHFS https://shikiryu.com/devblog/script-sshfs 2017-07-27T00:00:00+02:00 2017-07-27T00:00:00+02:00

Plus comme un petit pense-bête qu'un vrai article, voici comment je monte/démonte un dossier via SSHFS

#!/bin/sh

sshfs -o port=2200,follow_symlinks user@192.168.0.42:/var/www/ /var/www/web
if [ "$?" -eq 0 ]; then
  echo "/var/www/web volume mounted."
else
  echo "Error mounting /var/www/web."
  fusermount -uz /var/www/web
  if [ "$?" -eq 0 ]; then
    echo "/var/www/web volume unmounted"
  fi 
fi

En lançant ce script, ça toggle le mount/unmount. Utile quand on perd la connexion !

]]>
Ma participation au MOOC Linux https://shikiryu.com/devblog/ma-participation-au-mooc-linux 2017-05-12T00:00:00+02:00 2017-05-12T00:00:00+02:00 J'ai suivi un MOOC jusqu'au bout.

Ce MOOC sur la plate-forme Fun MOOC avait pour intitulé « L'essentiel pour maîtriser Linux ».

Je ne savais pas trop à quoi m'attendre avec 30 minutes de vidéos par semaine pendant 6 semaines. C'est bien court pour tous les sujets abordés (distributions, lignes de commande, réseau, manipulations de fichier, …).

J'en suis fier même si…

Le sujet m'intéressait et j'avais déjà des connaissances en auto-didacte. Je voulais vérifier si elles étaient bonnes ; conclusion : elles le sont : voici mon attestation acquise avec une note de 98% − les 2% étant surtout dû à la plate-forme, j'y reviendrai.

J'ai signalé tous les défauts qui vont suivre à l'équipe suite à l'examen final, je n'ai donc aucune honte à les « afficher » ainsi.

Une plate-forme de piètre qualité

C'est la 1ère fois que je suis un MOOC sur cette plate-forme et … je pense que c'est la dernière. Voici une liste (non-exhaustive) de ce qui m'a déçu, ralenti, bloqué, carrément fait vomir :

  • une interface totalement pas intuitive
  • du javascript codé avec les pieds empêchant des actions simples (genre ouvrir la vidéo et le quiz dans 2 onglets facilement)
  • des erreurs (js je pense) qui popent « comme ça »
  • les 2% perdus parce que pour valider une réponse, tu dois enregistrer (bouton au milieu), puis vérifier (bouton de gauche) pour enfin passer à la suite (bouton de droite). Les 2 premiers boutons ont la même couleur ! Intuitif !
  • des quizzes mal formatés

Des vidéos du même acabit

Je suis désolé pour l'équipe de professeurs qui n'ont sans doute pas le matériel adapté mais les vidéos étaient moches. Les leçons étaient lues depuis des slides toutes faites. Entendre quelqu'un lire un sommaire d'une voix monotone n'est pas motivant du tout.

Par conséquence, je n'ai regardé que la première entièrement, la seconde en avance rapide (seul avantage du lecteur vidéo) et pas du tout le reste.

Bien m'en a pris, j'ai réussi les quizzes sans les regarder. J'ai gagné du temps et de la confiance en ma capacité d'apprentissage en auto-didacte.

Un « forum » vide

Pour avoir fait des MOOC sur d'autres plates-formes (coursera par exemple), d'habitudes après les leçons, je vais voir les commentaires, les questions ou des indices. Là, soit il n'y avait rien, soit des critiques, soit des questions (que je me posais) sur des questions de quiz incompréhensibles.

Conclusion

Je suis quand même bien content d'avoir cette attestation même si, en vérité, elle ne vaut pas son statut !

]]>
Limiter SFTP à la home de l'utilisateur https://shikiryu.com/devblog/limiter-sftp-home-utilisateur 2017-04-07T10:11:00+02:00 2017-04-07T10:11:00+02:00 J'ai eu besoin d'un accès SFTP « sécurisé » et surtout limité pour un utilisateur précis sur un de mes serveurs.

Voici comment je m'y suis pris au final après pas mal de tatonnements et d'erreurs.

Ajouter ceci à la fin de /etc/ssh/sshd_config :

# Subsystem sftp internal-sftp
Subsystem sftp internal-sftp -f AUTH -l VERBOSE

# This section must be placed at the very end of sshd_config
# Match Group sftponly
Match User tartenpion
ChrootDirectory %h
ForceCommand internal-sftp
# ForceCommand /usr/lib/openssh/sftp-server
# For additional paranoia, disallow all types of port forwardings.
AllowTcpForwarding no
GatewayPorts no
X11Forwarding no

Redémarrer SSH avec sudo service ssh restart par exemple

Il faut que /home et /home/tartenpion soit à root en mode 755. Donc :

sudo chown root /home
sudo chown root /home/tartenpion
sudo chmod 755 /home
sudo chmod 755 /home/tartenpion

Par sécurité, on peut faire usermod tartenpion -s /bin/false afin que tartenpion ne puisse qu'utiliser SFTP et pas SSH.

Merci à partofthething pour la réponse au problème de droit que j'avais sur ma Debian 8 (la ligne Subsystem sftp internal-sftp -f AUTH -l VERBOSE au lieu de Subsystem sftp internal-sftp (qu'on voit partout) ou de Subsystem sftp /usr/lib/openssh/sftp-server (que j'avais essayé et qui fonctionnait… presque)

]]>
Un utilitaire pour passer de Known vers Ghost https://shikiryu.com/devblog/known-to-ghost 2017-02-28T00:00:00+01:00 2017-02-28T00:00:00+01:00 J'en ai parlé sur le post de mon blog perso mais c'est aussi un projet à part entière, donc, je tiens à en parler ici aussi, mais plus techniquement

Je me suis inspiré de ce plugin de Wordpress et je lui ai « piqué » la classe HTML2Markdown.

Ensuite, plutôt que de faire la requête à la main et donc passer beaucoup de temps à étudier le fonctionnement profond de known, j'ai fait un truc… sale… Oui… Idno\Common\Entity::getFromAll([], [], 99999); Je récupère les 99999 premières entités de la base. Sachant que je devais en avoir une 100aine et sans filtrer. C'était pour gagner du temps :-(

Enfin, j'ai formaté le JSON de la même manière que le plugin Wordpress suscité et l'affaire était pliée.

Ce fichier exporté peut être importé directement dans une install propre de Ghost.

Si ça vous intéresse le repo est . N'hésitez pas à forker !

]]>
Connaissez-vous cmdchallenge ? https://shikiryu.com/devblog/cmdchallenge 2017-02-13T00:00:00+01:00 2017-02-13T00:00:00+01:00 Non ? C'est un tort.

Il s'agit de challenges en bash. Une ligne de commande pour résoudre des problèmes de plus en plus difficiles.

Mes solutions à ce challenge ne sont pas forcément les plus simples mais elles sont justes et les plus courtes possibles ! À vous d'essayer :-)

]]>
Je viens de libérer le code de bookmarklet.shikiryu.com https://shikiryu.com/devblog/le-renouveau-de-bookmarklet.shikiryu.com 2017-01-22T00:00:00+01:00 2017-01-22T00:00:00+01:00 Mon application "read later by email", je l'utilise depuis 2010. Elle est pas bien connu mais je vois dans les logs qu'une demi-douzaine de personnes l'utilisent de temps en temps.

Et bien, je l'ai nettoyé, sécurisé un minimum (il reste un ticket à traiter) et mis en open-source. Vous pouvez donc maintenant l'installer sur n'importe quel serveur PHP.

Attention néanmoins, il faut que le serveur accepte l'envoi de mail, logique, mais je préviens ;-)

Vous pouvez trouver les sources sur son repo git.

]]>
Un utilitaire pour passer de Tumblr vers Shaarli https://shikiryu.com/devblog/tumblr-to-shaarli 2016-10-10T00:00:00+02:00 2016-10-10T00:00:00+02:00 Durant très longtemps (de février 2008 à décembre 2015 pour être exact), j'ai utilisé mon tumblr comme d'un gestionnaire de bookmark public.

Mais au bout d'un moment, il ne fonctionnait plus aussi bien et avec plus de 2000 liens, il devenait ingérable. Entre temps, j'ai installé un shaarli.

Il m'en a fallu du temps pour comprendre qu'on pouvait facilement importer des liens dans Shaarli.

J'ai donc décidé de coder un p'tit script permettant de passer les liens de tumblr à shaarli.

Cela m'a pris 3 bonnes soirées : une pour comprendre comment fonctionnait un import depuis wordpress (plugin existant dont je me suis inspiré), une autre pour coder le script et un dernier pour le nettoyer et le documenter.

Mon shaarli a donc pris plus de 2000 liens, taggués comme il faut, d'un coup !

Le script est aussi hébergé sur github : https://github.com/Chouchen/tumblr2shaarli?rel=nofollow

]]>
Un script PHP permettant de faire des backup sur un mutualisé https://shikiryu.com/devblog/shikiryu-backup 2015-08-19T00:00:00+02:00 2015-08-19T00:00:00+02:00 J'ai commencé ce projet quand je n'avais qu'un mutualisé chez OVH (très bien d'ailleurs, pour le prix, mais il me fallait plus).

Il permet de faire une sauvegarde de fichiers, dossiers, base de données vers divers destinations via de nombreux protocoles via PHP

Utilisant pas mal les factory, ce script est donc extendable quasi à volonté. La seule limite est donc 1 seule backup pour 1 seul transport par scenario.

Ah oui, car, à la manière de backup-manager ce script utilise des scenarii sous forme de JSON.

Dans ce scenario, vous décrivez 2 choses :

  1. L'élément à sauvegarder (liste de fichiers, la/les table/s et les identifiants de connexion, etc)
  2. Le moyen de transport de la sauvegarde (Dropbox et ses détails (token, dossiers, …), email, FTP, SFTP, autre dossier,etc)

Ça donne un truc du genre :

{
  "backup": {
    "Mysql": {
      "host"  : "mysql host",
      "login" : "mysql login",
      "pwd"   : "mysql password",
      "db"    : "mysql database",
      "tables": "*"
    }
  },
  "transport": {
    "Sftp": {
      "host"      : "your URL or IP",
      "port"      : 22,
      "login"     : "your new user name",
      "password"  : "your new user password",
      "folder"    : "/backup"
    }
  }
}

Ensuite, le scenario est lancé en 1 ligne de code (ou presque, si on veut garder les choses propres) :

<?php
include_once 'path/to/Scenario.php';
try {
    \Shikiryu\Backup\Scenario::launch('backup.json'); // whatever the file name you gave previously
} catch (\Exception $e) {
    echo $e->getMessage();
}

Le script est aussi sur Github, et même sur packagist

]]>
Mots mélés https://shikiryu.com/devblog/mots-meles 2015-02-21T00:00:00+01:00 2015-02-21T00:00:00+01:00

(Quasiment) tous les ans, je fais une carte de vœux de bonne année pour ma famille sous forme d'une page web avec quelque chose d'original. Cette année, c'était un jeu de mots mêlés.

Ayant trop de données personnelles dans ce projet, mais étant fier du moteur, j'ai décidé de publier les sources de celui ci.

En gros, le principe, une grille de lettre, une liste de mots à trouver et joindre les 2 via une action utilisateur (le drag and drop pour simuler le traçage d'une droite) sur un canvas.

Niveau dépendance, rien de bien compliqué, utilisation de :

  • Grunt (pour la compilation et minification du projet… aussi pour m'entrainer)
  • fabric (pour gérer le canvas facilement)

    Le reste n'est que de l'algo de base. Je l'ai aussi hébergé sur Github

]]>