lalahop
Categorie: Logiciels

Piwik 1.1.1

Je profite de ce premier billet de l'année pour vous souhaiter une bonne année 2011 et surtout une bonne santé.

Passons maintenant aux choses sérieuses. J'utilise Piwik depuis bientôt un an et j'en suis satisfait. Récement, la version 1.1 puis la 1.1.1 ont fait leur apparition. La 1.1 apporte son lot de bugs corrigés, de nouvelles fonctionnalités ainsi que son lot de failles de sécurité corrigées. La version 1.1.1 corrige également quelques bugs.

D'habitude, les mises à jour se font sans soucis, c'est pour cela que je n'écris jamais de billet à ce sujet. Mais cette fois-ci, j'ai eu le droit à tout les problèmes.

Après une mise à jour manuelle de la version 1.0 vers la version 1.1.1, je ne peux plus me connecter. Le titre de la page est correcte, du HTML est visible dans la source de la page mais rien ne s'affiche. Ce problème est connu mais la solution proposée ne fonctionne pas (en même temps, je n'utilise pas de reverse proxy ...). J'ai également vidé le cache de mon navigateur et supprimé les cookies, comme conseillé un peu partout, mais sans succès.

Je décide donc d'installer une version saine et complète (comprendre que ma version de production est optimisée : j'enlève un certains nombres de plugins que je juge inutiles pour mon usage, nous y reviendrons) en parallèle à ma version 1.0 de production. Cette fois-ci, la connexion fonctionne.

EDIT 06/01 23h55 : Je viens de trouver une solution à ce premier "problème" : il faut activer le javascript dans votre navigateur. Si vous utilisez une extension/widget dans le genre de NoScript, pensez à autoriser le javascript sur votre page d'authentification Piwik. Sans javascript, pas d'affichage. Lors de l'installation d'une version saine et complète, j'ai du activer le javascript sur le domaine de test, ce qui explique pourquoi le formulaire est apparu.

Mais, un deuxième problème arrive alors : je me retrouve avec des pages de texte, comme si il manquait le CSS ou les images associées et ce, sur toutes les pages. Je vérifie mon client FTP : tous les fichiers ont pourtant bien été transférés. Je regarde rapidement sur internet : un problème similaire est connu. Je tente encore une fois de vider le cache de mon navigateur et de supprimer les cookies, sans plus de succès. Le patch proposé dans le lien donné ci-dessus est sans effet : la modification était déjà effectuée dans le latest.zip que j'ai téléchargé.

Je décide de prendre la dernière révision disponible (la 3645, qui correspond a la version 1.1.2b1) sur le SVN du projet :

sudo apt-get install subversion
mkdir piwik-svn
cd piwik-svn
svn checkout http://dev.piwik.org/svn/trunk

find ./ -type d -name .svn -exec rm -rf {} \;
rm -rf ./trunk/tests

"find ./ -name ".svn" -exec rm -rf {} \;" permet de supprimer les dossiers cachés créés par subversion qui ne serviront pas. Ne tenez pas compte des messages d'erreur "Aucun fichier ou dossier de ce type" car les dossiers seront quand même supprimés.

"rm -rf ./trunk/tests" permet de supprimer le dossier "tests" qui ne sert pas non plus.

Ensuite, vous pouvez supprimer les plugins que vous ne comptez pas utiliser. A titre d'information, je supprime :

  • AnonymizeIP
  • DBStats
  • ExampleAPI
  • ExampleFeedburner
  • ExamplePlugin
  • ExampleRssWidget
  • Feedback
  • Goals
  • Live
  • MultiSites
  • PDFReports
  • SecurityInfo (à utiliser quand même une fois avant de le supprimer)
  • UserCountryMap
  • VisitorGenerator
  • Widgetize

Penser à adapter vos fichiers global.ini.php et config.ini.php : enlevez les lignes "Plugins[] = xxxxxxxx", et/ou "PluginsInstalled[] = xxxxxxxx" et/ou "Plugins_Tracker[] = xxxxxxxx" qui correspondent à des plugins que vous avez supprimés. Si vous sautez cette étape, vous obtiendrez des messages d'erreurs explicites.

Il ne vous reste plus qu'à uploader le contenu du dossier trunk sur votre serveur web et à installer Piwik en suivant l'assistant, comme lors de la première fois.

Pour la base de données, ne vous inquiétez pas : Piwik verra que les tables existent déjà et vous demandera si vous voulez les utiliser ou si vous voulez les effacer. En choisissant de les réutiliser, vous conservez vos stats.

EDIT 06/01 23h55 : Pour le premier problème et en attendant une solution officielle, une solution est donnée plus haut. Pour le deuxième problème, il semble avoir été corrigé dans la révision 3645 (et donc dans la version 1.1.2b1) puisque je ne l'ai pas rencontré de nouveau.

True Warrior Tools

Rah, mon premier article. Il fallait un titre frappant 🙂

Que sont donc les True Warrior Tools ? En français, les outils du véritable guerrier. Pour être plus clair, je vais détailler ici les outils nécessaires à tout "véritable" développeur. Par véritable, je sous entends programmation (très) bas niveau (c natif, asm natif), et par "natif", j'entends : sans utiliser de librairies existantes, et sans utiliser d'API système, même s'il se peut que l'on ait recours aux fonctionnalités offertes par le bios

Vous l'aurez compris, nous allons faire un tour des outils existants pour parler directement à votre processeur sans passer par un OS. Plus précisément, les outils disponibles sous Windows. Je ne parlerai pas (ou peu) des outils utilisés sous Linux, puisqu'ils sont sûrement déjà installés et prêt à fonctionner.

Tout d'abord, il vous faudra un bon éditeur de texte (ça revient à chaque fois sur le tapis, mais on a toujours pas trouvé mieux). Personnellement, j'aime beaucoup la coloration syntaxique de Notepad++ (Npp) pour l'asm et le batch (oui oui nous allons faire du batch, aussi étrange que cela puisse paraître), mais pas pour le C. Si vous souhaitez le télécharger, http://sourceforge.net/projects/notepad-plus/files/

Ensuite, je vous conseille d'avoir une invite de commande intégrée dans votre explorateur, de sorte qu'un simple clic droit dans votre arborescence des dossiers ouvre une invite de commande déjà positionnée sur le dossier (ca vous évitera des cd dans tous les sens etc). Il va falloir tremper les mains dans le cambouis. Tout d'abord, Win+R / regedit. Rendez vous dans HKEY_CLASSES_ROOT (vache la liste !). Amateurs de sensations fortes, jetez un oeil au passage à la clef CLSID. Rendez vous dans la clef "Folder/Shell". Créez une clef nommée comme vous voulez (le nom ne sert pas). Puis modifiez la valeur de la REG_SZ par défaut. J'ai simplement mis "Invite de commande", mais mettez ce que vous voulez, c'est ce qui apparaîtra dans le menu contextuel. Puis créez une nouvelle clef "command" (pas d'erreur de frappe ici, sinon c'est le fail !) . Modifiez la REG_SZ par défaut de la nouvelle clef et donnez lui cette valeur :

C:\Windows\System32\cmd.exe /k cd "%1%"

. Voilà, pas besoin de reboot ni rien, c'est appliqué.

On est loin d'avoir fini la liste 😉 Alors on continue avec une machine virtuelle / un émulateur. J'utilise Vmware Workstation 7 personnellement. Mais quitte à se lancer, autant partir sur du gratuit avec Virtual Box disponible ici : http://www.virtualbox.org/wiki/Downloads . On entend beaucoup parler de Bochs. Un peu moche à mon gout, mais ca a l'air efficace, et surtout léger à côté de Vmware =p Disponible ici : http://sourceforge.net/projects/bochs/files/. Si vous recompilez Bochs sous linux vous pouvez spécifier d'ajouter l'interface graphique du debugger (assez poussée). Il y a aussi QEMU bien sûr, téléchargeable pour Windows ici : http://lassauge.free.fr/qemu/

Attention, si vous avez choisi Vmware, je vous déconseille d'activer le full debugger. A la première interruption non gérée, j'ai eu le droit à un joli freeze de ma machine (réelle, pas virtuelle !), avec le debugger qui tournait en tâche de fond jusqu'à kill du process.

Outil suivant : le compilateur asm. Je ne vais pas vous laisser le choix pour celui-ci, nasm à tout prix ! masm et tasm vous généreront des syntaxes un peu particulières, et le gas utilise la syntaxe AT&T (moins vous la fréquenterez, mieux vous vous porterez =) ) . nasm est disponible ici : http://www.nasm.us/pub/nasm/releasebuilds/?C=M;O=D . Je vous conseille la dernière version non RC (attention elles ne sont pas toujours triées par numéro de version). Puis dans le sous répertoire win32 vous avez un joli installeur ou un joli zip. Une fois installé / décompressé, il va vous falloir ajouter le dossier bin de nasm au PATH. Pour cela allez dans les propriétés systèmes / paramètres avancés / variables d'environnement / système : PATH / Modifier. Ajoutez un ; et collez le chemin du dossier bin (inclus !)

Héhé, je gardais le meilleur pour la fin : le compilateur C. Je vous conseille le portage de GCC sous win32, MinGW. Disponible ici : http://sourceforge.net/projects/mingw/files/ . Personnellement, j'ai pris l'Automated MinGW Installer / MinGW x.xx / MinGWxxx.exe . Qui marche très bien. Une fois installé (ou autre), ajoutez le dossier bin de MinGW au PATH.

C'est bien joli tout ça, vous pouvez désormais compiler n'importe quel .c en ouvrant une cmd dans le dossier du .c en tapant "gcc fichier.c". Aussi simple que ça. Ah non j'oubliais, MinGW étant le portage Windows de GCC, vous aurez un joli .exe bourré d'entêtes PE spécifiques à Windows : autrement dit vous ne pourrez rien en faire en dehors de Windows. Pour remédier à cela, nous allons devoir nous détacher de l'OS en laissant tomber ses entêtes et ses librairies (nous allons compiler un fichier binaire plat, ou "flat binary executable" =o).

Pour cela, 3 étapes sont nécessaires (sous Windows du moins !) :

- Changer ses habitudes

- Demander à gcc de compiler et d'assembler, mais de ne PAS linker

- Demander à ld de linker proprement

- Demander à objcopy de ne récupérer que l'essentiel

Tout d'abord, changer ses habitudes, en quoi cela consiste-t-il ? Désormais le point d'entrée de vos applications NE s'appellera PAS main. Pourquoi ? Parce que c'est un cas particulier, et lors du linkage il est détecté et traité spécialement. C'est agaçant :p Tout ce qu'il vous faudra faire c'est choisir un autre nom, du style "monMain" (vache c'est moche !) ou "entry_point" (ca pète déjà un peu plus 🙂 )

Deuxièmement, demander à gcc de faire du bon boulot :

gcc -c -ffreestanding -nostdinc -nostdlib -mno-stack-arg-probe -o #OUPUT#.o #INPUT#.c

#INPUT# et #OUTPUT# étant les noms de vos fichiers d'entrée et de sortie. Les options : -c demande de s'arrêter après l'assemblage, -ffreestanding demande de se passer du main et des librairies standards du c, -nostdinc -nostdlib demandent de ne pas inclure automatiquement les librairies standards, -mno-stack-arg-probe demande de ne pas utiliser l'instruction _alloca pour allouer la stack, et de simplement décrémenter le pointeur de pile à la place, et -o c'est juste pour choisir le nom =) GCC va vous générer un .o si vous compilez quelque chose avec cette commande

Troisième étape, le linker :

ld -i -e _#ENTRY POINT# -Ttext 0x0 -o #OUTPUT#.o #INPUT#.o

#INPUT# de ld = #OUTPUT# de gcc, attention #ENTRY POINT# correspond au nom de la fonction qui se substitue à l'habituel main (surtout ne pas oublier l'underscore devant le nom, sinon vous aurez une jolie erreur !). Les options : -o pour la sortie, comme avec gcc, -i pour pouvoir utiliser objcopy par la suite, -e pour spécifier le point d'entrée, -Ttext pour choisir l'adresse à laquelle doit être chargé le segement de code (0x0 pour être chargé au tout début =) ).

Enfin :

objcopy -R .note -R .comment -S -O binary #INPUT#.o #OUTPUT#

#INPUT# de objcopy = #OUTPUT# de ld. Les options : -R = enlève le segment spécifié, -O binary formatte la sortie en flat binary executable, et -S enlève les symboles et les informations écrites par -i de ld

Au final, vous avez un joli fichier sans extension. Pour le disséquer, rien de tel qu'un désassembleur ! J'imagine déjà "ah mince encore un soft à télécharger..." =) Point du tout, nasm apporte son propre désassembleur, qui se nomme ndisasm. Il suffit donc de faire "ndisasm #INPUT#" ou #INPUT# de ndisasm = #OUTPUT# de objcopy.

C'est bien joli tout ca mais je vais pas me retaper tout ça à chaque fois que je recompile ! C'est à ça que sert le batch. Créez un fichier .bat nommé comme vous le souhaitez, soit dans le dossier bin de nasm, soit dans le dossier bin de mingw (il faut qu'il soit facilement référencable par le PATH). Le contenu du fichier :

@echo off
gcc -c -ffreestanding -nostdinc -nostdlib -mno-stack-arg-probe -o %1.o %1.c
ld -i -e _%2 -Ttext 0x0 -o tmp.o %1.o
objcopy -R .note -R .comment -S -O binary tmp.o %1

ndisasm %1
del tmp.o
del %1.o

Voilà. Les del servent simplement à nettoyer un peu le dossier. La syntaxe d'appel de votre batch : "#BATCH# #FICHIER# #ENTRY POINT#", #BATCH# = nom du batch, #ENTRY POINT# = nom du main SANS l'underscore devant (ajoutée automatiquement dans le script), #FICHIER# = le nom du fichier à compiler SANS l'extension .c

Voilà, ce premier article est fini =p Si vous avez des outils à me suggérer, des critiques, des remarques, n'hésitez pas =)

Il y aura sûrement (beaucoup) d'autres articles dans cette catégorie =p

Installer Emesene 1.6.2 sous Windows 7 à partir du tarball

Édit du 08/03/2011 à 20h25 :
Attention : Ce billet est utile uniquement dans le cas où la dernière version d'Emesene n'est pas disponible, sous forme d'installeur pour Windows (l’installeur sert pour les 3 dernières versions de Windows : XP, Vista, 7), sur le site officiel (en bas de la page). Actuellement, la dernière version stable d'Emesene est la 2.11.7 (c'est écrit en haut de la page) et l'installeur Windows proposé sur le site installe la version 2.11.7. Vous n'avez donc pas besoin de suivre ce billet : téléchargez l'installeur, installez, exécutez !

Je constate également que tout se perd : Emesene est devenu un client multi-protocoles (MSN, GTalk, Jabber, Facebook chat, ...) comme tant d'autres et c'est bien dommage. Si vous voulez un client pour aller uniquement sur le réseau MSN (c'est le but de cet article à la base), tournez-vous vers msnp-sharp (licence MIT), aMSN (licence GNU GPL) ou bien encore, mais c'est dommage vu la licence, vers Mercury Messenger (licence propriétaire).

Enfin, sachez que ce tutoriel n'est plus valide avec le tarball/zipball de la version 2.11.7 (et donc des versions ultérieures). Si vous voulez vraiment utiliser le tarball/zipball pour installer Emesene, suivez les instructions qui se trouvent dans le fichier INSTALL_WINDOWS.txt du tarball/zipball.

Fin de l'édit

Note : ce billet provient de l'ancien blog, celui que j'avais mis en ligne durant le développement de la version orientée objet du site, puis la version utilisant Blogotext. J'ai conservé la date de publication d'origine.

Table des matières

Présentation rapide de Emesene

Emesene est un client de messagerie instantanée alternatif à Windows Live Messenger de Microsoft. Tout comme lui, il permet d'utiliser le protocole MSN. Mon intérêt pour ce logiciel vient du fait qu'Emesene n'est pas multi-protocoles contrairement à beaucoup d'autres clients de messagerie instantanée. Si j'ai besoin de me connecter seulement sur le réseau MSN, je préfère avoir un logiciel spécialisé pour ça plutôt qu'un logiciel multi-protocoles dont je ne me servirai que de 2% des fonctionnalités.

Quel est le problème ?

  1. La version 1.6.1 s'est mise à planter souvent et/ou à afficher de nombreux message "Exception" comme celui-ci :

    Exception
    You are using emesene 1.6.1 "mate" so you're free to complain here: http://forum.emesene.org/index.php/board,19.0.html
    Check already existing tickets for duplicates first, please. Traceback (most recent call last):
    File "emesenelib\soap\manager.pyo", line 139, in process
    File "emesenelib\soap\manager.pyo", line 76, in process
    File "emesenelib\ProfileManager.pyo", line 152, in onGetProfile
    IndexError: list index out of range

  2. La version 1.6.2, pourtant disponible depuis le 26 mai, n'est pas disponible sous forme d'exécutable "clé en main".

La solution ? Dompter un python !

En effet, pour utiliser la version tarball d'Emesene 1.6.2, il faut installer Python. Notez que la solution que j'expose ici est partielle : n'utilisant ni webcam ni micro, je ne me préoccupe pas de la compilation de la libmimic nécessaire au bon fonctionnement de la webcam.

Télécharger le nécessaire

Il faut :

  • La dernière version de Python pour Windows
  • La dernière version de GTK2 runtime pour Windows
  • La dernière version de pycairo pour Windows
  • La dernière version de pygobject pour Windows
  • La dernière version de pygtk pour Windows

Installer le tout

Évidemment, il vous faut une session avec les droits administrateur (ce qui ne devrait pas poser de problèmes, on parle de Windows, là :p). Attention : il y a un ordre d'installation à respecter.

D'abord, il faut installer Python. Attention : sous Windows 7 avec Python 2.6.5, et aussi bizarre que cela puisse paraitre, il faut installer Python "only for me, xxx" pour que les sessions avec les droits limités puissent exécuter Python (et donc Emesene). Si vous aimez que vos programmes soient bien rangés, vous pouvez installer Python dans "Programm Files" au lieu du répertoire proposé par défaut (C:\Python{version de Python}).

Ensuite, il vous suffit d'installer le GTK2 runtime.

Ensuite, installez pycairo, puis pygobject puis pygtk (dans cet ordre).

L'heure du test

Allez dans le menu démarrer, trouvez "Python" et lancer la "IDLE (Python GUI)". A l'intérieur de celle-ci, tapez "import gtk".

Si des erreurs s'affichent, vous devez désinstaller tout ce que nous venons d'installer puis tout réinstaller en suivant l'ordre que j'ai donné. Si ça ne marche toujours pas, essayez une version précédente de Python. Dans ce cas, attention à bien télécharger les versions de gtk2 runtime, pycairo, pygobject, pygtk compatible avec votre version).

Si le prompt (">>>") s'affiche, vous pouvez passer à la suite.

Installer Emesene

Créez un répertoire "Emesene" dans "Programm Files" et décompressez la version tarball à l'intérieur de ce nouveau dossier.

Voila ! l'installation est finie ! Waaaaaah on se croirait presque sur un système UNIX (ou pas) !

L'heure du test, le retour

Ouvrez une invite de commande et tapez : "C:\chemin\de\python\python" "C:\chemin\de\Emense\emesene" (avec les guillemets). Exemple : "C:\Program Files (x86)\Python\python.exe" "C:\Program Files (x86)\emesene\emesene". Normalement, Emesene démarre. Des messages s'affiche dans l'invite de commande. Ils indiquent que la webcam ne sera pas supporté car vous n'avez pas compilé la libmimic, n'ayez pas peur :p.

Il ne vous reste plus qu'à créer les raccourcis dans le menu démarrer et dans le sous menu "Démarrage" si vous souhaitez qu'Emesene démarre automatiquement avec Windows. Comme cible du raccourci, vous mettrez évidemment "C:\chemin\de\python\python" "C:\chemin\de\Emense\emesene".

Si vous ne parvenez pas à faire fonctionner Python, je met à votre disposition un package (22.5 Mo) qui contient tout ce qui faut (python, gtk2 runtime ...) et qui fonctionne.

PS : Pour l'ordre d'installation des différents composants, ce blog m'a bien aidé : Installing PyGTK on Windows