my blog

Friday 30 July 2004

LaTeX, A4 et letter (suite)

Je préfère écrire la réponse ici, et pas en commentaire à la précédente entrée.

Après avoir un petit peu plus cherché (c'est facile, quand on connait plus précisément le problème), il apparait que je ne suis pas le seul à avoir ce problème. Et il existe visiblement une solution un peu plus simple que celle que j'ai indiquée précédemment. Il suffit d'ajouter au début du fichier .tex :

\pdfpagewidth=8.5 true in
\pdfpageheight=11 true in

Ce qui est dommage, c'est que les développeurs n'ont pas l'air de saisir qu'une option de ligne de commande serait utile pour cela... (mais il est vrai que beaucoup d'autres options méritent aussi d'être en ligne de commande).

LaTeX, A4 et letter

La différence, c'est bien. Mais bon, c'est aussi assez embêtant de temps en temps. Prenez par exemple le papier. Il a une taille standard : le A4. Cela doit être standard partout dans le monde. Sauf aux Etats-Unis (et certainement dans quelques autres pays aussi, mais chut...) : là-bas, la taille standard est letter. Pas bien grave, me direz-vous. Et bien si. Quand on doit envoyer un article à des américains, ils le veulent au format letter. Pas de problème. Sauf quand on utilise LaTeX.

En effet, LaTeX, lorsqu'il est installé chez des pauvres européens, est configuré pour générer du A4. Et il n'est pas possible de lui faire générer facilement un autre format. C'est une horreur, particulièrement quand on utilise pdflatex (et qu'on n'a pas le choix car on a des images au format PDF). Il faut trouver les bons fichiers de configuration et les éditer. Voici donc ce qu'il faut faire.

Pour corriger dvips, il faut éditer /usr/share/texmf/dvips/config/config.ps et changer les lignes :

@ A4size 210mm 297mm
@+ %%PaperSize: A4

en les commentant avec % :

% @ A4size 210mm 297mm
% @+ %%PaperSize: A4

Je ne suis pas du tout sûr que ce soit une solution propre... On peut modifier le comportement de dvips sans modifier la configuration par défaut en utilisant l'option -t letter dans la ligne de commande.

Pour corriger pdflatex (ce qui m'intéressait vraiment), il faut éditer /usr/share/texmf/pdftex/config/pdftex.cfg et changer les lignes :

page_width 210 true mm
page_height 297 true mm

en ceci :

page_width 8.5 true in
page_height 11 true in

Et là, il n'y a pas d'option de ligne de commande pour modifier le comportement par défaut. Donc, à moins que quelqu'un ne prenne le temps d'écrire un patch ou de reporter le problème au bon endroit, c'est la seule solution à mon problème (du moins, seule solution que je connais).

Source de la solution : cette entrée dans le journal de David Mellis.

gethostname et FQDN

Plusieurs programmes ont besoin d'avoir le FQDN de l'hôte sur lequel ils tournent, notamment lorsqu'ils communiquent avec des programmes ou des personnes utilisant une autre machine. Le réflexe naturel est d'utiliser gethostname. Seulement voilà : gethostname peut parfois retourner le nom de l'hôte, sans le domaine. Ainsi, il est possible que gethostname renvoie 3rivieres alors que je souhaite obtenir 3rivieres.vuntz.net. Et le problème est qu'il n'y a pas de recette miracle pour obtenir directement 3rivieres.vuntz.net. Il faut mettre les mains dans le cambouis. Voici un petit exemple de code qui montre comment faire.

#include <errno.h>
#include <netdb.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>

#ifndef HOST_NAME_MAX
#define HOST_NAME_MAX 255
#endif

static void is_fqdn (char *display, char *name)
{
	if (strchr (name, '.') != NULL) {
		if (strncasecmp (name, "localhost", 9) == 0) {
			printf ("%s is a FQDN, but it's localhost: "
				"%s\n", display, name);
		} else {
			printf ("%s is a FQDN: %s\n", display, name);
		}
	} else {
		printf ("%s isn't a FQDN: %s\n", display, name);
	}
}

int main (int argc, char **argv)
{
	char             hostname[HOST_NAME_MAX];
	struct hostent  *he;
	char           **alias;
	char             buffer[64];

	if (gethostname (hostname, HOST_NAME_MAX)) {
		perror("gethostname");
		return 1;
	}

	/* man gethostname(2): we don't know if hostname is NUL-terminated */
	hostname[HOST_NAME_MAX - 1] = '\0';

	is_fqdn ("gethostname return value", hostname);

	he = gethostbyname (hostname);
	if (he == NULL) {
		herror ("gethostbyname");
		return 1;
	}

	is_fqdn ("The name returned by gethostbyname", he->h_name);

	alias = he->h_aliases;
	while (alias && *alias) {
		snprintf (buffer, 64, "Alias %d returned by gethostbyname",
			  alias + 1 - he->h_aliases);
		is_fqdn (buffer, *alias);
		alias++;
	}

	return 0;
}

Allez, maintenant, j'envoie un petit patch aux auteurs de libspf2 pour pouvoir fermer mon bug.

Thursday 29 July 2004

A Modest Destiny

Je ne suis pas un grand fan des web comic en général, mais j'ai découvert par l'intermédiaire de Romaric (à quand une vraie page web, Romaric ?) A Modest Destiny. Je ne vais pas raconter l'histoire, mais l'univers et le dessin sont proches de ce qu'on trouvait dans les RPG de la NES.

En tout cas, j'ai dévoré l'ensemble en deux ou trois jours tellement cela m'a plus... Le seul défaut que j'ai trouvé est qu'il manque un fil RSS.

Le blog de Guillaume

Tiens, Guillaume vient d'ouvrir un blog. Cela va encore nous faire de la bonne lecture. C'est bien™.

rss2email

Il y a plusieurs mois, j'annonçais avec fierté que j'avais créé ma planète. C'était bien. Mais cela me posait quelques problèmes, notamment le fait que je perdais les différentes informations au fur et à mesure que de nouvelles entrées apparaissaient. Par exemple, si je m'absentais cinq jours, le résultat était que je perdais les entrées datant du début de mon absence. Ajoutons à cela que Planet avaient quelques bugs qui m'agaçaient un peu (notamment en terme d'internationalisation, totalement inexistante) et que la page générée devenait vite énorme, et voilà : le vase déborde petit à petit.

J'ai donc profité de l'installation de ma nouvelle machine pour passer à rss2email. Et désormais je reçois toutes les informations que j'allais lire sur Internet par mail. Très très pratique. Et tellement naturel, comme lorsqu'on reçoit le journal à la maison tous les matins.

Wednesday 28 July 2004

Réveil

A qui est-ce que cela n'est jamais arrivé ?

Rotation des logs

Pour ceux qui se demandent comment certains fichiers de log (comme mail.log) tournent sur une installation standard de Debian, voici une petite explication. Il s'agit de tourner au sens rotation. Je précise que je me suis un peu gratté la tête en me posant la même question, car je souhaite garder certains logs sur une longue période afin d'effectuer quelques statistiques.

Il y a principalement deux mécanismes pour faire tourner les logs :

  • logrotate, avec comme fichiers de configuration /etc/logrotate.conf et les fichiers se trouvant dans /etc/logrotate.d/
  • savelog, qui est utilisé pour faire tourner les logs sauvegardés par syslog

L'utilisation de logrotate est connue et facile à maîtriser, mais je me demandais comment mail.log tournaient. Après un peu de recherche, j'ai découvert qu'il y a des travaux cron (/etc/cron.daily/sysklod et /etc/cron.weekly/sysklod) qui, en utilisant syslogd-listfiles, déterminent les fichiers de log gérés par syslogd. Ensuite, savelog est utilisé pour faire la rotation de ces fichiers. Par défaut, seules les quatre dernières semaines de logs sont sauvegardés. J'ai donc changé cela afin de pouvoir faire des statistiques sur le long terme. A noter qu'on peut changer le répertoire dans lesquels les logs sont sauvegardés afin de ne pas trop surpeupler /var/log...

Voilà, c'est tout bête, n'est-ce pas ?

SPF

J'ai mis en place SPF sur mon serveur. Pour ceux qui ne connaissent pas SPF, le site web visant à promouvoir l'idée est assez clair. En gros, cela permet aux gens qui possèdent un domaine sur Internet de déclarer quels sont les serveurs qui ont le droit d'envoyer des e-mails provenant de leur domaine.

Exemple pour vuntz.net : je suis le seul à utiliser ce domaine, donc tous les mails provenant de vuntz.net proviennent de mon serveur. Si cela provient d'un autre serveur, alors c'est quelqu'un qui utilise une adresse de manière illégitime.

La mise en place est très simple : il suffit d'ajouter une petite ligne dans la zone du domaine (en l'occurence, pour moi, c'est : vuntz.net. IN TXT "v=spf1 a mx -all") et d'ajouter un plugin au MTA.

J'en ai un peu parlé avec seb128 et il pense que c'est une limitation des libertés sur Internet. Ainsi, il ne peut pas utiliser son serveur SMTP pour m'envoyer des mails avec son adresse de GMail (faites le test avec telnet) : il doit passer par GMail. Pour moi, si GMail décide d'utiliser SPF, ils en ont le droit : c'est comme une clause dans le contrat qui dirait que l'adresse que fournit GMail n'est pas utilisable à partir d'autres serveurs SMTP. On peut effectivement dire que c'est une limitation des libertés, mais est-ce abusif pour autant ?

Monday 26 July 2004

grenoble ou 3rivieres

Je suis dans un moment d'indécision intense. Quand j'ai installé mon nouveau routeur/serveur/pare-feu, je l'ai appelé grenoble car l'ancien, 3rivieres, était encore en activité.

Le problème, c'est que grenoble, ça ne sonne pas très bien et 3rivieres était un nom vraiment charismatique. Mais je n'aime pas trop renommer des machines, particulièrement une fois qu'elles tournent bien. Que dois-je faire ? Changer le nom du serveur en 3rivieres pour plus d'exotisme ? Ou garder ce nom peu original ?

C'est un sondage, donc n'hésitez pas à donner votre avis !

Régime forcé

Il y a des jours comme ça... Il est midi, donc je vais au RU pour manger. Quand j'arrive devant, je réalise qu'il est fermé pour travaux. Je regarde toutes les sandwicheries qui sont autour, mais c'est les vacances, donc elles sont fermées aussi. Comme je n'ai pas envie d'aller loin pour manger, je retourne au labo en me disant que j'achèterai quelque chose au distributeur. J'ai juste un peu de monnaie, ça tombe bien.

Devant le distributeur, je réfléchis bien car je ne veux pas acheter n'importe quoi. J'ai choisi (deux petits gâteaux à l'amande). Je glisse ma pièce d'un euro dans la fente. Elle retombe. Je la prends et la reglisse. Elle re-retombe. Ah... Il faut insérer le montant exact (il ne doit plus y avoir de monnaie car les gens qui s'occupent de la machine doivent être en vacances). Bon, ai-je assez... Je regarde mes petites pièces rouges et jaunes. Oui, j'ai juste 80 centimes (et ma pièce d'un euro, à côté). Je commence à mettre mes pièces rouges, puis ma pièce de vingt centimes. On arrive à 30 centimes. Reste la pièce de 50 centimes. Je la glisse dans la fente. Elle retombe. Je la prends et la reglisse. Elle re-retombe, sauf que cette fois-ci, elle sort du petit trou où j'aurais dû la récupérer et se glisse sous la machine. Inaccessible. Tant pis, je ne mangerai pas. J'appuie sur le bouton pour récupérer mes 30 centimes. La machine ne veut pas me rendre mon argent...

Payer pour ne pas manger... Joie.

Super Vincent et ensilinx1

Super Vincent a pu encore une fois sauver le monde. Lucas l'a appelé à la rescousse et Super Vincent a agi.

(non, je vais bien, pas la peine de m'emmener à un asile)

Tuesday 20 July 2004

Geek decade

I'm A 1970s Geek
You've decided for the world that it's time for a change. JOIN THE GEEK REVOLUTION!
find your geek decade at spacefem.com

Monday 19 July 2004

Retour en ligne

Après mon déménagement et de nombreux évènements, ça y est, je suis de retour sur Interent. Il y a encore plein de choses à installer (dans l'appartement et sur le serveur), mais ça commence à devenir bien comme il faut. Plus de nouvelles plus tard...

by Vincent