{"version":"https:\/\/jsonfeed.org\/version\/1","title":"My Feed Title","home_page_url":"https:\/\/shikiryu.com\/devblog","feed_url":"https:\/\/shikiryu.com\/devblog.json","description":"Le blog d\u00e9veloppeur de Cl\u00e9ment Desmidt","author":{"name":"Cl\u00e9ment Desmidt"},"items":[{"title":"La petite histoire de la ville qui n'aime pas l'informatique","date_published":"2017-09-16T21:51:00+01:00","id":"https:\/\/shikiryu.com\/devblog\/la-petite-histoire-de-la-ville-qui-n-aime-pas-informatique","url":"https:\/\/shikiryu.com\/devblog\/la-petite-histoire-de-la-ville-qui-n-aime-pas-informatique","content_html":"
Tout d\u00e9buta lorsque, lors d'un d\u00e9veloppement pour un client, je fasse un test sur un code postal tap\u00e9 totalement al\u00e9atoirement : 24560<\/strong>.<\/p>\n Ce code postal existe, et est attribu\u00e9 \u00e0 plusieurs villes. N\u00e9anmoins, une en particulier a attir\u00e9 mon attention : 0.<\/p>\n\n Au d\u00e9part, je pensais qu'une ville s'appelait \"O\" comme l'eau et je trouvais \u00e7a fou mais en le collant dans mon IDE, j'ai vu que c'\u00e9tait un chiffre.<\/p>\n Impossible me dis-je ! Que nenni ! Une recherche Googol<\/a> me prouve le contraire avec le site education.gouv.fr<\/a>. Il semble qu'officiellement<\/em> 0 existe.<\/p>\n Pass\u00e9 l'\u00e9tonnement, je clique sur \"Localisez\" et arrive sur cette page de localisation<\/a> qui me dit toujours<\/strong> que \"0\" existe au code postal 24560. Arriv\u00e9 \u00e0 ce point, j'ai juste envie de d\u00e9m\u00e9nager l\u00e0 bas. S\u00e9rieusement.<\/p>\n C'est pour que dans un dernier \u00e9lan, je m'empresse de savoir o\u00f9 se trouve cette ville magique en cliquant sur situer sur la carte<\/em>. L\u00e0, une Google Maps (sigh) s'ouvre ne me montrant pas une ville appel\u00e9e 0<\/em> mais Faux<\/em>. Et l\u00e0, tout s'explique.<\/p>\n On sent bien que le gouverment utilise un tableur et que \"Faux\" s'est transform\u00e9 en \"0\" et que rien<\/strong> n'a \u00e9t\u00e9 corrig\u00e9 apr\u00e8s :)<\/p>"},{"title":"Script pour SSHFS","date_published":"2017-07-27T00:00:00+01:00","id":"https:\/\/shikiryu.com\/devblog\/script-sshfs","url":"https:\/\/shikiryu.com\/devblog\/script-sshfs","content_html":" Plus comme un petit pense-b\u00eate qu'un vrai article, voici comment je monte\/d\u00e9monte un dossier via SSHFS<\/p>\n En lan\u00e7ant ce script, \u00e7a toggle le mount\/unmount. Utile quand on perd la connexion !<\/p>","image":"\/user\/pages\/03.devblog\/script-sshfs\/folder-1460519_1280.png"},{"title":"Ma participation au MOOC Linux","date_published":"2017-05-12T00:00:00+01:00","id":"https:\/\/shikiryu.com\/devblog\/ma-participation-au-mooc-linux","url":"https:\/\/shikiryu.com\/devblog\/ma-participation-au-mooc-linux","content_html":" J'ai suivi un MOOC jusqu'au bout.<\/p>\n Ce MOOC sur la plate-forme Fun MOOC<\/a> avait pour intitul\u00e9 \u00ab L'essentiel pour ma\u00eetriser Linux<\/em> \u00bb.<\/p>\n Je ne savais pas trop \u00e0 quoi m'attendre avec 30 minutes de vid\u00e9os par semaine pendant 6 semaines. C'est bien court pour tous les sujets abord\u00e9s (distributions, lignes de commande, r\u00e9seau, manipulations de fichier, \u2026).<\/p>\n J'en suis fier m\u00eame si\u2026<\/p>\n\n Le sujet m'int\u00e9ressait et j'avais d\u00e9j\u00e0 des connaissances en auto-didacte. Je voulais v\u00e9rifier si elles \u00e9taient bonnes ; conclusion : elles le sont : voici mon attestation<\/a> acquise avec une note de 98% \u2212 les 2% \u00e9tant surtout d\u00fb \u00e0 la plate-forme, j'y reviendrai.<\/p>\n J'ai signal\u00e9 tous les d\u00e9fauts qui vont suivre \u00e0 l'\u00e9quipe suite \u00e0 l'examen final, je n'ai donc aucune honte \u00e0 les \u00ab afficher \u00bb ainsi.<\/p>\n C'est la 1\u00e8re fois que je suis un MOOC sur cette plate-forme et \u2026 je pense que c'est la derni\u00e8re.\nVoici une liste (non-exhaustive) de ce qui m'a d\u00e9\u00e7u, ralenti, bloqu\u00e9, carr\u00e9ment fait vomir :<\/p>\n Je suis d\u00e9sol\u00e9 pour l'\u00e9quipe de professeurs qui n'ont sans doute pas le mat\u00e9riel adapt\u00e9 mais les vid\u00e9os \u00e9taient moches. Les le\u00e7ons \u00e9taient lues depuis des slides toutes faites. Entendre quelqu'un lire un sommaire d'une voix monotone n'est pas motivant du tout.<\/p>\n Par cons\u00e9quence, je n'ai regard\u00e9 que la premi\u00e8re enti\u00e8rement, la seconde en avance rapide (seul avantage du lecteur vid\u00e9o) et pas du tout le reste.<\/p>\n Bien m'en a pris, j'ai r\u00e9ussi les quizzes sans les regarder. J'ai gagn\u00e9 du temps et de la confiance en ma capacit\u00e9 d'apprentissage en auto-didacte.<\/p>\n Pour avoir fait des MOOC sur d'autres plates-formes (coursera par exemple), d'habitudes apr\u00e8s les le\u00e7ons, je vais voir les commentaires, les questions ou des indices.\nL\u00e0, soit il n'y avait rien, soit des critiques, soit des questions (que je me posais) sur des questions de quiz incompr\u00e9hensibles.<\/p>\n Je suis quand m\u00eame bien content d'avoir cette attestation m\u00eame si, en v\u00e9rit\u00e9, elle ne vaut pas son statut !<\/p>"},{"title":"Limiter SFTP \u00e0 la home de l'utilisateur","date_published":"2017-04-07T10:11:00+01:00","id":"https:\/\/shikiryu.com\/devblog\/limiter-sftp-home-utilisateur","url":"https:\/\/shikiryu.com\/devblog\/limiter-sftp-home-utilisateur","content_html":" J'ai eu besoin d'un acc\u00e8s SFTP \u00ab s\u00e9curis\u00e9 \u00bb et surtout limit\u00e9 pour un utilisateur pr\u00e9cis sur un de mes serveurs.<\/p>\n Voici comment je m'y suis pris au final apr\u00e8s pas mal de tatonnements et d'erreurs.<\/p>\n Ajouter ceci \u00e0 la fin de Red\u00e9marrer SSH avec Il faut que Par s\u00e9curit\u00e9, on peut faire Merci \u00e0 partofthething<\/a> pour la r\u00e9ponse au probl\u00e8me de droit que j'avais sur ma Debian 8 (la ligne J'en ai parl\u00e9 sur le post de mon blog perso<\/a> mais c'est aussi un projet \u00e0 part enti\u00e8re, donc, je tiens \u00e0 en parler ici aussi, mais plus techniquement<\/p>\n\n Je me suis inspir\u00e9 de ce plugin de Wordpress<\/a> et je lui ai \u00ab piqu\u00e9 \u00bb la classe HTML2Markdown<\/a>.<\/p>\n Ensuite, plut\u00f4t que de faire la requ\u00eate \u00e0 la main et donc passer beaucoup de temps \u00e0 \u00e9tudier le fonctionnement profond de known, j'ai fait un truc\u2026 sale\u2026 Oui\u2026 Enfin, j'ai format\u00e9 le JSON de la m\u00eame mani\u00e8re que le plugin Wordpress suscit\u00e9 et l'affaire \u00e9tait pli\u00e9e.<\/p>\n Ce fichier export\u00e9 peut \u00eatre import\u00e9 directement dans une install propre de Ghost.<\/p>\n Si \u00e7a vous int\u00e9resse le repo est l\u00e0<\/a>. N'h\u00e9sitez pas \u00e0 forker !<\/p>"},{"title":"Connaissez-vous cmdchallenge ?","date_published":"2017-02-13T00:00:00+00:00","id":"https:\/\/shikiryu.com\/devblog\/cmdchallenge","url":"https:\/\/shikiryu.com\/devblog\/cmdchallenge","content_html":" Non ? C'est un tort.<\/p>\n Il s'agit de challenges en bash. Une ligne de commande pour r\u00e9soudre des probl\u00e8mes de plus en plus difficiles.<\/p>\n Mes solutions<\/a> \u00e0 ce challenge<\/a> ne sont pas forc\u00e9ment les plus simples mais elles sont justes et les plus courtes possibles !<\/em> \u00c0 vous d'essayer :-)<\/p>"},{"title":"Je viens de lib\u00e9rer le code de bookmarklet.shikiryu.com","date_published":"2017-01-22T00:00:00+00:00","id":"https:\/\/shikiryu.com\/devblog\/le-renouveau-de-bookmarklet.shikiryu.com","url":"https:\/\/shikiryu.com\/devblog\/le-renouveau-de-bookmarklet.shikiryu.com","content_html":" Mon application \"read later by email\"<\/a>, je l'utilise depuis 2010<\/a>. Elle est pas bien connu mais je vois dans les logs qu'une demi-douzaine de personnes l'utilisent de temps en temps.<\/p>\n Et bien, je l'ai nettoy\u00e9, s\u00e9curis\u00e9 un minimum (il reste un ticket \u00e0 traiter) et mis en open-source<\/a>. Vous pouvez donc maintenant l'installer sur n'importe quel serveur PHP. <\/p>\n Attention n\u00e9anmoins, il faut que le serveur accepte l'envoi de mail, logique, mais je pr\u00e9viens ;-)<\/p>\n Vous pouvez trouver les sources sur son repo git<\/a>.<\/p>"},{"title":"Un utilitaire pour passer de Tumblr vers Shaarli","date_published":"2016-10-10T00:00:00+01:00","id":"https:\/\/shikiryu.com\/devblog\/tumblr-to-shaarli","url":"https:\/\/shikiryu.com\/devblog\/tumblr-to-shaarli","content_html":" Durant tr\u00e8s longtemps (de f\u00e9vrier 2008 \u00e0 d\u00e9cembre 2015 pour \u00eatre exact), j'ai utilis\u00e9 mon tumblr<\/a> comme d'un gestionnaire de bookmark public.<\/p>\n Mais au bout d'un moment, il ne fonctionnait plus aussi bien et avec plus de 2000 liens, il devenait ing\u00e9rable. Entre temps, j'ai install\u00e9 un shaarli<\/a>.<\/p>\n\n Il m'en a fallu du temps pour comprendre qu'on pouvait facilement importer des liens dans Shaarli.<\/p>\n J'ai donc d\u00e9cid\u00e9 de coder un p'tit script permettant de passer les liens de tumblr \u00e0 shaarli<\/a>.<\/p>\n Cela m'a pris 3 bonnes soir\u00e9es : une pour comprendre comment fonctionnait un import depuis wordpress (plugin existant dont je me suis inspir\u00e9), une autre pour coder le script et un dernier pour le nettoyer et le documenter.<\/p>\n Mon shaarli<\/a> a donc pris plus de 2000 liens, taggu\u00e9s comme il faut, d'un coup !<\/p>\n Le script est aussi h\u00e9berg\u00e9 sur github : https:\/\/github.com\/Chouchen\/tumblr2shaarli?rel=nofollow<\/p>"},{"title":"Un script PHP permettant de faire des backup sur un mutualis\u00e9","date_published":"2015-08-19T00:00:00+01:00","id":"https:\/\/shikiryu.com\/devblog\/shikiryu-backup","url":"https:\/\/shikiryu.com\/devblog\/shikiryu-backup","content_html":" J'ai commenc\u00e9 ce projet quand je n'avais qu'un mutualis\u00e9 chez OVH (tr\u00e8s bien d'ailleurs, pour le prix, mais il me fallait plus).<\/p>\n Il permet de faire une sauvegarde de fichiers, dossiers, base de donn\u00e9es vers divers destinations via de nombreux protocoles via PHP<\/a><\/p>\n\n Utilisant pas mal les factory, ce script est donc extendable quasi \u00e0 volont\u00e9. La seule limite est donc 1 seule backup pour 1 seul transport par scenario.<\/p>\n Ah oui, car, \u00e0 la mani\u00e8re de Dans ce scenario, vous d\u00e9crivez 2 choses :<\/p>\n \u00c7a donne un truc du genre :<\/p>\n Ensuite, le scenario est lanc\u00e9 en 1 ligne de code (ou presque, si on veut garder les choses propres) :<\/p>\n Le script est aussi sur Github<\/a>, et m\u00eame sur packagist<\/a><\/p>"},{"title":"Mots m\u00e9l\u00e9s","date_published":"2015-02-21T00:00:00+00:00","id":"https:\/\/shikiryu.com\/devblog\/mots-meles","url":"https:\/\/shikiryu.com\/devblog\/mots-meles","content_html":" (Quasiment) tous les ans, je fais une carte de v\u0153ux de bonne ann\u00e9e pour ma famille sous forme d'une page web avec quelque chose d'original. Cette ann\u00e9e, c'\u00e9tait un jeu de mots m\u00eal\u00e9s.<\/p>\n\n Ayant trop de donn\u00e9es personnelles dans ce projet, mais \u00e9tant fier du moteur, j'ai d\u00e9cid\u00e9 de publier les sources<\/a> de celui ci.<\/p>\n En gros, le principe, une grille de lettre, une liste de mots \u00e0 trouver et joindre les 2 via une action utilisateur (le drag and drop pour simuler le tra\u00e7age d'une droite) sur un canvas.<\/p>\n Niveau d\u00e9pendance, rien de bien compliqu\u00e9, utilisation de :<\/p>\n fabric<\/strong> (pour g\u00e9rer le canvas facilement)<\/p>\n Le reste n'est que de l'algo de base. Je l'ai aussi h\u00e9berg\u00e9 sur Github<\/a><\/p>\n<\/li>\n<\/ul>","image":"\/user\/pages\/03.devblog\/mots-meles\/motmeles.png"}]}
#!\/bin\/sh\n\nsshfs -o port=2200,follow_symlinks user@192.168.0.42:\/var\/www\/ \/var\/www\/web\nif [ \"$?\" -eq 0 ]; then\n echo \"\/var\/www\/web volume mounted.\"\nelse\n echo \"Error mounting \/var\/www\/web.\"\n fusermount -uz \/var\/www\/web\n if [ \"$?\" -eq 0 ]; then\n echo \"\/var\/www\/web volume unmounted\"\n fi \nfi<\/code><\/pre>\n
Une plate-forme de pi\u00e8tre qualit\u00e9<\/h3>\n
\n
Des vid\u00e9os du m\u00eame acabit<\/h3>\n
Un \u00ab forum \u00bb vide<\/h3>\n
Conclusion<\/h3>\n
\/etc\/ssh\/sshd_config<\/code> :<\/p>\n
# Subsystem sftp internal-sftp\nSubsystem sftp internal-sftp -f AUTH -l VERBOSE\n\n# This section must be placed at the very end of sshd_config\n# Match Group sftponly\nMatch User tartenpion\nChrootDirectory %h\nForceCommand internal-sftp\n# ForceCommand \/usr\/lib\/openssh\/sftp-server\n# For additional paranoia, disallow all types of port forwardings.\nAllowTcpForwarding no\nGatewayPorts no\nX11Forwarding no<\/code><\/pre>\n
sudo service ssh restart<\/code> par exemple<\/p>\n
\/home<\/code> et
\/home\/tartenpion<\/code> soit \u00e0
root<\/code> en mode 755. Donc :<\/p>\n
sudo chown root \/home\nsudo chown root \/home\/tartenpion\nsudo chmod 755 \/home\nsudo chmod 755 \/home\/tartenpion<\/code><\/pre>\n
usermod tartenpion -s \/bin\/false<\/code> afin que
tartenpion<\/code> ne puisse qu'utiliser SFTP et pas SSH.<\/p>\n
Subsystem sftp internal-sftp -f AUTH -l VERBOSE<\/code> au lieu de
Subsystem sftp internal-sftp<\/code> (qu'on voit partout) ou de
Subsystem sftp \/usr\/lib\/openssh\/sftp-server<\/code> (que j'avais essay\u00e9 et qui fonctionnait\u2026 presque)<\/p>"},{"title":"Un utilitaire pour passer de Known vers Ghost","date_published":"2017-02-28T00:00:00+00:00","id":"https:\/\/shikiryu.com\/devblog\/known-to-ghost","url":"https:\/\/shikiryu.com\/devblog\/known-to-ghost","content_html":"
Idno\\Common\\Entity::getFromAll([], [], 99999);<\/code> Je r\u00e9cup\u00e8re les 99999 premi\u00e8res entit\u00e9s de la base. Sachant que je devais en avoir une 100aine et sans filtrer. C'\u00e9tait pour gagner du temps :-(<\/p>\n
backup-manager<\/code> ce script utilise des scenarii sous forme de JSON.<\/p>\n
\n
{\n \"backup\": {\n \"Mysql\": {\n \"host\" : \"mysql host\",\n \"login\" : \"mysql login\",\n \"pwd\" : \"mysql password\",\n \"db\" : \"mysql database\",\n \"tables\": \"*\"\n }\n },\n \"transport\": {\n \"Sftp\": {\n \"host\" : \"your URL or IP\",\n \"port\" : 22,\n \"login\" : \"your new user name\",\n \"password\" : \"your new user password\",\n \"folder\" : \"\/backup\"\n }\n }\n}<\/code><\/pre>\n
<?php\ninclude_once 'path\/to\/Scenario.php';\ntry {\n \\Shikiryu\\Backup\\Scenario::launch('backup.json'); \/\/ whatever the file name you gave previously\n} catch (\\Exception $e) {\n echo $e->getMessage();\n}<\/code><\/pre>\n
\n