About July

Ripped from Parano: PHASE 1 -Briarde d'origine, je suis une parisienne d'adoption depuis décembre 2003. -Deuxième enfant, de trois ans plus jeune que mon aîné et neuf de plus que ma cadette, ils sont pour moi la preuve que la famille n'est pas forcément nos ascendants mais nos colatéraux. -Enfant indigne je considère que les liens du sang pour un parent valent moins que les liens naissant du respect et du rôle initiatique. -Informaticienne j'aime les machines car elles n'ont que les lacunes de leur concepteurs au pire. -Ludophile, je pratique de multiples jeux auxquels j'ai été initiée par mon aîné. -Jeux de société pour être avec autrui. -Jeux vidéos pour s'émerveiller dans des mondes différents. -Jeux de rôles pour imaginer. -Consciente que notre bien être joue sur ce que nous pouvons faire depuis que mes études en fac n'ont pas abouti tandis que je découvrais l'école buissonière. -Amoureuse depuis plus de trois ans, j'en ai déduit que ne pas chercher l'amour est le meilleur moyen de le trouver. -Emmerdeuse et indépendante même ma mère ne m'a pas supporté parfois car elle voulait imposer sans me convaincre. -Se faire des copains n'est pas plus difficile que de sourire sincèrement. Depuis j'ai des points de chute dans des centaines de lieux - Merci Martin pour le Danemark, merci Emily pour le Royaume Uni, merci Sandrine pour l'Australie... -Militante je brandis le poing en l'air pour défendre les libertés. -World of Warcraft c'était pour une expérience de MMO RPG. PHASE 2 -Gémeaux ascendant Balance, Singe aussi parait il, je cherche souvent plus de trois sourires dans les rames de métro parisiennes. -Plusieurs fois dans ma vie j'ai écouté une même chanson pendant douze heures d'affilées. -Savez ce qu'est la nage à sec? Une torture pirate! C'est fou ce que l'Humanité est imaginative pour faire mal du coup ca fait plein de choses à lire. -J'ai loupé Isaac Asimov hélas, j'aurai aime dîner avec lui. -Un jour mes moulages seront devant moi et j'en serai fière. -Radio someone still love you... et en plus je la fais un peu vivre ( http://bf.ftmvariations.org/ ). -Mon image me sert. PHASE 3 [CENSURE] PHASE 4(2) (By Zax): Nothin else matter ! We'll ride on the wild side of life !

Moati & Chandon, mauvais cru ?

Le documentaire de Serge Moati sur les trans sera diffusé le 17 mai, la petite fiche officielle sur le sujet étant disponible sur le site de france 5.

Et déjà sur Minorités, un article, signé Hélène Hazéra, est disponible. Intitulé Basta avec vos fantasmes sur les trans, il me fait persister sur la conclusion de ce billet, à savoir l’échec quasi-systématique de nos participations individuelles dans une démarche médiatique face à un œil étranger à la question à porter des messages politiques.

Ironiquement, l’auteure reproche de s’attarder sur des détails de son existence ce qu’offre exactement la longue introduction. Mise en abîme ?
Néanmoins, la conclusion limpide se résume dans cette question :

de quelle autre minorité peut-t-on parler ainsi à la télé ?

Car au-delà du jeu des ressemblances, c’est l’enjeu médiatique, peut-on même parler d’une minorité qui se compose forcément de milliers d’individualités? Le projet de la société du spectacle est-il compatible avec l’éthique?

nb=$( ps -fu root | grep “mon_programme” | grep -v grep | wc -l ) … FAILED 2/2

Alors Luke, as-tu réussi à résoudre cette énigme?

Bien, bien, bien, deuxième round sur notre ligne de code pour compter le nombre d’instances de mon_programme par lui même. Alors, qui a fait le coup ?

And the winner is…

$()

La substitution de commandes ! Aussi simple ou bizarre que cela puisse paraître, le problème provient de ce mécanisme. Pourquoi ?
Dans le précédent billet, je précisais qu’une substituions de commandes crée un sous-shell qui porte le nom du shell parent. Dans notre cas, mon_programme va donc lancer un sous-shell lui aussi nommé mon_programme pour exécuter les commandes inclues dans le $() afin de récupérer la sortie standard de la dernière commande.

C’est aussi bête que cela mais réaliser une observation dans un contexte perturbe ce même contexte et, ici, de manière à tromper l’observation elle-même.

Mais encore ?

Les informations captées par ps sont ici la source du problème. Lorsque nous lançons notre programme mon_programme, nous sommes assurés que le ps le verra ainsi que toute autre instance déjà présente. Mais nous pourrons aussi voir des instances supplémentaire avec cet appel à un sous-shell où s’exécuteront  justement la commande ps et les filtres qui s’ensuivent.
Hélas, le résultat restant imprévisible, cela reste définitivement une façon de faire à proscrire.

Chemins de traverse

Certains commentaires ont proposés des solutions élégantes MAIS, AIX n’est pas Linux, et la version de ps disponible n’a par exemple pas l’option -C pour faciliter notre existence.

Post-mortem

L’approche autopsie est intéressante, à savoir faire une simple commande ps qui écrira un fichier puis le manipuler, afin de ne pas perturber le phénomène par son observation. C’est lent, mais c’est sûr.

ps -fu root >mon_programme.tmp
nb=$( grep -c mon_programme mon_programme.tmp )

C’est la technique à privilégier en cas de reprise d’un existant douteux puisque l’approche ci-dessous suppose d’avoir opté préalablement pour une traçabilité du programme.

Petit Poucet

Une solution est d’utiliser un fichier qui contiendrait le PID, l’identifiant numérique de chaque programme qui est actuellement connu du système. C’est une solution élégante et courante mais qui impose de traiter un cas de figure supplémentaire, à savoir l’existence d’un fichier PID mais sans programme en cours d’exécution, par exemple du à l’arrêt inopiné de celui-ci (NDLA : et non, lockfile n’est pas disponible nativement sous AIX mais oui, utiliser un fichier pour le PID, c’est le bien !).

A tout prendre, celle-ci a ma préférence au vu de son usage très courant et très sûre, puisque l’on peut même gérer les cas de plantage a priori.

Going offline

En fait, la méthode d’une approche totalement à chaud est à bannir et l’usage de marqueurs comme un PID file devrait être plus qu’une habitude mais un automatisme. Si vous ne l’avez jamais fait, lisez les fichiers de démarrage des daemons sur Unix/Linux, le plus souvent dans /etc/init.d pour voir comment le statut est vérifié, c’est très formateur.

Quant à moi, je prêcherai de mon mieux dans le monde “professionnel” pour qu’enfin les empilements de grep cessent de corrompre la vision du monde ;)

Le mariage du Figaro

Titre aisé pour un billet impromptu, l’écriture de la suite du précédent ayant donc encore à souffrir un retard.
ForcéE d’utiliser mon webmail la poste pour des raisons de stabilité, je me retrouve parfois de nouveau confrontéE à son portail et donc ses informations.

Un titre accroche mon œil sur les violences en milieu médical, mais comme il s’agit du Figaro, le sens sera bien sûr des patients vers les médecins.
Soit. Je lis un article qui parle d’un observatoire qui a constaté une “nette aggravation”. C’est tout. Pas de chiffres, pas de liens vers des publications de cet observatoire1, donc déjà, je répare cet oubli, surtout avec une tournure aussi litigieuse : Recensement national des incidents – Année 2009

Donc primo les chiffres sont stables en volume, avec même un léger recul en 2009, seule la typologie  se modifie avec une hausse des agressions physiques après une variation de 5% sur 1 an, de 11  16%, retrouvant le niveau de 2004, sachant que l’observatoire date lui même de 2003.
Ajoutons que les incidents liés  la psychiatrie ne sont pas majoritaires et les motifs principaux sont plus relatifs à des griefs simples comme le délai, un vol ou sa tentative et des refus ou reproches sur la prescription d’un traitement ou d’un arrêt de travail. Donc, plaisir personnel face à certaines harangues que nous eûmes à subir, non les personnes atteintes ente autre de schizophrénie ne vont pas anéantir la société.

Mais mon vrai malaise réside dans les commentaires de l’article et les 2 articles connexes, relatant un cas à Créteil et un cas  à Soyaux. On y parle, même pas à demi-mots, d’une menace rampante liée forcément  l’immigration.
Donc l’horreur me saisit en relisant le nom de Christiane Georgeon, agresseuse présumée de l’affaire à Soyaux, et je découvre la menace Vosgienne qui pèse sur nos têtes !!!!
De même, les commentaires sur l’affaire à Créteil sont saisissants, supposant que l’agresseuse déguisée en infirmière devait faire tâche avec une peau sans doute moins blanche que sa blouse. Les commentateurs auraient-ils oublié de voir le monde autrement que depuis une vision ayant plus de 50 ans d’âge ?

  1. Observatoire de la sécurité des médecins []

nb=$( ps -fu root | grep “mon_programme” | grep -v grep | wc -l ) … FAILED 1/2

Bon voici un billet sans doute “technique” pour qui n’en fait pas du tout mais il est assez simple, si, si promis, et représentatif d’un problème courant sur les serveurs, à savoir qu’un programme vérifie à son lancement qu’il n’est pas déjà lancé afin d’éviter des collisions dans le traitement de son activité.
L’idée est donc de compter le nombre d’instances et de prendre nos décisions sur cette base et c’est LA ligne en charge de cette activité que je propose pour analyse.

Il m’a été inspiré par les deux heures de parlottes dans mon open-space d’autres personnes dont j’ai fini par voir un peu marre et que j’ai donc aidées à résoudre ce problème.
Pour les fans du docteur Layton, sortez votre haut de forme !

Filtres

En Unix, il existe de nombreux programmes que l’on nomme filtre car ils n’ont d’autre usage que de “tamiser” un contenu selon nos besoins. Donc réellement leurs actions sur le système sont nulles, elles ne changent pas la résolution de l’affichage à l’écran ni ne permettent de récupérer les “cables” américains… tout au plus de les trier ;)

grep

Un des plus fameux filtres, il permet de rechercher une séquence de caractère paramétrable et de signaler son absence, sa présence, éventuellement son nombre d’occurrence, ça dépend des options souhaitées. Un exemple, si grep recherchait le mot “chat” dans le fichier fic1 donc le contenu serait le suivant:

Le chat mange des os
Le chien mange des poissons

grep me retournerait par défaut :

# grep chat fic1
Le chat mange des os

L’option ‘-v‘, qui apparait dans la seconde occurrence, permet elle de filtrer à l’envers, à savoir ne retenir que les lignes où la chaîne n’apparait. Dans le cas de fic1 et de la recherche précédente, nous aurions:


# grep -v chat fic1
Le chien mange des poissons

wc

Non pas le canard, encore un autre filtre qui signifie en fait “Word Count” et donc compte les mots, les caractères et les lignes. L’option ‘-l‘ lui demande de n’indiquer que le nombre de lignes lues. Sur notre fic1, cela donnerait :

# wc -l fic1
2 /tmp/fic1

Commandes

Là, il s’agit de programme qui ont une réelle capacité à obtenir des informations du système ou de le modifier. Ici, une seule suffit au vu du but annoncé, à savoir ce qui est en train de tourner !

ps

Là encore, cette commande a une signification à savoir “process status”. C’est un peu comme le gestionnaire des tâches de windows, on sait ce qui fonctionne, qui le fait fonctionner, etc
Les options ici sont assez simples ‘-f‘ pour full afin que la commande nous offre un listing complet et ‘-u‘ pour limiter néanmoins ce listing à l’utilisateur root, à savoir l’administrateur système1.

Shell

Bon, tous nos commandes et nos filtres, ne vivent pas dans le néant et ce qui permet de les saisir, c’est ce qu’on appelle le shell, littéralement une coquille. Dans le monde Unix IBM, par défaut, c’est un shell plaisamment appelé Korn Shell 88, vous pouvez headbanger.

Ce shell a la gentillesse d’offrir la gestion des variables, à savoir associer un identifiant à une valeur, les pipes, à savoir faire de la plomberie pour brancher une suite de programmes entre eux, et la substitution de commandes avec $(), qui permet de remplacer le contenu entre les parenthèses par les valeurs retournées par les programmes qu’elle contient. Mais développons brièvement.

Variables

C’est un incontournable en programmation impérative, on donne des noms plus ou moins clairs à ces variables et on leur assigne une valeur. Selon le langage, on peut avoir à se soucier du typage, à savoir si notre variable doit, par exemple contenir, un nombre ou un caractère mais le shell est permissif sur ce point.

L’affectation du contenu d’une variable se fait avec le signe “=“. Notre billet ici présent raconte donc l’histoire de l’affectation d’une certaine valeur à ‘nb‘.

Pipes

On ne rigole pas…

Ce concept au nom amusant est une évolution majeure du shell Unix, même si celle-ci date, et permet de faire communiquer des programmes entre eux sans devoir passer par de l’écriture sur disque. Si nous repensons à nos filtres, qui permettent donc de filtrer un contenu, il y a donc une entrée et une sortie. Le pipe fait que la source est le programme situé avant et que la sortie se fait sur le programme d’après.

La conséquence est que l’ensemble des commandes chaînées s’exécute quasi-simultanément pour profiter de ce mécanisme.

Notre chaînage assure donc que la liste des processus sera filtrée 3 fois (grep/grep/wc), et que le premier grep ne s’arrêtera pas avant que ps n’ait terminé, ni que le second grep ne s’arrêtera avant que le premier grep n’est terminé, je vous laisse déduire pour wc ;)

Substitution de commandes

Conclusion logique, nous cherchons à allouer à ‘nb‘ une valeur, à savoir celle obtenue par la succession de nos commandes que nous aurons permis les fameux pipes et cette magique substitution de commandes.

Pour réaliser cette action, les commandes destinées à être substituées sont lancées dans un sous-shell qui porte le nom du shell parent.

And now…

Bien, cette ligne apparait donc dans le script mon_programme dont nous souhaitons, rappelons le, qu’il s’assure qu’une instance de lui même ne s’exécute pas déjà.

Maintenant, le ver est déjà dans le fruit, la valeur retournée ne sera pas la bonne. Quant au pourquoi, je laisse mes amiEs geeks cogiter un peu, proposer des réponses, sous 2-3 jours je dirais tout le mal que je pense de cette façon de faire ;)

  1. tout puissant []