Archives pour la catégorie Mac

Scilab 5.4.1 ne connait pas Mac OS X Mavericks

Il y a un (léger) souci au démarrage de Scilab 5.4.1 depuis la mise à jour vers OS X 10.9 Mavericks.

Au lancement, le message suivant s’affiche :

This version of Scilab will probably fail on this system (10.9.1): Scilab requires 10.6.5 (Snow Leopard) or newer system.

C’est simplement une erreur de comparaison de version, rien de bien méchant. Il suffit d’ailleurs de cliquer sur le bouton « Try anyway » (en français « Essayer malgré tout ») situé sous le message pour lancer Scilab sans problème.

Ce bug est connu (Bug #13107) et déjà corrigé dans les sources de Scilab. Il n’est par contre pas corrigé dans le fichier d’installation disponible sur la page de téléchargement.

Il est néanmoins possible de contourner le problème sans avoir à compiler les sources.

Avec Finder, aller dans le dossier Applications, puis sélectionner « scilab-5.4.1.app » avec la souris. Ensuite, sélectionner « Afficher le contenu du paquet », soit avec un clic droit de la souris, soit en cliquant sur le bouton « Action » de la fenêtre du Finder.

Il faut ensuite se rendre dans le dossier « Contents/MacOS/bin » puis éditer le fichier « checkmacosx.applescript ». Le fichier contient un bloc de commentaires puis une série d’instructions.

Pour contourner le bug, il suffit de mettre les instructions en commentaire dans le fichier en plaçant le tout entre les caractères « (* » et « *) » comme ceci :

(*
on run argv  

end run
*)

Enregistrer ensuite les modifications via le menu « Fichier > Enregistrer ». Le contenu du fichier devrait prendre une couleur grisée qui signifie que tout est en commentaire.

Vous pouvez maintenant ouvrir Scilab 5.4.1 sur Mac OS X 10.9 sans voir apparaître le message d’avertissement.

Tout ceci sera sans aucun doute corrigé dans la future version 5.5 de Scilab qui devrait bientôt sortir.

Ordre des appels à ispc, isunix et ismac avec MATLAB

J’ai récemment déployé une application sur Mac OS X avec le MATLAB Compiler. Elle n’était utilisée jusqu’à présent que sur Windows et Linux.

Cette application contient un outil qui me permet de récupérer certaines caractéristiques de la machine. Je récupère, entres autres, le nom de l’architecture où s’exécute le code, à savoir Windows, Linux ou Mac.

Code initial de récupération de l’architecture

Voici approximativement comment est codé le log :

fid = fopen('bug.log', 'wt');
if ispc
   fprintf(fid, 'OS: Windows\n');
elseif isunix
   fprintf(fid, 'OS: Linux\n');
else
   fprintf(fid, 'OS: Mac\n');
end
fclose(fid);

Or cette façon de procéder est fausse car, avec Mac OS X, le fichier bug.log contient la ligne suivante :

OS: Linux

Bizarre, non ?

D’où vient l’erreur ?

Les fonctions ispc, isunix et ismac utilisent en fait la fonction computer qui renvoi l’architecture de la machine sous forme d’une chaine de caractères qui peut être :

  • ‘PCWIN’ ou ‘PCWIN64′ pour Windows
  • ‘GLNX86′ ou ‘GLNXA64′ pour Linux
  • ‘MACI64′ pour Mac

Les trois architectures devraient donc être bien différenciées.

Pourquoi mon implémentation du log ne fonctionne-t-elle pas correctement ?

Étudions les fonctions ispc, isunix et ismac. Vous pouvez visualiser leur code en ouvrant les fichiers ispc.m, ismac.m et isunix.m dans le MATLAB Editor ou dans n’importe quel éditeur de texte.

ispc

Le fonction ispc compare simplement les deux premiers caractères de la chaine renvoyée par la fonction computer. Si ces deux caractères sont ‘PC’ alors la machine tourne sur Windows.

ismac

Sur le même principe, la fonction ismac teste si les trois premiers caractères de la chaine renvoyée par computer sont ‘MAC’. Tout est normal.

isunix

Surprise, la fonction isunix fait simplement l’inverse de la fonction ispc.

Le code de isunix est équivalent à :

isunix = ~ispc;

Donc pour MATLAB, tout ce qui n’est pas Windows est forcément Linux !

C’est utile à savoir, je corrige donc mon code.

Code corrigé de récupération de l’architecture

La condition ismac doit donc obligatoirement apparaître avant isunix :

fid = fopen('bug.log', 'wt');
if ispc
   fprintf(fid, 'OS: Windows\n');
elseif ismac
   fprintf(fid, 'OS: Mac\n');
else
   fprintf(fid, 'OS: Linux\n');
end
fclose(fid);

Me voila prévenu, et vous aussi !

:)

Dans un prochain billet, je vous expliquerai l’intérêt pour MATLAB d’assimiler Mac à Linux avec isunix (les utilisateurs avertis connaissent déjà sans aucun doute la réponse). ;)

Pour ouvrir « MATLAB », il vous faut un moteur d’exécution Java SE 6

Je ne me suis pas servi de MATLAB sur mon Mac depuis une (récente) mise à jour vers OS X 10.9 (Mavericks).

Et ce matin, surprise : impossible d’ouvrir MATLAB. :sad:

Erreur relative à Java SE 6

Voici le message d’erreur qui apparait :

Pour ouvrir MATLAB, il vous faut un moteur d'execution Java SE 6

Le problème vient semble-t-il du fait que Java n’est plus fournit avec les dernières versions de OS X.

C’est ce que j’ai constaté en ouvrant une console :

Mac-mini-de-Jerome:~ jerome$ java -version
No Java runtime present, requesting install.

J’ai tenté l’installation proposée en cliquant sur « Installer Â», mais sans succès.

La solution a donc consisté à télécharger Java SE 6 sur cette page : Java for OS X 2013-005

Après installation :

Mac-mini-de-Jerome:~ jerome$ java -version
java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)

Erreur relative à X11

A la première exécution de MATLAB, j’ai eu droit à un nouveau message d’erreur, cette fois pour X11.

Pour ouvrir MATLAB_maci64, vous devez installer X11.

En cliquant sur « Continuer Â», on accède à cette page : About X11 and OS X

On peut y lire :

X11 is no longer included with OS X, but X11 server and client libraries for OS X are available from the XQuartz project

Je suis donc allé dans le Launchpad et j’ai ouvert XQuartz.
Ce dernier m’a proposé une mise à jour et j’ai enfin pu ouvrir MATLAB.

:mrgreen: