En passant

Quassel: No DockManager available

quasselIl m’est arrivé un drôle de tour ce matin…

J’utilise Quassel IRC, un client IRC connecté à un serveur distant, ce qui permet notamment d’apparaître connecté et de lire ce qui s’est dit lorsque vous n’êtes pas là.

Le problème du jour n’est pas là : sur ma bonne vieille Ubuntu utilisant sa bonne vieille interface Unity, aujourd’hui, Quassel refuse de démarrer. Enfer et damnation.

Ou plus exactement : il se lance, mais sans fenêtre ! Il apparaît bien dans la liste des processus lancés, mais nulle part sur l’interface graphique, impossible d’interagir avec.

Lorsqu’on lance le programme (quasselclient) en console, une unique ligne cryptique apparaît : « No DockManager available » . Après quelques recherches, j’apprends que c’est un bug connu, mais réputé résolu et datant d’un autre âge… Mais alors quand on y est quand même confronté, que faire ?

Mon salut est tout simplement venu d’un « wipe out » : dans mon cas (Ubuntu), je suis allé dans le dossier de config de Quassel (~/.config/quassel-irc.org), et j’ai effacé tous les fichiers de config de Quassel comme un gros bourrin (rm *) !

Et là, pif paf pouf, après ça mon Quassel a remarché. Comme par magie. Bon évidemment je n’avais rien de très important dans ce dossier, mais n’oubliez pas de faire une sauvegarde ailleurs si vous essayez.

À bon entendeur…

Installer la bibliothèque Google Test sur Ubuntu

Hello,

aujourd’hui j’ai voulu essayer d’installer la bibliothèque de tests unitaires produite par Google, googletest.

J’ai donc installé l’archive disponible sur leur page Google Code, et ai tenté de lancer la version Makefile de l’installation (étant sur Ubuntu)…

Et là, quelle ne fut pas ma surprise en voyant une flopée d’erreurs sortir de g++:

/home/baron_a/gtest-1.6.0/make/../include/gtest/internal/gtest-port.h:1379: undefined reference to `pthread_setspecific’
collect2: error: ld returned 1 exit status

Heureusement, cela semble être un problème bien connu et la résolution est simple: dans le Makefile de gtest il faut remplacer dans la (les?) ligne(s):

sample1_unittest : sample1.o sample1_unittest.o gtest_main.a
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -lpthread $^ -o $@

l’option -lpthread par l’option -pthread (retirer le petit L au début, quoi, en gros), et voilà ça fonctionne ! \o/ Je me demande si ils le corrigeront un jour… Notez d’ailleurs qu’il y a d’autres moyens d’installation fournis, comme un CMakeLists.txt pour utiliser CMake.

J’ai également vu qu’il y avait un paquet nommé libgtest-dev dans Aptitude, mais je ne l’ai pas installé pour essayer.

Juste en passant

Hier en faisant ma mise à jour de Debian (sur unstable), j’ai eu droit à un beau message d’erreur :
dpkg: error processing gnome-themes-standard:amd64 (--configure):
dependency problems - leaving unconfigured
Errors were encountered while processing:
gnome-themes-standard-data
gnome-themes-standard:amd64
E: Sub-process /usr/bin/dpkg returned an error code (1)
A package failed to install.  Trying to recover:
Setting up gnome-themes-standard-data (3.8.1-1) ...
update-alternatives: using /usr/share/icons/Adwaita/cursor.theme to provide /usr/share/icons/default/index.theme (x-cursor-theme) in auto mode
update-alternatives: error: error creating symbolic link `/usr/share/icons/default/index.theme.dpkg-tmp': No such file or directory
dpkg: error processing gnome-themes-standard-data (--configure):
subprocess installed post-installation script returned error exit status 2
dpkg: dependency problems prevent configuration of gnome-themes-standard:amd64:
gnome-themes-standard:amd64 depends on gnome-themes-standard-data (= 3.8.1-1); however:
Package gnome-themes-standard-data is not configured yet.

dpkg: error processing gnome-themes-standard:amd64 (--configure):

dependency problems - leaving unconfigured
Errors were encountered while processing:
gnome-themes-standard-data
gnome-themes-standard:amd64

En gros il essayait de créer un fichier dans /usr/share/icons/default/, alors que ce dossier n’existait pas chez moi. Alors, vu que j’utilise Adwaita comme thème (par exemple), la solution pour moi a été de faire :

# ln -s /usr/share/icons/Adwaita /usr/share/icons/default

autrement dit de créer un dossier default qui est en fait un lien qui pointe sur le dossier de Adwaita.

Ça change rien au fait que cette mise à jour a aussi cassé GTK3, mais bon, au moins ça c’est fait.

Un plugin et on pète tout

Purée, récemment j’ai installé le plugin Code Colorer, notamment pour les besoins de l’article sur VTK car il y a d’assez longues portions de code dedans et que ça faisait un moment que je me disais que, bon zut, ça peut toujours être utile et qu’il était temps de se bouger la fesse.

Le bouzin marche à peu près comme prévu, sauf que le truc que je n’ai aps vu tout de suite, c’est qu’à l’installation, il a tenté de manière plus ou moins ratée de convertir les balises code, que j’utilisais avant pour mettre des exemples de code, en balises Code Colorer :s

Certains exemples se retrouvent alors illisibles, ou juste moches. Je pense en avoir corrigé la plupart, mais n’hésitez pas à laisser un message si vous voyez un exemple de code qui a l’air bizarre ou qui est vide …

Des tableaux et des indexes (ou l’inverse …)

J’ai appris un fun fact avec le C en parcourant Stack Overflow aujourd’hui 🙂

En général pour parcourir un tableau, par exemple un tableau de caractères:

[cci lang= »c »]char *toto[/cci]

un index commençant à 0 en C, on fait généralement toto[0] pour accéder au premier élément, toto[1] pour accéder au second, etc…

Et que se passe-t-il lorsqu’on essaye d’écrire par exemple 5[toto] ?

Et bien ça fait exactement la même chose que lorsqu’on écrit toto[5] (on accède à la sixième case du tableau), pour une raison simple : pour le compilateur, l’opération « a[b] » pourrait se traduire par  » déréférence l’adresse a (un tableau n’est jamais qu’une suite d’octets réservée en mémoire, l’adresse du tableau étant de fait l’adresse de la première case), puis avance de b cases ». Autrement dit :

[cci lang= »c »]*(a + b)[/cci]

(en C on déréférence avec l’opérateur *)

Et, attention mathématiques niveau CP 🙂 L’addition étant commutative, l’expression « a+b » égale « b+a ».

Ainsi, d’une manière un peu surprenante mais pourtant totalement logique, la syntaxe 5[toto] fonctionne parfaitement !

Le C ne cessera jamais de m’étonner … 🙂

Git — « Poussez madame ! »

Un très court billet pour expliquer, avant que je n’oublie !

Pour un projet perso, j’utilise actuellement le gestionnaire de versions Git (de manière générale aussi, d’ailleurs). Mais je veux que quand je pousse (push) une modification, cela la transmette non seulement sur un dépôt en local, mais également sur un dépôt extérieur type Bitbucket ou GitHub… Un push sur de multiples dépôts d’un seul coup, quoi.

« There’s more than one way to do it » .

Ceci étant dit, voici une méthode comme une autre (que j’utilise). Elle consiste à modifier le fichier de configuration du dépot (racine/du/dépôt/.git/config), et d’ajouter une branche remote ciblant les URLs de tous les dépôts voulus (ici très originalement appelée « all ») :

[remote "all"]
url = my/local/repo.git
url = git@bitbucket.org:my/bitbucket.git

etc...

Ensuite quand on fait un push, il suffit de faire « git push all » et ça pousse les modifications sur toutes les remotes concernées !

Joie ! 🙂

{C++} — Mémo pour avoir la méthode afin de pouvoir être méthodique sur les pointeurs sur méthode

Dès qu’en C++ je dois faire des pointeurs sur fonction membre (ou méthode) d’une classe c’est toujours la même chose : je ne me souviens jamais de l’enfer syntaxique que constitue la déclaration, l’assignation, et l’utilisation d’un pointeur sur fonction membre ! >:(

Panda essayant de faire des pointeurs sur fonction membre
Panda essayant de faire des pointeurs sur fonction membre

Continuer la lecture de {C++} — Mémo pour avoir la méthode afin de pouvoir être méthodique sur les pointeurs sur méthode

Programming Comedy : « Wat ? »

Je repost ici une vidéo que j’ai eu un peu de mal à retrouver, n’ayant pas retenu le nom de l’intervenant la première fois que je l’ai vue : il s’agit d’un lightning talk animé par Gary Bernhardt (de www.destroyallsoftware.com), ayant pour sujet certaines bizarreries plutôts cocasses présentes dans certains langages (ici Ruby et JavaScript).

Je trouve cette vidéo vraiment hilarante (comme le public, visiblement), surtout la fin 🙂 (attention c’est en anglais non sous-titré…)

 

Batman Jesus
Watman