1er bug trouvé sur la R2011b Prerelease

  • Listbox simple avec 3 items

Voilà la listbox que j’ai faite rapidement avec le Guide , j’ai rajouté les chiffres 1 et 2 pour faire une listbox contenant 3 items:

bug listbox r2011b

  • Le bug

Quelquesoit l’élément que vous allez sélectionné , la listbox ne va pas afficher l’item:

listbox empty 11b

  • Le workaround

Il faut cliquer n’importe où sur la figure pour faire apparaitre l’élément de la liste qu’on a sélectionné:

workaround r2011b listbox

Aie Aie Aie ça commence mal cette affaire!

Comme indiqué dans la MathWorks Release 2011b: Prerelease FAQ (June 2011) je vais remonter ce bug de suite!

Nouvelle fonction : matfile

matfile.

  • Programming, MATLAB Version 7.13 (R2011b)

Un petit coup d’œil sur les Release Notes:

matfile

Donc le mieux c’est de voir une démo en vidéo plutôt bien faite: New Matfile Object

  • Mon trip

Beh moi je me suis amusé à utiliser la commande matfile sur des .figs livrés avec MATLAB. Pour avoir cette liste rien de plus simple il suffit de taper:

>> docsearch(‘ »Click here to copy the files »‘)

Ça vous ouvrira en R2011b , 12 pages d’exemples à copier.

En voici quelques exemples:

  • the Address Book Reader GUI

>> A = matfile(‘address_book.fig’)
A =
matlab.io.MatFile

Properties:
Properties.Source: ‘N:\MATLAB_GEEK\address_book.fig’
Properties.Writable: false
hgS_070000: [1×1 struct]

Methods

>> B = A.hgS_070000;
>> B.properties.FileName
ans =
C:\Geoff\Work\gbt\testing\addressbook\address_book.fig

  • the Simulink Parameters GUI

>> A = matfile(‘f14ex.fig’);
>> B = A.hgS_050200;
>> B.properties.FileName
ans =
\\Toaster-toaster\rel\www\internal\docgroup\sandbox\help\techdoc\creating_guis\examples\f14ex.fig

  • the List Box Directory GUI

>> A = matfile(‘lbox2.fig’);
>> B = A.hgS_070000
B =
type: ‘figure’
handle: 154.0117
properties: [1×1 struct]
children: [2×1 struct]
special: []
>> B.properties.FileName
ans =
S:\R14SP1\lbox2.fig

Voilà ça permet de savoir dans quels répertoires les développeurs de The MathWorks ont créé ces exemples… juste pour le fun , je sais ça ne sert à rien ;)
Il y a que le champ special en revanche que je n’ai pas saisi son intérêt car il est toujours vide.

Où est passée la membrane?!!

si on teste l’exemple donné sur la page zip – Compress files into zip file :

matlab zip

file = fullfile(matlabroot,'toolbox','matlab','demos','membrane.m');
zip('tmwlogo',file);

vous aurez un message d’erreur:

??? Error using == > zip at 66
File « C:\MATLAB\SOF\r2010b\toolbox\matlab\demos\membrane.m » does not exist.

Normal car depuis la R2010b le fichier membrane.m n’est plus dans le répertoire demos :

>> exist( fullfile(matlabroot,’toolbox’,’matlab’,’demos‘,’membrane.m’))

ans =

0

mais dans le repertoire general:

>> which -all membrane
C:\MATLAB\SOF\r2010b\toolbox\matlab\general\membrane.m

J’ai d’ores et déjà remonter cette erreur de documentation qui existe donc en R2010b, R2011a et R2011b Prerelease au support technique de MathWorks.

Blagues matlab de geek

  • Blague bête

Quelle est l’insulte préférée du MATLAB Geek?
T’es bête comme un NaN !

âne

  • Cellule

Comment un MATLAB Geek donne oralement son numéro de portable , son cell phone comme on dit ?
« accolade 06-28… accolade »

matlab mobile

je vous l’avais dit je suis en forme!

Code Performance

Code performance

Bon tout ça pour dire qu’en R2011b on trouve une nouvelle fonction : checkcode

r2001b

Bon elle n’a rien de grandiose , elle permet juste d’afficher le Code Analyser (donc M-Lint) dans le Command Window.

  • Exemples d’utilisation

>> checkcode(‘why’)
L 11 (C 23-38): GETDEFAULTSTREAM will be removed in a future release. Use GETGLOBALSTREAM instead.
L 12 (C 16-31): SETDEFAULTSTREAM will be removed in a future release. Use SETGLOBALSTREAM instead.
L 22 (C 16-31): SETDEFAULTSTREAM will be removed in a future release. Use SETGLOBALSTREAM instead.

ou

>> a=checkcode(‘membrane’)
a =
message: ‘The value assigned here to ‘Q’ appears to be unused. Consider replacing it by ~.’
line: 79
column: [2 2]
fix: 0

ou avec l’argument -cyc pour calculer la complexité cyclomatique de McCabe de votre projet :

>> checkcode(‘membrane’,’-cyc’)
L 1 (C 17-24): The McCabe complexity of ‘membrane’ is 14.
L 79 (C 2): The value assigned here to ‘Q’ appears to be unused. Consider replacing it by ~.

  • Et alors?

Et alors? beh y a un truc que je ne capte pas : Pourquoi checkcode qui est une nouvelle fonction MATLAB 7.13 (R2011b) n’apparait nul part dans les Release Notes?

Un autre article paraitra bientôt pour vous en dire plus sur checkcode ;) wow quel teasing monsieur!

Non aux pirates!!

  • Télécharger une version d’essai , une Trial de 15 jours
  • ou alors passer à un logiciel libre tel que Scilab.

Pour la première option par exemple , il suffit tout simplement d’aller à la page Products & Services et on vous propose de télécharger gratuitement et légalement n’importe quelle toolbox de MATLAB!

Trial

Je vous laisse lire la FAQ sur les Trial et les téléchargements pour tout savoir : Downloads
A noter les trials ne sont pas disponibles pour les étudiants . Donc là il vous reste encore une option que je n’ai pas citée : c’est de télécharger une Student Version (R2008b minimum) : Student Software Download instructions

Avec l’activation fini les PLP , les Personal License Password illégaux ou les fichiers license.dat , license.lic qu’on trouvait facilement sur le NET ou qu’on pouvait passer illégalement à ses potes .

Avec les nouvelles clefs MATLAB , les FIK c’est pareil vous ne pourrez plus tricher.

TMW a perdu beaucoup d’argent avec cette faille , l’activation a maintenant résolu ce problème , tout du moins pour les versions MATLAB à partir de la R2008a.

Evitons la catastrophe

allez dans la partie Editor/Debugger -> Autosave

Choisissez l’option « Single Directory » pour définir un répertoire où vous ne codez jamais et où seront sauvés vos M-files.

autosave matlab

Ainsi mes M-files seront sauvés toutes les 5 minutes avec une extension .asv dans un répertoire différent de celui où je travaille. L’avantage est que si je supprime par inadvertance mon Current Directory , j’ai un backup assuré dans un autre répertoire :)

Mes blogs préférés

  • Mon préféré

Le blog de Yair Altman : Undocumented MATLAB est mon préféré:

blog yair

Il est tout simplement génial , il présente pleins de fonction non documentées de MATLAB qui permettent par exemple d’écrire du code HTML dans les pushbuttons : HTML support in Matlab uicomponents

Yair a révolutionné le monde MATLAB quand il a sorti la fonction cprintf qui permet de mettre des couleurs dans le Command Window :

cprintf

Fonction disponible sur le FEX : ici

Je vous le laisse découvrir si ce n’est pas déjà fait!

  • Autres blogs

Un blog que j’ai découvert récemment et où j’ai trouvé des graphiques MATLAB super: Walking Randomly
Un autre également qui vaut le détour mais qui n’est plus mis à jour depuis qu’un des auteurs a été recruté par … The MathWorks : Blinkdagger an Engineering and MATLAB blog

Ensuite je lis évidemment les blogs officiels de TMW: MATLAB Central blogs . Je ne lis pas ceux de Seth et de Steve car ils concernent Simulink et l’Image Processing Toolbox. 2 boites à outils que je n’utilise pas.

matlab central blogs

  • What about French blogs?!!

Donc voilà quand vous parcourez ces blogs régulièrement, c’est un peu comme si vous lisez le quotidien sportif L’EQUIPE tous les jours , vous devenez incollable sur le sujet et vous êtes au courant de tout!

Comme on peut le voir ce ne sont que des blogs en anglais. Je n’ai pas trouvé de véritable blog MATLAB francophone pour l’instant si ce n’est quelques articles ici et là sur des sujets bien spécifiques. On trouve sinon pas mal sur la toile des tutoriels écrits par des profs ou des universitaires. Mais bon c’est souvent de niveau débutant et sert principalement comme base de cours pour apprendre MATLAB.
Moi mon idée avec ce blog c’est vraiment de vous faire partager mes délires avec MATLAB , les graphiques cools ,les erreurs que je trouve dans la doc , de vous lister mes fonctions préférées ou celles que je trouve inutiles (comme graymon!). Mais ce que je ne veux surtout pas faire ce sont des tutoriels car je trouve que la doc de MATLAB le fait excellemment bien! Et puis ce serait chiant à lire !

barh : datatips erronés

Une fois de plus , j’ai remonté ce bug au support technique de TMW. A ce sujet , il ne faut pas hésiter à remonter tous vos bugs, si vous voulez améliorer le produit.
Pour les contacter rien de plus simple : tapez la commande :

>>support

(voir mon post sur la fonction support à ce sujet)

et cliquez sur Contact Support

Contact Support MATLAB

Beh oui si personne ne contacte le support technique, les bugs traineront de release en release et ne seront jamais corrigés.

Donc le bug que veux vous présenter aujourd’hui concerne la commande barh.
barh est une fonction permettant de faire des barres Horizontales en 2D d’où le h ajouté à la fonction bar.
Vu que bar et barh ont les mêmes propriétés , la doc de ces 2 fonctions est contenue dans la même page : bar, barh

Une fois n’est pas coutume, quelques lignes de code suffisent pour reproduire facilement le problème:

>>x = [-400;-450; 300; -650;200];
>>y =[ 1 0.5 0.8 0.7 1.2];
>>barh(x,y)

Maintenant regardons les valeurs des barres en utilisant le Data Cursor mode.
La doc à ce sujet pour ceux qui ne connaissent pas cet outil : Data Cursor — Displaying Data Values Interactively

Voilà les résultats que j’obtiens:

barh bug

Les datatips sont complétement faux !!!
Par exemple la barre horizontale en Y = -650 affiche X = 1 et Y = -400 … WOW!

En tant que MATLAB Geek , je me suis dit qui dit Datatip , dit text Update Function ou UpdateFcn. On peut trouver un exemple dans la doc de datacursormode.

Bref donc je me suis tout bêtement, le bug vient de là . Donc petit clic-droit et je sélectionne Edit text Update Function

Edit text Update Function.

Donc ça m’ouvre la fonction « myfunction » par défaut de MATLAB :

Text Update Function

Je la sauve avec le nom myupdatefcn.m et je me rajoute ces lignes de code à mon code:

>>dcm_obj = datacursormode(gcf);
>>set(dcm_obj,'UpdateFcn',@myupdatefcn)

là je me dis , je vais reproduire le bug sauf qu’en me mettant en mode debug , c’est à dire en mettant un point d’arrêt dans la fonction myupdatefcn , je vais trouver l’origine du problème…
et là c’est l’hallu , ça marche sans rien toucher !!!

barh solved

Donc pour résumer, juste en forçant MATLAB à utiliser sa fonction UpdateFCn par défaut , ça corrige le problème.

Donc comme je le disais plus haut, j’ai remonté ce bug au support TMW. Ils m’ont remercié pour le workaround que j’ai trouvé et m’en ont proposé un autre qui fonctionne bien également.
Au lieu d’utiliser l’UpdateFcn , c’est de faire un tri des valeurs x et y :

>>[X,IX] = sort(x);
>>barh(X',y(IX)')

Sympa ce petit bug sur barh?!! Vivement la sortie de la 11a pour voir si c’est corrigé!!

EDIT du 17 novembre: il y a maintenant un bug report adressant cette issue:
Data Cursor text for bar charts with unsorted X data can be incorrect

Colorbar in deployed mode

function colorbag_bug
colorbar

puis invoquer la commande mcc comme suit:

>>mcc -mv colorbag_bug

Vous obtiendrez sous Windows l’executable colorbag_bug.exe

Ensuite pour lancer cet exécutable , il existe plusieurs manières :
soit depuis MATLAB :

>>!colorbar_bug.exe

soit en double-cliquant sur le fichier , ou encore en le lançant depuis une commande DOS.
Bref vous obtiendrez dans tous les cas la même figure que précédemment.
En revanche ce qui est hallucinant c’est de retrouver les mêmes options en mode compilé que sous MATLAB si on fait le clic-droit sur la colorbar.
En effet seuls les 3 premières options devraient apparaitre:

  • Delete
  • Location
  • Standard Colormaps

En effet pour les autres options , la doc du MATLAB Compiler là dessus est claire : Unsupported functions . Dans ce lien , on peut lire:
Some functions are not supported in standalone mode; that is, you cannot compile them with MATLAB Compiler. These functions are in the following categories:
[…]
Tools that allow run-time manipulation of figures

Et du coup lorsqu’on utilise l’ option « Interactive Colormap Shift » on obtient le message d’erreur:

??? Undefined function or method 'inspect' for input arguments of type  
'double'.

« Open Colormap Editor » retournera :

??? Undefined function or variable 'colormapeditor'.

« Show Property Editor » retournera :

Warning: The PROPEDIT function cannot be used in compiled applications.

Alors ce warning là il est marrant …genre c’est notre faute !! ;-)

Et la cerise sur le gâteau, celle qui m’a fait vraiment halluciner, c’est l’option « Show Code ». En tant que MATLAB geek tu dois savoir que le MATLAB Compiler a 2 buts:

  • Déployer ses applications sur des pc où MATLAB n’est pas installé
  • Protéger son code intellectuellement

Donc là heureusement que même si cette option apparait en compilé, elle ne marche pas!!!

??? Undefined function or method 'makemcode' for input arguments of type  
'scribe.colorbar'.

Voilà donc comme je disais au début de ce post, j’ai de suite remonté ce bug à TMW. C’est vraiment étrange que sur une fonction aussi commune que colorbar, ils aient pu passer ce bug!