-->[]

Aller au contenu | Aller au menu | Aller à la recherche

samedi 8 septembre 2007

Procès des scripts aux graphiques

Il y a environ 3 ans, j'ai fait un "petit" programme nommé battground. Au début, c'était un petit script shell qui changeait la couleur du fond d'écran suivant l'état de charge de la batterie de mon laptop, le genre de petit script à la con bricolé en 1h dans un moment d'ennui.

Petit à petit j'ai commencé à lui rajouter des petites fonctionnalités, comme par exemple pouvoir configurer la variation des couleurs au fil de la charge, décharge, etc.. J'ai fini par me prendre complètement au jeu et à passer des journées entières dessus, d'ailleurs Marie s'en souvient sûrement encore très bien :) Au final, ce petit script est devenu un truc assez complet, complexe, et compliqué :

  • Chaque état de charge a une couleur de base, comme ça on peut savoir d'après la couleur si la batterie est en train de se vider, remplir, si elle a fini de se charger, etc..
  • Le pourcentage de batterie (donc entre 0 et 100) est transformé en un autre nombre, comme on veut, par des petites fonctions mathématiques simples, appelées filtres. Par exemple, "reverse" transforme 0 en 100, 100 en 0, 60 en 40, etc.. Autre exemple, "step" arrondit à la dizaine (ou à ce qu'on veut) et produit donc un effet d'échelon. Encore autre exemple, "threshold" transforme tout ce qui passe en-dessous (ou au-dessus) d'une certaine seuil en une valeur fixe, par exemple 0. Il est possible de combiner (composer, pour les matheuses/matheux) plusieurs fonctions ensemble, les unes à la suite des autres. Le nombre final sert à faire varier la teinte de la couleur de base, et idem pour la saturation. Comme chaque filtre est un fichier indépendant très simple, on peut aussi créer soi-même ses propres filtres si on se sent d'humeur matheuse.
  • On peut faire des thèmes, qui sont donc la combinaison de couleurs de base et d'une série de filtres. Il y a des thèmes basiques prédéfinis, par exemple un qui met du vert pour la charge, rouge pour la décharge, bleu pour "chargé", et qui se fout du pourcentage de batterie. Un autre thème prêt à l'emploi passe progressivement de noir à blanc en passant par les verts pour la charge, et retourne de blanc à noir mais cette fois en passant par les rouges pour la décharge. C'est très facile de faire ses propres thèmes, du coup c'est un peu comme choisir des assortiments de couleurs de fond d'écran, sauf que ça "bouge".
  • Autre détail, on peut choisir le critère de mise à jour de l'information: une seule fois au lancement du programme, à chaque événement ACPI, toutes les 5 minutes, etc.. Les critères disponibles devraient suffire, mais on peut écrire ses propres critères de mise à jour. Je sais pas moi, à chaque réception de mail par exemple :)
  • On peut télécommander le programme en le forçant à mettre à jour les couleurs manuellement, en lui faisant relire ses fichiers de configuration, etc..
  • À la demande de Lunar qui avait à l'époque un Mac, ça marche aussi sur les Macs, qui n'utilisent pas ACPI pour la gestion de la batterie mais PMU.

Bref, en quelques semaines, le petit script était devenu un machin assez gros. Le seul truc qui n'a jamais changé, c'est que... c'est resté écrit en shell ! C'est bien séparé en plusieurs fichiers et tout, mais le tout combiné, c'est environ 1000 lignes de code.

Aujourd'hui, dans l'idée de faire un paquet Debian, j'ai remis le nez dedans, corrigé quelques trucs, ajouté une gestion du cas "batterie absente", etc.. Mais quand même... il faudrait vraiment refaire ce programme dans un autre langage, par exemple en C, en haskell, en python, ou n'importe quoi mais pas en shell par pitié, parce que là c'est vraiment devenu trop gros. N'empêche, c'était marrant à faire... Je vais peut-être me remettre à l'utiliser, tiens.

dimanche 15 octobre 2006

Boucle-la

Le "print debugging"[1] c'est bien.

Par contre, l'utiliser dans un hook[2] sur le signal "print text" de irssi[3], c'est une mauvaise idée.

Notes

[1] C'est le fait, quand on est en train d'écrire un programme, d'insérer temporairement des instructions qui affichent à l'écran des données "témoin", afin de suivre pas à pas le déroulement du programme et détecter les erreurs éventuelles. Si c'est la seconde fois que vous lisez cette note, arrêtez ici, sinon vous aussi vous allez crasher.

[2] Un hook c'est un bout de programme qui se déclenche lors d'un événement donné.

[3] L'événement que irssi déclenche au moment d'afficher quelque chose, typiquement un message sur IRC, ou... une instruction de "print debugging"[1].

samedi 16 septembre 2006

weird wild web

Pendant une discussion avec Lucas sur l'utilisation systématique du préfixe "www." dans les noms de sites web (notamment en ce qui le concerne il est pour, et le site no-www est contre) :

< Lucas > "www.no-no-www.org" could not be found.
< Lucas > mmh, c'est tentant :)

vendredi 8 septembre 2006

Le code de la route

C'est deux personnes qui discutent au téléphone par VoIP. Soudain, l'une d'elle dit : Attention, je passe sous un tunnel SSH, ça va hasher...

(transmise par jadawin sur IRC. Et pourtant, c'est pas lui le geek de viamichelin.)

samedi 28 janvier 2006

IP rien pour attendre

Bon. En ce moment le truc un peu tendance, c'est la messagerie instantanée (messages et présence), associée à la voix sur IP.

Dans ce domaine, le gros truc fashion, c'est l'intéropérabilité. Ça avance un peu vite, alors on va faire un petit récapitulatif. Attention, je parle uniquement des protocoles ouverts, pas des solutions individuelles propriétaires.

Boîte à outils. Niveau protocoles, tout est prêt :

  • Texte: Jabber, ou plutôt XMPP.
  • Voix: SIP, et plus récemment Jingle. Les experts vont dire qu'il y en a d'autres, mais je suis vraiment nul dans ce domaine.

Bon, très bien. D'accord. Et ?

Ah. Parlons plutôt des logiciels, alors. Les trucs à surveiller de près, c'est, dans le désordre (un peu) :

Ces logiciels forment actuellement une espèce de grosse soupe.

lire la suite

mercredi 8 juin 2005

A powerful, efficient, and scalable Mail Transport Agent

Résumé de ma journée.

11:06am up 67 days, 7:59, 1 user, load average: 138.78, 53.48, 34.12

Comme ça laisse beaucoup trop de temps libre, une petite réunion au sommet, en plus juste après le repas, tu sais le truc où tu te dis « et merde et maintenant je fais comment pour éviter de m'endormir ? ».

Oh pis un peu de LDAP aussi, parce que Panach sera toujours Panach [1].

Et donc ça c'est le dessin qui va avec le load-average de 138, avec un happy-end quand même sinon je serais pas en train d'écrire dans un blog que personne ne lit (bon à part toi, oui toi là) :

Bousculade dans la mailqueue du serveur mail

Notes

[1] Par contre là, si quelqu'un a compris, je veux bien qu'on m'explique.

vendredi 18 mars 2005

Tu feras gaffe t'as pas mis les deux mêmes charsets

Bon, j'ai enfin fait un truc que je voulais faire depuis un petit moment: basculer mon système en UTF-8 au lieu d'ISO-8859-1. Heureusement, sous Debian ça reste en partie assez simple:

$ sudo dpkg-reconfigure locales

Il suffit de générer les locales de son choix, par exemple fr_FR@euro.UTF-8, en_US.UTF-8, puis de sélectionner la locale par défaut du système, dans mon cas le second, mais peu importe.

Ça permet d'avoir toutes les applis dans cet encoding, notamment Konsole, que j'avais jamais réussi à basculer juste elle-même en UTF-8, contrairement à xterm qui permet de le faire même dans un environnement ISO.

Le truc plus rigolo est pour IRC: mon client IRC (irssi) tourne dans un screen sur poivron, auquel je me connecte en SSH à partir d'un shell qui tourne sur ma machine dans son propre screen... Simple n'est-ce pas ? Donc après avoir obtenu que Konsole utilise de l'UTF-8, il faut lancer chaque screen en rajoutant l'option -U, que ce soit lors de la création ou de chaque « rattachement ». Enfin, dans irssi, il suffit de bien définir l'option term_type (/set term_type utf8), et tout marche nickel.

Bien sûr, comme j'ai souvent été soûlé par les gens qui arrivent avec leurs gros sabots sur des channels IRC où tout le monde est en iso-8859-15, et qui balancent de l'UTF-8 comme si de rien n'était, je me suis dit que j'allais pas faire la même chose :) Par chance, des gens (dont en dernier lieu Johan "Ion" Kiviniemi) ont eu la délicatesse de faire un script irssi nommé « recode », qui permet d'utiliser des charsets différents suivant les chans, et de traduire de l'un à l'autre facilement. Du coup, étant plus souvent sur des chans en ISO qu'en UTF-8, ces options conviennent :

/set recode_terminal_charset utf-8 (encoding du terminal)
/set recode_default_charset iso-8859-15 (encodage par défaut sur les chans)

La dernière option est écrasable au coup par coup avec l'option /recode, ce qui est particulièrement intéressant pour respecter les pratiques de chaque chan.

Enfin, il est à noter que, bien que la plupart des programmes se comportent très bien avec cet encoding particulier qu'est UTF-8, dans lequel le prédicat « 1 caractère = 1 octet » n'est plus vrai, ce n'est pas le cas de tous. Notamment, zsh gère assez mal le retour arrière (backspace), car il faut presser 2 fois la touche pour effacer un caractère de 2 octets comme 'é'. Bien sûr, ça pourrit l'écran, donc il faut enchaîner avec un petit Ctrl-L. Trop bien. Je crois que le complètement se passe mal aussi dans certains cas bizarres.

Hormis ces quelques cas, « jusqu'ici tout va bien ».

lundi 17 janvier 2005

C'est vert ment en retard

Nouvelle CSS inspirée de celle de ma homepage. À fignoler quand je serai pas à la bourre pour le cours de réseau.

samedi 18 décembre 2004

Le chant du cygne

Décidément, KDE me surprend de jour en jour. La bonne surprise de la soirée, c'était ça : Boîte de dialogue de KDE pour écraser un fichier musical

Quand on essaie d'écraser un fichier, il y a toujours une boîte de dialogue. Bon. Sauf que là, avant l'effacement définitif, tu peux écouter la musique au cas où, genre « Avez-vous une dernière parole avant votre exécution ? ».

Je suis sûr qu'il y a des choses encore plus mignonnes pour les autres Mime-Types, enfin j'en sais rien, pis d'abord il est 5h48 du matin, alors dodo picétou.

mercredi 15 décembre 2004

Buntu be a-Live

Ça y est, j'ai enfin reçu mes 15 CD d'Ubuntu. Ça, c'est cool.

Évidemment, ça poutre. M'enfin je l'ai tellement lu ces derniers mois que ça me fait ni chaud ni... bon, ok, ça tue.

Pour le moment avec Marie on a testé seulement le CD Live, qui est juste parfait. « Mais comment ils ont fait pour mettre tout ça sur un CD ?? - En fait tout est compressé, et décompressé à la volée en RAM lors de l'exécution. - D'accord, mais n'empêche c'est trop fort. Par contre c'est con, c'est que en anglais. Enfin c'est normal, déjà pour un Live CD c'est cool. Reboot - Heu, Marie ? Tu disais ? Regarde ça. » Devant nos yeux, au boot, une liste longue comme ça de toutes les langues possibles pour démarrer, pour le Live CD hein. Je parle même pas du CD d'installation.

Pour le coup, il est possible qu'on remonte Indy de la cave, et qu'on lui trouve une petite place quelque part. Marie a de plus en plus envie d'avoir un ordi et être un peu autonome, surtout que j'ai toujours Smurf avec moi, que ce soit au boulot ou à l'INSIA. Il est donc probable qu'elle s'installera une Ubuntu from scratch sur le PC, histoire d'être un peu peinarde.

Sinon, c'est pas pour critiquer, mais la blonde sur la jaquette a une jolie poitrine. Et qu'on vienne pas me faire croire que les tétons qui pointent sont par hasard pile dans l'alignement de l'objectif, hein... Tss tss tss. Ça et le beau gosse musclé, c'est fourbement fait exprès, juste pour que les non-geeks commandent les CD. Pour les geeks il aurait fallu mettre une part de pizza ou une cafetière peut-être...

Enfin c'est cool. J'ai donc 14 CD à disposition (sposition), moins quelques-uns pour ma famille, moins quelques-uns déjà réservés par Marie pour la sienne, moins quelques-uns pour des gens à l'INSIA. Donc il en reste, si mes calculs sont bons, encore plein, du coup faut pas se gêner pour m'en taxer, c'est bon pour la santé.

Rappel. Chaque pochette contient 2 CD: - 1 CD Live, permettant de tester Ubuntu sans installation, qui démarre, détecte le matériel, etc. etc.. Ce disque contient aussi les versions MS-Windows de la plupart des logiciels présents, comme Firefox, Thunderbird, The Gimp, Audacity, et d'autres. - 1 CD d'installation, permettant d'installer Ubuntu de manière permanente sur le disque dur (skeudur), une fois qu'on est sous le charme. Attention c'est super fourbe.

vendredi 27 août 2004

Répète après moi: "je suis un script PHP"...

Alors toujours dans la série "je-veux-faire-des-trucs-comme-le-serveur-mais-je-suis-pas-l'admin-et-l'admin-c'est-ze"...

Ce soir je viens de me passer de mod_rewrite, un peu cradement j'en conviens, mais ça aurait pu être pire.

L'idée, c'est que normalement demain je déplace mon blog sur le poivron (merci Lunar). Mais comme j'aime pas partir sans laisser d'adresse, je me suis dit que je pourrais faire une redirection 301 (Moved permanently). Le problème c'est que je suis pénible, et que je veux que toutes les URL genre http://etudiants.insia.org/~dammouia/blog/blabla/coucou/toto soient transformées en http://davux.asocial.info/blog/blabla/coucou/toto. Donc là normalement, on se dit fastoche, un coup de mod_rewrite et c'est réglé. Juste faudrait avoir accès au serveur pour ça, donc pas de rewrite (c'est ballot hein). Alors je pourrais faire une page 404 puis un 301 par-dessus, mais moi je veux pas une 404, je veux un vrai 301. Na.

lire la suite

vendredi 13 août 2004

c'est réglé, dites ?

[ Je voudrais m'excuser d'avance pour ce post, pour la rédaction duquel je n'ai pas pris autant de temps que le sujet l'aurait mérité. ]

À part le nom, ceci est une excellente idée.

C'est en gros un "écosystème de configuration". Il est vrai que le répertoire /etc/ de Linux mérite très bien son nom car c'est un beau bordel, et un système de gestion de la conf un peu plus homogène ne ferait pas de mal.

De plus, le système proposé est basé sur des associations clé/valeur, ce qui finalement est ce que tous les systèmes de configurations proposent, sous des formes différentes (httpd.conf, /etc/hosts, /etc/passwd, /etc/shadow, /etc/screenrc, php.ini, /etc/fstab, gdm.conf, XF86Config-4, sshd_config... je continue ?). Les imbrications de paramètres sont gérées tout bêtement... de la même manière que les imbrications de répertoires, et on reste sur un modèle de fichiers texte (hein Lunar) dans la plus grande tradition Unix.

Quand on y réfléchit bien, c'est une généralisation propre de la bidouille du fichier /etc/passwd dont un des champs se fait déporter la gueule vers un autre fichier ayant des droits différents. Ici, chaque paramètre a ses propres droits.

De plus si on ne veut pas éditer ses fichiers à la main il existe une API clean.

Le seul truc qui me gêne c'est vraiment le nom: Linux Registry. C'est vrai que ça reprend les bonnes idées de la base de registres de Windows (le coup de la granularité plus fine basée sur un système clé/valeur et de l'homogénéité), mais ça n'en a pas les inconvénients: le format binaire complètement fermé notamment, pas de gestion des droits, le regroupement du tout dans un seul fichier.
C'est dommage d'avoir un nom pareil car ça dégoûte pas mal de gens, notamment ceux qui sans ça auraient été les plus à même d'apprécier l'intérêt de ce système. Mais d'après l'auteur (Avi Alkalay), il est question de changer de nom car énormément de monde fait la remarque (tu m'étonnes Yvonne).

J'étais très très très pessimiste avant d'aller sur la homepage du projet (à cause du nom justement qui me rappelait tous les reproches que je fais à la base de registres de Windows), mais j'en suis revenu enthousiaste.
M'enfin, connaissant la nature très conservatrice de l'être humain, et le syndrôme du « ça marche alors ça me suffit » (cf. MSN, IE, les tableaux dans les pages web, les balises <center>, et autres IPv4), fortement liée à la loi de Kiwi numéro 1 (« plus c'est pourri, plus c'est répandu »), je doute que ce projet devienne un jour un fait.

mercredi 11 août 2004

nmap el reçu

Ça fait bizarre de voir son téléphone afficher son adresse MAC, pouvoir configurer son adresse IP, son subnet mask, sa gateway et le serveur TFTP sur lequel il va récupérer sa conf.
Ça fait bizarre aussi de regarder derrière le téléphone et voir 2 prises ethernet, avec respectivement « To PC » et « To LAN ».

C'est rigolo d'être bêta-testeur de la nouvelle installation de VoIP chez Karavel.

vendredi 6 août 2004

un pingouin en sleep

Je viens d'installer software-suspend sur mon laptop, et ça marche plutôt pas mal :)
Software-Suspend permet de suspendre un ordinateur en sauvegardant le contenu de la RAM quelque part: partition d'échange (swap), fichier du disque dur local et prochainement en NFS. De cette manière l'ordinateur peut être éteint, et au prochain redémarrage l'état de la RAM est restauré comme si de rien n'était.

Je vais essayer d'expliquer la procédure que j'ai suivie.

lire la suite

mardi 13 juillet 2004

Schéma sacré la norme

Quel rustre, quel monstre, quel ignoble et vil personnage...
Je viens de modifier dans le schéma LDAP la syntaxe de l'attributeType uniqueIdentifier de 1.3.6.1.4.1.1466.115.121.1.15{256} en 1.3.6.1.4.1.1466.115.121.1.27.
Oui, je sais, c'est pas bien : un uniqueIdentifier normalement ça peut être un nombre, un mot, un numéro d'immatriculation, etc. Mais bon pour nous c'est des nombres tout le temps, et j'ai besoin de pouvoir calculer le plus grand uniqueIdentifier disponible par exemple, alors pas de pitié et trucidage de la syntaxe pour pouvoir modifier les matchingRules de equality et ordering en integerMatch et integerOrderingMatch respectivement.
Pis m'en fous, dans la RFC1274, ils disent:

The domain within which the identifier is unique, and the exact semantics of the identifier, are for local definition. For a person, this might be an institution-wide payroll number.

Donc ça gratouille peut-être la RFC et son « WITH ATTRIBUTE-SYNTAX caseIgnoreStringSyntax », mais j'ai le droit. Na.