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!!

Alors ce post je l’ai mis dans la catégorie Best-of des commandes MATLAB utiles , pour la simple raison qu’une fonctionnalité de MATLAB bien utile contre le piratage c’est l’Activation. Depuis la R2008a, tout utilisateur MATLAB doit activer sa licence pour pouvoir démarrer la première fois son MATLAB et là ça met fin aux licences MATLAB crackées sur le web. Ça permet entre autres de vérifier qu’une licence individuelle type Standalone Named User n’est installée que sur 4 machines différentes , pas plus. Ou qu’une licence individuelle type Designated Computer n’est installée que sur une seule machine, pas plus.
Vous trouverez tout ce qu’il faut savoir sur l’activation ici : Activation Overview: MATLAB and Simulink Product Families

Il n’y a pas encore si longtemps j’ai modéré (oui ça m’arrive!) un mec sur le forum MATLAB de DVP avec une configuration hallucinante , je vous le donne en mille …

Evitons la catastrophe

Premièrement s’assurer que l’option « Move to the recycle bin » est bien sélectionnée:

preferences matlab

Ainsi tout fichier supprimé ira dans la poubelle et il sera ainsi possible de restaurer le ou les fichiers supprimés.

Autre possibilité : utiliser la commande recycle apparue avec la R14.
recycle on fait la même chose

Deuxièmement …

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

Ce bug est reproductible en 2 lignes de code à peine.
Tapez juste colorbar :

>>colorbar

puis faites un clic-droit sur la colorbar , vous obtiendrez alors cette figure:

colorbar matlab

Intéressons nous aux 4 dernières options:

  • Interactive Colormap Shift
  • Open Colormap Editor
  • Show Property Editor
  • Show Code

La première permet de déplacer la colormap avec la souris sur la figure ainsi que de changer sa hauteur et sa largeur.
La seconde ouvre une figure sur laquelle on peut changer la colormap. Donc sur la figure ci-dessous: j’ai utilisé la première option où j’ai déplacé sur la gauche la colorbar et augmenté sa largeur , ensuite j’ai invoqué le Colormap Editor. Pour plus d’infos , sur cette fonctionnalité :
colormapeditor

Colormap Editor

La troisième option va ouvrir le Plot Tools. Pour plus d’infos , sur cette fonctionnalité :
propertyeditor

Property Editor

Et pour terminer l’option Show Code va me générer une fonction MATLAB qui me permettrait de reproduire la figure:

Show Code

Maintenant que nous avons parcouru ces options, compilons ce code, pour cela il nous faut d’abord créer une fonction :