[NodeJs] Spawn ou la création de processus fils

Un petit mot sur la façon de créer des processus fils sous node.
Pas compliqué et bien pratique, pour réaliser le cas de test d’une nouvelle fonctionnalité de npm par exemple.

Regardons le prototype:
child_process.spawn(command, [args], [options])
command correspond au programme appelé, ls, grep ou autre…
[args] est un tableau contenant tous les arguments qui seront passés au programme appelé via command.
[options] Plusieurs possibilités, dont le fait de pouvoir définir des règles pour le comportement de stdin, stdout et stderr.

Exemple:

//Set the no-proxy configuration
var noProxy = spawn(node, [npm, 'config', 'set', 'noproxy=localhost']
, { stdio: 'ignore' });

Ici, on crée un processus fils node avec pour paramètres: npm config noproxy=localhost.
On indique également que les entrées et sorties seront ignorées: { stdio: ‘ignore’ }.

Il est bien sûr intéressant de pouvoir effectuer une action particulière dès que notre fils se termine. Ceci est possible grâce à .on(‘exit’, function() { //CODE } ).
Soit avec l’exemple précédent:

noProxy.on('exit', function (code) {
console.log('noProxy process exited with exit code '+code);
});

Concernant les entrées/sorties, il est possible de laisser le processus écrire dans celles du processus parent en spécifiant cette fois: { stdio: ‘inherit’ }.
Un autre point utile consiste à récupérer le contenu de la sortie standard du processus fils.
Pour ce faire, on utilise les options suivantes: [‘ignore’, ‘stream’, ‘ignore’].
stdin et stderr sont ignorés, seule reste stdout.
On peut donc récupérer les données via .stdout.on(‘data’, function (data) { //CODE } ) , où data contient les données.
Pour reprendre l’exemple de npm, on peut ainsi récupérer la valeur de la variable de configuration proxy et la stocker dans une variable locale proxySave

var getProxy = spawn(node, [npm, 'config', 'get', 'proxy']
, ['ignore', 'stream', 'ignore']);
getProxy.stdout.on('data', function (data) {
proxySave = data.toString().trim();
});

Voilà pour les principales infos concernant spawn. Pour en savoir plus, direction la doc officielle ;).

[Conky] Script de démarrage

Conky est maintenant configuré… Prochaine étape, le démarrage automatique à l’ouverture de la session. On se place donc dans notre home où on va créer un dossier .conky pour y placer le script: mkdir .conky. On va ensuite écrire le script dans un fichier que l’on nommera .conkyboot.sh : vim .conkyboot.sh; utilisez ici l’éditeur avec lequel vous êtes à l’aise, nano, vi, vim ou autres.

Le script est très simple et tient en trois lignes:

#!/bin/bash
sleep 20;
conky -d;

Il faut ensuite rendre le fichier exécutable: chmod +x .conkyboot.sh.
Dernière étape, programmer l’exécution du script à chaque démarrage de la session. Pour cela, onglet Système – Préférences – Applications au démarrage. Puis Ajouter, et compléter le champ avec /home/user/.conky/.conkyboot.sh en remplaçant user par votre nom d’utilisateur. Remplissez le champ Nom avec Conky par exemple.

Et voilà, votre conky devrait désormais s’afficher automatiquement 20 secondes après l’ouverture de votre session.

[Vidéo] Court métrage Plurality

Voilà maintenant un peu plus d’une semaine que le court métrage Plurality peut être visionner sur Youtube. Ce film de Dennis Liu nous plonge dans un New York sous surveillance. Une surveillance comme toujours imposée au nom de la sécurité et de la commodité. La moindre action s’effectuant grâce à votre ADN, élément unique permettant de vous identifier. Néanmoins, dans ce monde Orwellien, des pluralités sont régulièrement constatées…

Après une dizaine d’heure de travail, j’ai pu ajouter les sous-titres anglais et français sur le site Universal Subtitles. Il y a malheureusement quelques phrases manquantes que je n’arrive pas à décrypter, n’hésitez donc pas à améliorer les sous-titres! Voilà le lien vers la vidéo: PLURALITY.

Une vidéo qui n’est donc pas sans rappeler des œuvres littéraires bien connues comme bien sûr 1984 de George Orwell. Dans le même esprit et plus récent, on pensera également à l’excellent livre d’Alain Damasio: La Zone du Dehors.

Sur ce, bon visionnage!

Git(hub): les commandes pour démarrer.

Voilà les commandes utiles pour récupérer un dépot github et commencer à développer son projet ou contribuer, ici en prenant l’exemple de npmconf.

On récupère les données du dépôts
git clone https://github.com/username/npmconf.git
cd npmconf
On ajoute le dépôt parent dans le cas d’un fork, pour être en mesure de faire des merges.
git remote add upstream https://github.com/isaacs/npmconf.git
On récupère les données du dépôts parent
git fetch upstream

Un petit point de configuration pour pouvoir faire un push correctement.
On édite .git/config:

[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = https://github.com/vvision/npmconf.git
[branch "master"]
remote = origin
merge = refs/heads/master
[remote "upstream"]
url = https://github.com/isaacs/npmconf.git
fetch = +refs/heads/*:refs/remotes/upstream/*

On remplace la ligne url = https://github.com/vvision/npmconf.git par
url = https://username@github.com/vvision/npmconf.git .
En mettant votre nom d’utilisateur en lieu et place de username.
De cette façon, il n’y a plus qu’à entrer son mot de passe lors du push.

[Conky] Afficher son IP publique

J’avais laissé Conky de côté un petit moment, et j’ai pris le temps ce soir de le réinstaller. Pas encore touché au démarrage automatique lors de la connexion, je veux d’abord vérifier s’il le fait de lui même ou pas. Mais trêve de bavardage, le sujet qui m’intéresse est celui de l’affichage de l’IP publique. J’avais déjà trouver comment afficher mon adresse ip locale et l’adresse de la passerelle.

La solution que j’ai trouvé consiste à aller interroger le site ip.nu avec curl. Néanmoins, le taux de rafraîchissement de conky étant de 2s dans mon cas, il faut trouver un moyen de lancer la commande à un intervalle beaucoup plus long. Notre adresse IP publique n’étant de toute façon pas susceptible de changer toutes les 10s.

Pour ce faire, on utilise donc texeci tempsEnSeconde qui nous permet d’appeler la commande à intervalle de temps régulier. On a donc: texeci 400 curl ip.nu. Toutes les 5 minutes, on interroge donc le site ip.nu. Toutefois, en l’état, le retour est le suivant:

<html>
    <head>
        <title>ip</title>
    </head>
    <body>
        Your IP address is 80.42.124.42
    </body>
</html>

Pas très pratique à afficher dans notre conky. Prochaine étape donc, la récupération dans toute ces balises, de l’adresse ip avec comme vous le devinez certainement un petit grep et une regex. Ce qui nous donne: curl ip.nu | grep -Ewo ‘\b([0-9]{1,3}\.){3}[0-9]{1,3}\b’. Résultat de cette commande: 80.42.124.42. Nous avons notre ip! Par précaution, on peut encore appliquer un uniq, au cas le site se mettrai à renvoyer plusieurs fois l’ip dans sa requête. Donc finalement: curl ip.nu | grep -Ewo ‘\b([0-9]{1,3}\.){3}[0-9]{1,3}\b’ | uniq. On notera au passage que Richard M. Stallman est l’un des auteurs de uniq

AUTHOR
       Written by Richard M. Stallman and David MacKenzie.

On peut maintenant ajouter notre code dans le fichier de conf .conkyrc, ce qui nous donne:

${alignc}Public IP: ${texeci 400 curl ip.nu | grep -Ewo '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' | uniq}