wine logo

Office 2010 sous Linux Debian

Publié dans Geekeries | Laisser un commentaire

Aujourd’hui j’ai réussi à installer une version official de Microsoft Office 2010 (32bits version Academic) sur mon Linux : une Debian Bulleyes avec wine 4.0.1. J’ai utilisé les commandes suivantes :

sudo apt install winetricks winbind WINEARCH=win32 WINEPREFIX=~/.wineoffice2010 winetricks dotnet20 msxml6 corefonts WINEPREFIX=~/.wineoffice2010 wine ../hubiC/Olivier/WorkTrialog/Software/Office_2010_ProPlusAc_SP1_French_x32.exe

Après cela, Word et Excel ont fonctionné correctement (une fois activé en ligne). Mais PowerPoint ne démarrait pas… Il semble que PowerPoint on wine « does not automatically use the riched20 installed by Office ».  Donc, nous devons sélectioner riched20 to native in winecfg. C’est ce que j’ai fait avec succès en lançant :

WINEPREFIX=~/.wineoffice2010 winecfg

Et voilà ! Bon courage avec votre installation d ‘Office sous Linux ! Pour info, j’ai aussi une version d’Office 2016, mais c’est juste mort pour l’installer sous Linux ! Une histoire de version d’ActiveX pas (encore) supporté par Wine.

The Rules of Life

Règle #2 – Changelogs & Release notes

Publié dans Développement | Laisser un commentaire

Une bonne pratique de taille pour fiabiliser le développement logiciel, c’est de toujours garder une liste « humaine » des changements apparus de versions en versions.

On peut noter 3 degrés d’historique :

  • Git history : pour le développeur
    • git log, gitk
    • Moi je me suis créé un alias Git pour afficher joliment les derniers commits dans ma ligne de commande: git lasts
      • Ajouter l’alias suivant dans le fichier ~/.gitconfig: lasts = log -35 --pretty=tformat:"%C(red)%h%x20%C(magenta)%ad%C(auto)%d%x20%C(green)%s%C(white)%x20-%x20%an%C(auto)" --date=short --abbrev-commit --graph --decorate
  • Changelogs : pour l’utilisateur averti, pour le validateur
  • Release notes : pour le client, pour le « non technique »
    • Format à définir avec les personnes concernées
    • Focus sur les fonctionnalités et les changements visibles

The Rules of Life

Règle #1 – Numéro de version

Publié dans Développement | Laisser un commentaire

Règle #1 pour livrer du logiciel : définir un numéro de version !

Quel numéro choisir ?

Le must du must est d’utiliser et de suivre le Semantic versioning. C’est-à-dire, d’utiliser trois chiffres :

MAJOR.MINOR.PATCH

  • MAJOR : incompatible API / ABI changes,
  • MINOR : functionality added in a backwards-compatible manner
  • PATCH : backwards-compatible bug fixes

Ce qui implique que si je trouve un bug dans ma bibliothèque v3.1.2, que je corrige ce bug, je vais publier ce correctif dans une nouvelle v3.1.3 uniquement si je n’ai pas fait de changements bloquants (c’est-à-dire que mon soft qui tournait avec la v3.1.2 de cette bibliothèque pourra utiliser v3.1.3 sans rien changer). Si mon correctif implique des changements bloquants (pas de bol), il faut changer le numéro de version majeur (v4.0.0), eh oui.

Trouver le numéro de version

Il n’y a rien de pire que de faire tourner un soft et de ne pas savoir quelle est la version qui tourne. Avoir un numéro de version c’est bien beau, mais il faut aussi l’afficher quelque part :

  • Au démarrage du soft
  • Dans un log
  • Sur l’IHM
  • Dans l’API

N’importe où, mais quelque part !

Modifier le numéro de version

Un autre corollaire de cette règle #1, c’est qu’il faut pouvoir modifier facilement ce numéro de version. Il doit être défini en un unique endroit. Par exemple :

  • Qt : Le fichier .qmake.conf est inclue au début de chaque fichier .pro et .pri, c’est le candidat idéal
  • PHP / Symfony : app/config/config.yml

Selon son architecture de développement, on peut aussi s’assurer qu’un tag Git vient préalablement mettre à jour le numéro de version dans le code.

Logo OpenSSL

OpenSSL et i2d_PublicKey

Publié dans C / C++ | Laisser un commentaire

Dans OpenSSL, il y a des pièges ! Petit exemple avec i2d_PrivateKey et i2d_PublicKey :

i2d_PrivateKey(EVP_PKEY *, uchar **), comme escompté, prend en paramètre une paire de clé source EVP_PKEY et un tableau d’octet en destination. La clé privé est extraite de la paire de clé et envoyé au format DER / ASN 1 dans le tableau d’octet.

i2d_PublicKey(EVP_PKEY *, uchar **) a la même signature, une paire de clé source EVP_PKEY et un tableau d’octet en destination. La clé publique est extraite de la paire de clé, mais cette fois-ci elle est envoyé sous forme d’un EC point dans le tableau d’octet ! Piège !

L’équivalent de i2d_PublicKey(EVP_PKEY *, uchar **) est en réalité i2d_PUBKEY(EVP_PKEY *, uchar **) ! Et c’est la même chose pour d2i_PublicKey/PUBKEY. Comme quoi… « rien n’est jamais facile » !

La déclaration anticipée en C++

Publié dans C / C++ | Laisser un commentaire

Un problème de référence croisée / inclusion croisée / cross reference en C++ ? Utilisez la déclaration anticipée ! Ou forward declaration dans la langue de Shakespear !

Qu’est-ce qu’une référence croisée ?

Une référence croisée, ce sont tout simplement 2 classes qui dépendent l’une de l’autre. MyClassA dépend de MyClassB et vice-versa. On devrait alors inclure le header de l’un dans celui de l’autre et le compilateur ne sait pas par quel bout commencer. Ce problème apparemment rarement avec seulement deux classes, mais plus souvent dans un cycle : MyClassA <- MyClassB <- … <-MyClassZ <- MyClassA.

Exemple de référence croisée simple entre 3 classes

La solution

La solution : déclaration anticipée ou forward declaration.

Continuer la lecture

VirtualBox

Quelques tips VirtualBox

Publié dans Geekeries | Laisser un commentaire

Partager des répertoires avec l’hôte

Configurer la machine virtuelle pour qu’elle accède à des dossiers de l’hôte  (Settings > Shared Folders) n’est pas suffisant pour que cela fonctionne ! Il faut aussi que l’OS de l’hôte l’accepte, et pour cela, il faut démarrer la machine virtuelle, puis dans la barre d’outil faire : « Devices > Insert Guest Additions CD image… ». Après avoir éventuellement télécharger ce que VirtualBox propose, VirtualBox devrait avoir chargé un fichier ISO dans le lecteur de CD virtuel. A vous de jouer pour l’installer !

Puis il faut encore avoir les droits pour accéder à ces dossiers :

sudo usermod -aG vboxsf $(whoami)

Reste à redémarrer ou se reloguer, et voilà !

Ah oui, une chose importante : la machine virtuelle ne peut créer de liens symboliques sur la machine hôte ! (pour des raisons de sécurité, cf. superuser) Cela peut se réactiver à l’aide de la commande suivante (pour chaque dossier partagé)(merci à Github) :

VBoxManage setextradata VM_NAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/SHARE_NAME 1

Donc par exemple pour pouvoir créer des liens symboliques sur le dossier hôte « MyDoc », je fais :

VBoxManage setextradata MyVMName VBoxInternal2/SharedFoldersEnableSymlinksCreate/MyDoc 1

Cela implique de redémarrer la VM.

Augmenter la taille d’un disque dur

Visiblement, ça marche assez bien et sans perte de données. En ligne de commande :

VBoxManage modifyhd YOUR_HARD_DISK.vdi --resize SIZE_IN_MB

Structure d’un projet Qt

Publié dans C / C++ | Un commentaire

Note: c’est un brouillon 🙂

Ma grande question du moment, comment architecture un projet Qt pour :

  • avoir une bonne structure de dossier,
  • pouvoir gérer plusieurs modules, et choisir ceux à utiliser lors de la compilation,
  • séparer le code source du code des tests unitaires,
  • choisir lors de la compilation de lancer les tests ou non.

Structure

src
   module1/
      src/
      test/
      module1.pro
   module2/
      src/
      test/
      module2.pro
   communication
   data
   service
   util
   ui/
      project.cpp
      project.h
      project.ui
      ui.pro
   main.cpp
   src.pro
test/
   testcase/
      MyGreatTest.cpp
      MyGreatTest.h
   test.pro
   IUnitTestCase.h
   TestRunner.cpp
   TestRunner.h
vendor/
   ...
   vendor.pri
.pro

En général, j’ai plusieurs projets liés entre eux qui partagent des fichiers. Si on passe donc un cran en dessous, j’ai quelque chose du style :

project1/
project2/
vendor/
   ...
   vendor.pri
release/

Quelques informations sur les les .pro et les .pri

Ah, et il est normal qu’un message s’affiche 3 fois dans les logs (lorsqu’on utilise les commandes « message » ou « system »), puisqu’il y a 3 Makefile à générer, donc le fichier .pro est consulté 3 fois.

Inspiration

Gestion de projet – Quelques règles d’or

Publié dans Geekeries | 2 commentaires
  • Ne jamais donner d’estimations à chaud
    • Certes on peut ne pas se tromper sur la partie technique, mais :
    • Il faut prendre en compte le coût des réunions de préparation.
    • Il faut prendre en compte le service après-vente.
    • Or une estimation est presque toujours prise comme argent comptant pour le client.
    • Il vaut donc mieux y réfléchir posément.
  • Ne jamais rendre un budget quand il est acquis
  • Prendre son temps pour les décisions importantes

Installer Qt pour développer en 32bits et 64bits

Publié dans C / C++ | Un commentaire

Comment installer plusieurs versions de Qt en même temps, et surtout, comment gérer une cross-compilation 32bits / 64bits ? Voilà un problème qui peut prendre des heures à régler… C’est possible, autant sous Windows que sous Linux.

Pour ma part, je compile sous Debian testing (jessie) pour Qt5.3 ou Qt5.4 en 32bits ou 64bits, et grâce à Wine, je compile aussi pour Windows pour Qt5.1, Qt5.3 ou  Qt5.4 en 64bits. Je garde toujours un Qt5.1 sous Windows car c’est la dernière version à fonctionner convenablement pour Windows XP.

Compiler est une chose, et je ne m’y attarderai pas trop dans ce billet, mais installer est la première étape. La méthode 1 ne fonctionne que sous Linux (et ne marche pas d’ailleurs). La méthode 2 conviendra à Windows et Linux.

Continuer la lecture

Etude – Lire un document Word, OpenDocument, PDF avec Qt (ou autre)

Publié dans C / C++ | Laisser un commentaire

Lire un document Office, OpenDocument ou PDF, ou autre format riche  programmatiquement en Qt / C++ / autre… comme il fallait s’y attendre, ce n’est pas de la tarte ! Apparemment, il est relativement faisable d’afficher un document PDF, Office ou LibreOffice directement via un objet Qt, ou une bibliothèque. Mais ici, je cherche à lire le contenu, afin de pouvoir en extraire des morceaux suivant un patron (vous l’aurez deviné, c’est un document de norme, dont j’aimerai extraire la liste des exigences ><).

Voici une liste des ressources que j’ai pu trouver sur le sujet. Je n’ai rien testé pour l’instant.

Continuer la lecture