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.

wine logo

Office 2010 under Linux Debian

Publié dans Geekeries | Laisser un commentaire

Today I manage to make my official Office 2010 (32bits Academic version) working under my Linux, a Debian Bulleyes with wine 4.0.1. I simply used the following commands:

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

At this stage, Word and Excel seem to work correctly once you activate them online. PowerPoint is not starting…

Apparently, PowerPoint on wine « does not automatically use the riched20 installed by Office ». Therefore, we need to set riched20 to native in winecfg. This is what I did with success using:

WINEPREFIX=~/.wineoffice2010 winecfg

That’s it! Good luck for the installation of Office on Linux!

Oh by the way: I also have an Office 2016, but this is just dead to install it under Linux due to the last version of ActiveX, still not supported by Wine. Too bad.

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

Enable WiFi on a Dell E7470 Laptop

Publié dans Geekeries | Un commentaire

When I received my new Dell Latitude E7470, I installed immediatly a Debian testing (Stretch) on it. This laptop, is really, really great, and is working like a charm with Linux. I still have to install manually a WiFi firmware iwlwifi-8000C. A simple « sudo dpkg -i *.deb », and it worked quite well!

Recently, in the beginning of 2017, a Debian update (maybe to due to testing freeze? Or something else?) has broken it… The WiFi was not available anymore, as if no WiFi board were loaded! Let’s fix this!

Latitude E7470

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

Project Management – Quick Golden Rules

Publié dans Geekeries | Laisser un commentaire
  • Never estimate on the fly

    • You may be right technically, but:
    • Did you take into account meeting / preparation costs?
    • Did you take into account after-sales services?
    • Any estimation is stone set for any client.
    • Think about it twice.
  • Never give back a budget
  • Main decisions require time