Pages

vendredi 26 octobre 2012

Alléger le code des classes template.

Une chose sympa à savoir quand on fait de grosses classes template en C++, c'est que le nom de la classe à l'intérieur d'elle-même est suffisante pour indiquer son type ; pas besoin d'ajouter les paramètres de template.
template<typename _T>
struct A
{
 A operator(const A&)
 { return *this; }
};
Voyez, pas de A<_T>.

dimanche 14 octobre 2012

Zsh et le danger des modificateurs

Zsh est très bien comme shell mais fait plus de choses que bash, ce qui peut engendrer des bugs quand celui-ci est le shell par défaut et que des scripts ne définissent pas l’interpréteur utilisé…
Actuellement j'ai eu le coup une fois, lorsqu'il fallait charger le module canberra-gtk pour les programmes java.
En fait une variable $GTK_MODULES est définie et contient tous les modules gtk séparés par des deux points (:).
Visiblement j'ai 2 modules gtk, tous 2 servant à ajouter canberra-gtk-module. Les fautifs ? 52libcanberra-gtk-module_add-to-gtk-modules et 52libcanberra-gtk3-module_add-to-gtk-modules. Avec un code identique :

if [ -z "$GTK_MODULES" ] ; then
    GTK_MODULES="canberra-gtk-module"
else
    GTK_MODULES="$GTK_MODULES:canberra-gtk-module"
fi

export GTK_MODULES
Et la paf c'est le drame, GTK_MODULES=canberra-gtk-moduleanberra-gtk-module. naturellement :D.
Vous venez d'assister à l'effet du modifier :c qui au passage n'existe pas et disparaît. Pour info, ce n'est pas le cas de :g, tout aussi inexistant mais qui s'affiche quand même…
Possible que ma doc ne soit pas à jour.

Les modifiers existe aussi dans bash mais sont moins nombreux et ne s'utilisent qu'avec l'historique (paragraphe HISTORY EXPANSION du man).

echo unfichier.txt
echo !:1:r

resultat :
unfichier.txt
unfichier

Quasiment jamais utilisé en fait.
Mais voilà, zsh les généralise aussi aux variables ce qui engendre une erreur dans la variable GTK_MODULES.

Alors comment faire ?
Simple, entourer la variable d'accolades:
GTK_MODULES="${GTK_MODULES}:canberra-gtk-module"

lundi 8 octobre 2012

Java et l'apparence graphique

Il y quelques jours, suite à la création d'interface graphique en java et l'apparence par défaut que je trouve particulièrement désagréable, je me suis attelé de changer le thème graphique.
En fait j'ai trouvé toutes les infos sur cette page de oracle.

Pour fortement synthétiser, le thème peut être choisi au lancement du programme avec l'option -D :
java -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel MyApp

Ou de façon permanente si dans le fichier swing.properties (dossier /etc/java-$JAVA_JDK_VERSION-openjdk/ sur linux). Pour moi la ligne était en commentaire.

Pour Windows la ligne est swing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel
Et j'imagine que pour Mac c'est swing.defaultlaf=com.sun.java.swing.plaf.macintosh.MacintoshLookAndFeel

Il y a d'autres thèmes comme Motif ou Métal (celui par défaut) mais je n'en ai pas trouvé pour Qt ou KDE… Au final je me sers du paquet gtk2-engines-oxygen pour que GTK utilise le thème Oxygen (Configuration du système → Apparence → Apparence GTK+ dans KDE).