Deblan blog

Futilités de Geek

[Tips] Zoomer et dé-zoomer dans urxvt

Un billet court pour expliquer rapidement comment zoomer et dézoomer dans un terminal urxvt (rxvt-unicode).

L'objectif est le même que ctrl+/- dans un navigateur : modifier la taille des caractères dynamiquement.

Le code de base est le suivant :

printf '\33]50;%s\007' "xft:Terminus:pixelsize=XX"

Note : XX correspondant à la taille en pixels de la font (Terminus dans mon cas).

On va donc faire une première fonction qui va lancer cette commande à la volée. De mon coté j'utilise ZSH mais si vous préférez Bash ça sera sensiblement la même chose.

zoom() {
	printf '\33]50;%s\007' "xft:Terminus:pixelsize=$1"
}

Après avec recharger la conf de votre interpréteur de commande, vous pourrez la tester comme ça :

$ zoom 15
$ zoom 20

On va maintenant ajouter deux autres fonctions qui vont augmenter et diminuer progressivement la taille (à la manière d'un navigateur).

URXVT_SIZE=20
URXVT_PROGRESS_SIZE=5

zp() {
	URXVT_SIZE=$(echo "$URXVT_SIZE+$URXVT_PROGRESS_SIZE" | bc )
	zoom $URXVT_SIZE
}

zm() {
	URXVT_SIZE=$(echo "$URXVT_SIZE-$URXVT_PROGRESS_SIZE" | bc )
	zoom $URXVT_SIZE
}

Après rechargement de la conf, vous zoomerez avec la commande "zp" (zoom plus) et dé-zoomerez avec "zm" (zoom moins).

Pratique non ?


Clavier et souris ergonomiques

Travailler sur une machine plusieurs heures par jour admet quelques problèmes d'ordre physique. Depuis quelques temps déjà je ressentais des douleurs au niveau du canal carpien. Il devenait important de réagir pour que ces douleurs disparaissent.

J'ai donc acheté un nouveau clavier et une nouvelle souris. L'objectif du clavier était de faire beaucoup moins de mouvements pour reposer les poignets et les articulations des doigts. La souris devait quant à elle donner une position la plus normale possible à ma ma main et mon avant bras.

Le clavier est un TypeMatrix. Je ne l'ai pas encore passé en bépo par souci de productivité mais le fait d'avoir des touches positionnées à des endroits plus stratégiques me permet déjà d'être à la fois plus performant avec des douleurs estompées. Le temps d'adaptation est relativement court et j'ai un peu galéré au début mais cette étape passée, je me demande comment j'ai pu passé à coté de ça depuis tant de temps.

La souris est une Oyster Mouse qui permet de positionner son poignet dans 5 positions. La main est donc placée sur le coté. Ça change quelques habitudes et j'ai encore quelques fails quand je fais des clics molette mais j'ai aussi stoppés les douleurs rencontrés avec mes précédentes souris et je suis plus à l'aise.

En plus de tout ça, s'efforcer à utiliser encore plus de raccourcis clavier me permet de faire encore moins de mouvements inutiles. Les déplacements clavier/souris doivent être le moins souvent faits afin se garder de mauvais mouvements répétitifs et usants.

Je vous recommande vivement ces deux outils qui deviennent pour moi essentiels dans mon travail.


Raspberry PI #1

J'ai (enfin) reçu mon Raspberry PI et j'ai commencé à faire joujou avec.

J'ai utilisé l'image officielle avec une Debian Wheezy hacked pour lancer le RPI (Raspberry PI). C'est donc une Debian optimisée pour la machine avec l'environnement LXDE de base. Je l'ai bien sûr dégagé pour installer i3wm en gagnant ainsi une dizaine de Mo sur la Ram consommée. Sans trop de surpise, on a un système pas très rapide mais qui suffit à faire des tâches simples. Je pense que la carte SD achetée est aussi une cause de lenteur.

J'envisageais d'installer de quoi monitorer le système mais munin est trop gourmand. Je vais essayer de trouver une solution alternative.

Edit : ce qui prend le plus de ressource est la génération de graphs. J'ai laissé Hinata fait ceux du RPI donc plus aucun souci de performances. Je poserai des graphs d'ici quelques heures !


Edit 2 : j'annonçais des lenteurs qui étaient certainement dues à la carte SD utilisée. Il s'avère que c'est bien l'origine du problème qui va se régler très rapidement en la changeant. J'ai installé Munin et des graphiques sont à présent disponibles. Tout est disponible en ligne.


Raspberry PI Deblan

À l'heure actuelle, j'ai configuré un serveur web nginx et j'ai installé un Wordpress [http://pi.deblan.org/wordpress/]. Le serveur de base de données est sur une Hinata (le serveur de deblan) le temps de passer le blog sur une db SQlite. Globalement ça fonctionne pas trop mal bien que les accès disques lents ralentissent le temps de réponse. Il n'est pas directement accessible depuis l'extérieur mais via Hinata (encore) qui fait proxy HTTP.

Une salle dédiée a été aménagée pour les serveurs, puisque qu'en plus d'Hinata et du RPI, une 3ème machine va arriver pour redonder les services importants de Deblan (web, email et irc). Il se peut qu'elle devienne aussi un dépot FreeBsd.

Salle machines Deblan

La finalité du RPI n'est pas encore finie. Je ne sais pas si le mettre en frontend des serveurs sera une bonne idée (Firewall ou LoadBalancer à la Varnish). À voir...

En tout cas c'est belle petite bestiole, qui prend trois fois rien comme place et qui fonctionne vraiment bien. Je suis donc agréablement supris et je vais songer à en acheter un ou deux de plus pour faire des tests de cluster.


i3wm - barre de status

Il y a quelques semaines, j'ai changé de gestionnaire de fenêtres sur ma Debian. De Fvwm-crystal (que je recommande beaucoup) à i3wm, j'ai un full tiling manager et c'est vraiement nickel.

J'ai fais quelques lignes de code pour modifier la barre de status et je vais les paratager.

i3wm status bar

Mais avant tout, on va configurer le minimum vital pour que ça fonctionne :

Dans le bloc bar { ... } de votre fichier de configuration, remplacez status_command i3status par status_command ~/.i3/i3status.sh.

~/.i3/i3status.sh doit contenir :

#!/bin/sh

php ~/.i3/i3status.php

i3status | while read LINE; do
	php ~/.i3/i3status.php
done

Vous l'aurez remarqué, j'ai décidé d'utiliser du php. Pour ceux que ça ne dérange pas et qui n'ont pas encore le nécessaire :

$ su -
# aptitude update
# aptitude install php5

Il ne reste plus que de placer dans ~/.i3/i3status.php le code suivant :

<?php
// J'ai des soucis d'encodage sur le blog, le code avec les caractères en utf8 sont dispos ici : http://wall.deblan.fr/x10a/php/1/

define('SEPARATOR', ' # ');

render(
	get_the_notification(), 
	get_ips(array('eth0', 'wlan0')), // indiquez les interfaces susceptibles d'être utilisées et dont vous voulez connaître les IP (si elles en ont)
	get_the_acpi(),
	get_the_date()
);


/**
 *
 * IP
 *
 */
function get_ips($ifaces=array()) {
	$ips = array();
	foreach($ifaces as $iface) {
		preg_match('`inet ([^\s]+)`', shell_exec('ip addr show '.escapeshellcmd($iface)), $inet);

		if($inet) {
			$ips[] = '['.$iface.'] '.$inet[1];
		}
	}

	return implode(SEPARATOR, $ips);;
}

function ips() {
	echo get_ips();
}


/**
 *
 * Notification
 *
 */
function get_the_notification() {
	$final = '';

	if(file_exists($file=getenv('HOME').'/.i3/notification')) {
		$info = json_decode(file_get_contents($file));

		if($info->count == 15) {
			unlink($file);
		}
		else {
			$info->count++;

			file_put_contents(
				$file, 
				json_encode($info)
			);

			$message = '['.$info->title.'] '.$info->message;

			$final.= $message;
		}
	}

	return $final;
}

function the_notification() {
	echo get_the_notification();
}


/**
 *
 * Date
 *
 */
function get_the_date() {
	return date('H:i:s'.SEPARATOR.'d/m/Y');
}

function the_date() {
	echo get_the_date();
}

/**
 *
 * Acpi
 *
 */
function get_the_acpi() {
	$acpi = shell_exec('acpi');

	if(!preg_match('`Discharging`', $acpi)) {
		preg_match('`([0-9]+%)`', $acpi, $values);

		if(!empty($values)) {
			$charging = $values[1];
			return $charging.'?';
		}

		return '';
	}
	
	preg_match('`([0-9]+%), ([0-9]+:[0-9]+)`', $acpi, $values);

	$charging = $values[1].'?';
	$times    = str_replace(':', 'h', $values[2]);

	return implode(' ', array($charging, $times));
}

function the_acpi() {
	echo get_the_acpi();
}


/**
 *
 * Render
 *
 */
function get_the_render($values) {
	foreach($values as $k => $v) {
		if(empty($v)) {
			unset($values[$k]);
		}
	}

	return implode(SEPARATOR, $values).SEPARATOR;
}

function render() {
	echo get_the_render(func_get_args());
}

J'ai un système de notification qui permet de faire ça :

i3wm status bar

Voici le script qui permet de générer la notification :

#!/usr/bin/php5
<?php

$file = getenv('HOME').'/.i3/notification';

$info = array(
	'title'   => $argv[1],
	'message' => $argv[2],
	'count'   => 0
);

file_put_contents(
	$file, 
	json_encode($info)
);
/chemin/vers/le/script titre "Je suis une notification"

Terminé :)


Deblan aime la Grenadine !

Edition : le réseau s'appelle maintenant Neutral Network. Vous pouvez toujours utiliser irc/irc2.deblan.fr ou bien passer directement par irc.neutralnetwork.org qui changera automatiquement d'IP si un des serveurs tombe. Venez nombreux et nombreuses !


Aujourd'hui est un jour à marquer au fer rouge : les réseaux IRC Grenadine et Deblan viennent de fusionner :)

L'IRC Grenadine est en partie dédié à l'hébergeur HarmonyHosting dont je vous ai parlé il y a peu. À la tête du serveur il y a elskwi. Il a comme moi posé une machine dans sa maison et il prône un vrai internet libre, décentralisé et ouvert !

Une belle fusion qui permettra d'élargir nos réseaux mais surtout de décentraliser l'IRC qui est maintenant dispatché entre deux machines visibles.

Vous avez maintenant la possibilité de vous connecter via deux domaines : irc.deblan.fr et irc2.deblan.fr.