Archives de catégorie : Software

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.

For the World Is Hollow and I Have Touched the Skype (Ubuntu 13.04)

(Pour le coup, ce n’est pas vraiment la faute d’Ubuntu)

Aujourd’hui, un nouveau billet dans la catégorie « les petits problèmes de la vie de tous les jours sous Ubuntu »…

Cette fois-ci avec Skype, le célèbre logiciel de messagerie instantanée. J’ai d’abord eu des difficultés pour l’installer sur Ubuntu 13.04, pour ensuite me rendre compte que les notifications marchaient pas. Comment résoudre ces problèmes ? La réponse dans la suite !

Continuer la lecture de For the World Is Hollow and I Have Touched the Skype (Ubuntu 13.04)

Vérifier si une commande contient du texte ou pas en LaTeX

En ce moment, pour les besoins de mon projet de fin d’études, nous sommes en train de construire un template LaTeX afin d’avoir un truc modulable et facilement réutilisable pour tous les documents et rendus que nous avons à fournir aux professeurs niveau suivi.

Dans ce template LaTeX, il est pour le moment possible d’inclure dans le header de chaque page (fait avec le paquet fancyhdr au passage, peut-être que je ferai un autre article dessus) le logo du projet, et le logo d’un partenaire (dans notre cas, le LabEIP, instance d’Epitech nous suivant sur notre projet de fin d’études, l’EIP).

Inclure une image en LaTeX est relativement facile :

[cc lang= »latex »]

\newcommand{\PartnerLogo}{logo_eip.png}

\includegraphics[height=35pt]{\PartnerLogo}

[/cc]

Les problèmes arrivent lorsqu’on n’a pas de logo à mettre, ou qu’on n’a pas encore l’image, etc… tout en voulant conserver notre template et le garder le plus réutilisable possible, car la commande \includegraphics râle si on lui passe une chaîne vide.

[cc lang= »latex »]

\newcommand{\PartnerLogo}{}

\includegraphics[height=35pt]{\PartnerLogo} %% ça ne marche pas !

[/cc]

Une solution est d’utiliser le paquet etoolbox: il contient la commande \ifdefempty permettant de savoir si le résultat d’une commande est une chaîne de caractères vide ou pas, et de faire une action appropriée le cas échéant.

En pratique, ça s’utilise comme ça :

[cc lang= »latex »]

\ifdefempty{\PartnerLogo}
{} %% si aucun fichier n’est spécifié, on ne fait rien
{
\includegraphics[height=35pt]{\PartnerLogo} %% sinon, on affiche l’image
}

[/cc]

Et voilà, maintenant je peux aussi facilement utiliser mon template pour un projet où je n’ai pas de logo à mettre 😉

zsh: command not found: virtualenv

Je me refais une petite installation Linux en ce moment.

Au moment d’installer virtualenv, ce paquet très pratique pour Python, je suis resté sur le cul en ne voyant pas la commande « virtualenv » s’auto-compléter dans le terminal, et en voyant ça s’afficher si j’essaye quand même de la taper :

zsh: command not found: virtualenv

Enfer et damnation ! Comment cela se peut-il, je viens de l’installer ?

En fait la raison est plutôt bête, étant donné que je l’ai installé avec l’option –user de pip (non, ceci n’est pas un article sponsorisé par Sam&Max…), il est allé s’installer dans ~/.local/bin, plutôt que dans les dossiers généraux du système (pour qu’il ne soit installé que pour mon utilisateur), et mon PATH ne contenait pas (encore) ce dossier.

À partir de là la solution est triviale : il suffit de rajouter 2 petites lignes dans son .zshrc (ou le fichier de config du shell qu’on utilise, en gros)…

[cc lang= »bash »]

PATH=PATH:~/.local/bin

export PATH # il se peut que la syntaxe soit différente pour les shells utilisant setenv (tcsh, etc.)

[/cc]

puis de relancer la config du shell…

[cc lang= »bash »]

source ~/.zshrc

[/cc]

et pouf youplaboum ça y est ça fonctionne !

Mais c’est con comme problème…

« Ah… Ok … »

Parfois, je trouve que certaines choses sont vraiment débiles…

Débarquant récemment sur une Fedora toute fraîche (et oui, j’ai fini par mettre ma Debian à la retraite), je tente de lire un DVD commercial lambda sous VLC et… oups, ça ne marche pas !

Cascade d’erreurs comme quoi le média ne peut pas être lu.

Un problème classique sur Linux : les DVD du commerce sont chiffrés et dans la grande majorité des cas, une distribution Linux ne propose pas de base le paquet permettant de les décoder.

Bref, installation de ce fameux paquet, répondant au doux nom de libdvdcss.

Ça ne marche pas.

Passage par divers dépôts pour installer à peu près tous les codecs de la création…

Ça ne marche toujours pas.

Mon salut est venu au détour d’un forum technique… Le device utilisé par défaut par VLC pour la lecture des DVD est « /dev/dvd », visible comme entrée par défaut de la liste labelisée « Disc device » dans le menu « Open Disc ». J’ai changé cette entrée pour la dernière de la liste, « /dev/sr0 » (qui désigne, en effet, le lecteur CD également) et… Paf, ça marche.

Je crois que plusieurs images sont nécessaires pour exprimer mon sentiment à ce moment-là…

 

 

Ah, ça va mieux après !

Making multi-texturing work with VTK

This is an English copy of my last article, which was written in French: Faire du multi-texturing avec VTK.

I believe it will help much more people in English since VTK is used worldwide… And I don’t want to bother with a multilingual WordPress plugin yet. 🙂

In this blog post I will talk of what has been my main research subject during the last two months, during my part-time job.

It was about multi-texture mapping on a 3D polygon, using the open source library VTK. I mean it when I say « research subject » since, at the time I write this, it seems that no one or near already tried to do it with VTK… Although the feature is present, it just doesn’t work out of the box.

Continuer la lecture de Making multi-texturing work with VTK

Faire du multi-texturing avec VTK

Dans ce billet, je vais parler de ce qui a été mon principal sujet de recherche les deux derniers mois, au cours d’un stage à temps partiel.

Il s’agissait de faire de l’application multi-textures sur un polygone, en 3D, à l’aide de la bibliothèque open source VTK. Je parle de sujet de recherche car, à l’heure où j’écris, il semble que personne ou presque n’a déjà essayé d’en faire avec VTK… Alors que pourtant, la fonctionnalité est bien présente, mais non fonctionnelle « out of the box ».

Continuer la lecture de Faire du multi-texturing avec VTK

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