Deblan blog

Développement

Fork, le serpent qui se mord la queue

Le monde du logiciel libre est vaste et c'est sans doute la force mais aussi le point faible de ce milieu. Quand j'ai un besoin d'une fonctionnalité, je prend le temps de faire le tour des solutions logiciels qui la comblent. Celle qui me conviendra le plus sera bien sur la solution retenue. Pour rentrer plus rapidement dans le sujet, j'ai envie de taper un peu sur une mode qui s'étend trop rapidement : le fork.

Le fork consiste à récupérer les sources d'un projet et de faire son propre projet avec (modulo des modifs). Dans l'absolu c'est génial et c'est l'essence même du logiciel libre : prendre, modifier et éventuellement publier. Je trouve ça parfait quand il s'agit de hacker pour un besoin précis. Je trouve ça aussi génial quand l'objectif et de vraiment modifier le système et de partir dans une autre optique que le projet initial. Seulement je trouve ça débile de forker un projet quand l'effort de développement pourrait être mutualisé. Quel est l'intérêt d'avoir deux équipes de dev qui font presque la même chose, l'une se reposant sur l'autre, sans une résultante commune des travaux ? Quand je vois des projets comme CrunchBang (un fork de Debian) qui ne fourni qu'une simple configuration d'OpenBox, ça me fait mal aux fesses : pourquoi ne pas faire un package qui pourrait s'étendre à d'autres distributions ? Comptez le nombre impressionnant de distributions Linux qui sont des forks d'Ubuntu et qui ne servent à rien, vous allez prendre peur (XUbuntu, Xubuntu, FluxBuntu, PureOS, etc.).

C'est vraiment lassant de voir arriver des forks alors que leurs développeurs pourraient simplement contribuer vers l'UpStream...

« Fork » n'est pas synonyme de « contribution » !


Projet : du P2P dans une page web

J'ai beaucoup de convictions pour Internet. je considère la centralisation sur "Internet" comme uné énormité est un mauvais retour dans le lointain passé du 3515. Globalement, ce n'est pas mes machines à la maison et ma grande gueule qui va changer le monde. Comment faire avancer un peu plus le Schmilblick alors ?!

Depuis le début de la semaine je suis sur un projet qui vise à décentraliser le contenu d'un site internet. Dit comme ça, on s'imagine le mec qui va poser ces fichiers sur 50 serveurs HTTP différents et qui sera content de lui...bah vous n'avez presque pas tout à fait tort ! Ce que j'aimerais faire est simple à comprendre : à la place d'héberger un contenu potentiellement lourd sur mon serveur, je vais le proposer en torrent. Seulement, je ne veux pas un bête lien que l'utilisateur va ouvrir manuellement avec son client P2P favori. L'objectif est de coller une couche javascript dans la page qui va contacter le fameux client P2P et une fois le téléchargement terminé, affichera le contenu dans la page.

Voila un contenu HTML type avant :

<video src="torrent://tracker.du.torrent.com/fichier.ogv.torrent"></video>

...et après :

<video src="file:///chemin/vers/fichier.ogv"></video>

J'ai imaginé plusieurs méthodes et pour commencer (et prouver que ça peut fonctionner), je vais utiliser un daemon coté client (en plus du navigateur). Les websockets html5 auront la charge de communiquer avec celui-ci.

Diagramme de séquence projet torrent

Je souhaite avoir un rendu fonctionnel et pouvoir utiliser des torrents dans une page (même si ce n'est pas pratique et rapide). Si une solution similaire est suivie et améliorer avec des gens 100 fois plus skillés que moi, alors monsieur Toutlemonde pourrait faire son Youtube dans sa grotte...euh garage...non : maison !


[Retour] Contrer des robots stupides sans captcha

C'est un post rapide qui va permettre de faire un retour sur la solution pour contrer les robots sans utiliser de captcha.

Pour rappel, le concept est simple : on place dans l'action du formulaire un mot clé qui invalide sa soumission. Ce mot clé est supprimé quand l'utilisateur déplace sa souris dans la page qui contient ce formulaire. Cette méthode admet que l'utilisateur a activé le Javascript sur son navigateur.

Après quelques mois d'utilisation, que peut-on en conclure ? Cette méthode fonctionne du feu de dieu ! Je suis passé à coté de plus de 50 milles commentaires indésirables. La crainte que j'avais se portait sur les supports mobiles : finalement, aucune inquiétude, ça fonctionne très bien sur les smartphones et les tablettes.

J'ai implanté cette solution sur un blog Wordpress et ça fonctionne très bien également...À croire que les développeurs de robots sont des manches.

Évidement, tout développement spécifique de robot va contrer cette sécurité, mais c'est assez rare finalement.

Sécurité informatique


Wordpress : serveur de médias

J'héberge depuis quelques temps maintenant le blog d'une amie (Mizryl) sous Wordpress. Pas mal d'images sont postées et elles sont souvent grandes ce qui implique des poids de fichiers relativement importants. Le problème majeur c'est que derrière ma ligne ADSL, uploader 500Ko ou 1Mo ça prend plus de temps que chez un hébergeur fibré. J'ai quelques serveurs dédiés chez des prestataires et je me suis dis qu'en utiliser un pour les médias du blog serait une bonne idée.

Comment utiliser un serveur externe pour gérer les médias de Wordpress ?

Mes contraintes étaient les suivantes : ne pas modifier la gestion des médias dans le backend du site et ne surtout pas être dépendant de ce serveur pour l'hébergement des médias.

Diagramme de séquence

Diagramme de séquence

Dans un premier temps, j'ai créé un sous domaine de mizryl.fr qui est medias.mizryl.fr. Ce dernier pointe sur un serveur dédié chez Online (dedibox). J'ai configuré Apache pour avoir un répertoire de travail sur ce serveur.

Dans la gestion des réglages de Wordpress, j'ai modifié l'adresse complète pour les fichiers par http://medias.mizryl.fr.

Cette configuration change les URL des médias de http://mizryl.fr/wp-content/uploads/aaaa/mm/mon_fichier.ext à http://medias.mizryl.fr/aaaa/mm/mon_fichier.ext. Cependant, ce paramétrage ne modifie en rien le comportement de Wordpress : les fichiers sont toujours uploadés sur le serveur qui héberge le blog (une de mes contraintes).

Si je m'arrête ici, aucun média ne sera accessible : on aura bien les URL vers la dedibox mais aucun média est hébergé dessus. Pour ce faire, j'ai placé sur le serveur de médias deux fichiers : un script pour va téléchager les médias sur mizryl.fr et un htaccess va faire pointer les erreurs 404 vers le script.

Le htaccess : .htaccess :

ErrorDocument 404 /dl.php

Le script de téléchargement : dl.php

Il va récupérer les requêtes qui ont généré une erreur 404. Il va effectuer le téléchargement du médias et rediriger l'utilisateur dessus.

<?php

$request_uri = str_replace('..', '', $_SERVER['REQUEST_URI']);
$url         = 'http://mizryl.fr/wp-content/uploads'.$request_uri;
$dirs        = explode('/', preg_replace('`^/*([0-9]+/[0-9]+/)[^\s]+`', '$1', $request_uri));
$media       = preg_replace('`^/*[0-9]+/[0-9]+/([^\s]+)$`', '$1', $request_uri);

$remote_media_content = @file_get_contents($url);

if (!$remote_media_content) {
    die("Download failed");
}

foreach ($dirs as $d) {
    if (trim($d) == "") {
        continue;
    }

    if (!is_dir($d)) {
        mkdir($d);
    }

    chdir($d);
}

if (!$remote_media_content) {
    die("Download failed");
}

file_put_contents(
    $media,
    $remote_media_content
);

header('Location: '.$media.'?'.time());

Cette méthode fonctionne nickel. Si vous avez des idées pour améliorer l'idée, ça sera avec plaisir !


[Astuces] Wall deblan : API

Le wall de deblan est un outil que j'utilise très souvent. Pour rappel, c'est un service similaire à Pastebin qui permet de coloriser du code et de le partager facilement.

Jusqu'à présent, il existait deux méthodes pour l'utiliser. La première est la plus classique : se rendre sur le site est remplir le formulaire. La seconde consiste à passer par un script et faire une requête HTTP.

Une belle mise à jour à été faite aujourd'hui et vous pouvez envoyer un mail et recevoir l'adresse du code en réponse. Le principal intérêt est qu'il n'est plus obligatoire de se trouver sur une machine avec le script ou un navigateur.

Comment poster un code via un email ?
Cette fonctionnalité a été désactivée.

La procédure est très simple : vous devez créer un message destiné à wallapi@deblan.fr. L'objet du mail sera le langage associé à la colorisation et le corps du message sera le code à coloriser.

La personne qui envoie le message sera celle qui recevra le lien du wall en réponse.

Voici une commande type :

$ cat fichier_php | mail -s php -r foobar@deblan.fr wallapi@deblan.fr

Si vous souhaitez passer par un script, je vous invite à télécharger celui ci.

Voici trois commandes type :

$ /chemin/vers/le/script fichier.php php
$ cat fichier_php | /chemin/vers/le/script - php
$ cat fichier_php | /chemin/vers/le/script -

Dans les 3 cas, l'url du wall sera affichée.