Le big deal

  • Les exemples de la doc ne sont pas un bon deal!

le seul truc que je reproche c’est la documentation de deal (beh oui!!!) qui ne donne pas des exemples qui feraient tilt à l’utilisateur MATLAB :

En effet si vous tapez donc : >>doc deal
les 3 exemples fournis ne montrent pas clairement dans quels cas on peut l’utiliser.
En revanche le help lui est plus intéressant: >>help deal

D’où des fois l’intérêt de taper doc et help :) mais ça c’est encore une autre histoire .

Donc pour vous montrer la puissance et l’utilité de cette fonction , regardez plutôt mes 2 exemples ci-dessous :

  • Initialiser des matrices identiques

Par exemple il doit vous arriver souvent d’initialiser au début de vos codes des matrices :

>>A = zeros(3);
>>B = zeros(3);
>>C = zeros(3);
>>D = zeros(3);

En une seule ligne de code (oui oui monsieur une seule ligne )vous pouvez écrire:

[A B C D ] = deal(zeros(3));

Et ça en tant que MATLAB Geek on kiffe bien de raccourcir son code ! Bon ensuite il faudrait faire des tests de performance (profiler) pour voir si ça vaut la peine.

  • Récupérer les noms des fichiers d’un répertoire

Autre exemple on est souvent amené dans ses codes à faire des dir pour récupérer la liste des fichiers présents sous un répertoire donné.

Si on veut connaitre le contenu du répertoire racine où est installé MATLAB , on taperait:
>>direc = dir(matlabroot)

Ensuite pour récupérer dans une cellule tous les fichiers, une des solutions serait de faire une boucle for comme suit:

for ii=1: numel (direc)
filenames{ii} = direc(ii).name;
end

en une seule ligne de code vous pouvez remplacer cette for-loop par deal :

[filenames{1:length(direc),1}] = deal(direc.name);

Comment c’est top de chuinter une boucle for dans un code MATLAB!!

  • Quand utiliser deal?

Si vous tapez direc.name de l’exemple ci-dessus vous verrez pleins de valeurs ans s’afficher dans le Command Window de MATLAB.
Beh voilà moi dès que je vois ça, je sais que je peux récupérer toutes ces sorties en utilisant deal!

Loren elle dans son blog l’utilise pour échanger les valeurs des variables , j’avoue que je n’aurais jamais pensé à cette utilisation !

Bonne année geekienne!

La R2011a Prerelease est téléchargeable

R2011a Prerelease

Pour télécharger MATLAB 7.12 (R2011a) , il suffit de se rendre à la page du support :
http://www.mathworks.com/support/ et de cliquer sur le panel de droite sur Download Now:

download r2011a

Trop chouette ! hâte de découvrir les nouveautés … oui je sais je suis un MATLAB Geek!

Soumettre un bug

>>whatsnew
pour en découvrir les nouveautés. D’ailleurs je me demande pourquoi j’ai mis la fonction whatsnew dans la catégorie « Best-Of des commandes MATLAB inutiles » vu que je l’utilise souvent !!!

La grosse nouveauté de la R2011a c’est de pouvoir soumettre un bug / une amélioration au support technique de TMW depuis l’environnement MATLAB. Et quand on sait que je soumets plusieurs bugs par mois , évidemment cette feature me plait.

Pour cela il suffit d’aller le menu Help et de sélectionner Submit a MathWorks Support request.

Submit a MathWorks Support request

Voici l’interface proposée :

Unable to Contact MathWorks

La première fois que vous cliquerez sur le bouton « Create Offline MathWorks Support Request » vous aurez le message d’erreur suivant dans le Command Window :

10 janv. 2011 09:18:14 com.mathworks.webintegration.supportrequest.SRServiceWrapper getPlatforms

GRAVE: Service Request Service not initialized, cannot get platforms.

10 janv. 2011 09:18:14 com.mathworks.webintegration.supportrequest.SRServiceWrapper getOS

GRAVE: Service Request Service not initialized, cannot get OS.

Mais bon c’est normal , le système n’est pas encore en place ce n’est qu’une prerelease.

Donc si j’appuie sur le bouton  » Create Offline MathWorks Support Request » on a juste à donner un sujet à notre requête et l’expliquer . On peut aussi attacher , supprimer des pièces jointes et choisir la toolbox concernée (MATLAB, MATLAB Compiler …)

Submit bug

Et si on préfère appeler qu’écrire un email , on a la possibilité de connaitre directement le numéro de téléphone du support technique en cliquant sur View Phone Numbers :

Call technical Support

  • En vidéo:

La documentation de la 7.12 donne ce lien vidéo : http://www.mathworks.com/support/2011a/matlab/7.12/demos/new-support-request-feature-in-r2011a.html

  • Exemple:

Voici un exemple de bug qu’on peut remonter :

my first web form r2011a

Et quand on appuie ensuite sur le bouton Save , on nous propose de sauvegarder sous forme de zip et une boite de dialogue nous indique où a été sauvée notre requête:

feedback r2011a saved

A la fin l’extension zip est enlevée , je suppose que c’est pour que les serveurs ne scannent pas le zip et bloquent son envoi ou sa réception !

Voilà cette R2011a sera l’occasion d’écrire pleins de nouveaux sujets !

Renommer un fichier dans le CFB

Imaginez vous avez un fichier toto.m ouvert dans le MATLAB Editor :

current folder browser

et que vous souhaitez le renommer en matlabgeek.m pour faire original. Pour cela on peut directement éditer son nom dans le CFB:

rename

Une fois le fichier renommé, le truc c’est que jusqu’à présent , le nom toto.m était toujours affiché dans le MATLAB Editor. Son nom n’était pas modifié. Il fallait donc le fermer puis double cliquer sur matlabgeek.m dans le CFB pour voir le nouveau fichier fraichement renommé.
Bon beh en tout cas toutes ces manipulations n’auront pu lieu d’être avec la R2011a. Dès que vous modifiez dans le CBF le nom d’un fichier ouvert dand le MATLAB Editor, le nom de ce fichier ouvert est directement mis à jour dans le MATLAB Editor :

chnage effect r2011a

Si ce n’est pas clair ce que je viens de dire , voici en anglais les releases notes de la R2011a à ce sujet :

renaming files

Cette fonctionnalité va faire gagner du temps et est consistent avec les actions faites par l’utilisateur dans le CFB.

Menu en haut à gauche!!

Pour le tester , prenez par exemple l’exemple de la doc :

>>choice = menu('Choose a color','Red','Blue','Green')

Vous verrez que la figure suivante se met bien en haut à gauche de votre écran.

menu r2010b

J’ai contacté mercredi 12 janvier 2011 le support technique de The MathWorks pour en connaitre les raisons… et apparemment il n’y en a pas:

It is not possible to get a handle to the MENU dialog.
The MENU function creates a modal dialog box that returns the number of the selected menu item. MATLAB remains in a waiting state while executing the MENU function until you have made your choice or the dialog window is closed. The menu dialog object exists only while the MENU function is running and is cleared from memory when the function ends. Thus, you cannot get a handle to a menu dialog window through the MENU function.
So you can not change the position of the MENU dialog box via a figure handle.

To work around this issue, you can modify menu.m. On line 238 in menu.m you set the figure window position. You can change the position as you prefer.
Please note that this change have not been tested and may affect the functionality of MATLAB. We are not able to guarantee that the modified menu.m MATLAB file will work with other built-in MATLAB functions.

Another option would be to use MATLAB’s GUI development environment GUIDE, to custom-design your own dialog box.

, la solution consiste donc à éditer la fonction menu.m et de modifier la position. D’ailleurs c’est bien marqué en commentaires dans la fonction menu.m que c’est le comportement désiré : Resize figure to place it in top left of screen

menu.m

Ma réponse fut : imaginez que ce soit le même comportement pour les figures modales comme questdlg , warndlg

et la dernière réponse du support:

We don’t really have an explanation to why the developers chose to put the MENU dialog box up in the left corner. We think that since the dialog could be of variable size, they decided to put it there.
We don’t think they had any ulterior motive when they placed it there.

C’est quand même fou qu’on soit obligé d’aller éditer une fonction MATLAB. Du coup moi si j’ai seulement 3 choix à proposer à l’utilisateur j’utilise à la place de menu une questdlg ;

>>choice = questdlg('Choose a color:','Menu','Red','Blue','Green','Red')

ce qui me donne la figure suivante :

questdlg

et elle au moins elle se met au milieu de l’écran !!

Changer de répertoire rapidement (part 3)

>> cd(fileparts(editorservices.getActiveFilename))

retourne :

??? Undefined variable « editorservices » or function « editorservices.getActiveFilename ».

Et en effet en R2011a , on a:

>> help editorservices

editorservices not found.

Use the Help browser search field to search the documentation, or
type « help help » for help command options, such as help for methods.

alors que cette même commande en 10b donnait :

>> help editorservices

EDITORSERVICES Summary of Editor services functionality
Programmatically access the MATLAB Editor to open, change, save, or close
documents.

MATLAB Version 7.11 (R2010b) 03-Aug-2010

Work with all documents currently open in the Editor:
closeGroup – Close Editor and all open documents.
getAll – Identify all open Editor documents.

Work with single document currently open in the Editor:
getActive – Find active Editor document.
getActiveFilename – Find file name of active document.
find – Create EditorDocument object for an open document.
isOpen – Determine whether specified file is open in Editor.

Open an existing document or create a new one:
new – Create document in Editor.
open – Open file in Editor.
openAndGoToFunction – Open MATLAB file and highlight specified function.
openAndGoToLine – Open file and highlight specified line.

Do not panic! j’ai remonté ce problème au support technique de The MathWorks le 14 janvier 2011.

Et donc leur réponse lundi 17 janvier 2010 est que le package editorservices a été remplacé par :
matlab.desktop.editor

>> help matlab.desktop.editor
matlab.desktop.editor Summary of Editor Document functionality
Programmatically access the MATLAB Editor to open, change, save, or close
documents.

MATLAB Version 7.12 (R2011a Prerelease) 17-Dec-2010

Work with all documents open in the Editor:
isEditorAvailable – Verify Editor is available.
getAll – Identify all open Editor documents.

Work with single document open in the Editor:
getActive – Find active Editor document.
getActiveFilename – Find file name of active document.
findOpenDocument – Create Document object for open document.
isOpen – Determine if specified file is open in Editor.

Open an existing document or create a new one:
newDocument – Create Document in Editor.
openDocument – Open file in Editor.
openAndGoToFunction – Open MATLAB file and highlight specified function.
openAndGoToLine – Open file and highlight specified line.

Work with text from an Editor document:
indexToPositionInLine – Convert text array index to position within line.
positionInLineToIndex – Convert position within line to text array index.
linesToText – Convert cell array of text lines to character array.
textToLines – Convert character array into cell array of text lines.

Donc pour changer de répertoire rapidement à partir de la R2011a, il faut taper:
>> cd(fileparts(matlab.desktop.editor.getActiveFilename))

suibfolder au lieu de subfolder

Plus exactement on trouve ce typo dans la section Visualizing the DFT (Discrete Fourier Transform).

Cette coquille a été introduite avec MATLAB 7.10 (R2010a) :

suibfolder

  • Mon enquête :

En R2009b le mot subdirectory était toujours utilisé sauf à la seconde phrase :

Documentation example files for MATLAB mathematics are located in the \help\techdoc\math\examples subdirectory of your MATLAB root directory (matlabroot).
This subdirectory is not on the MATLAB path at installation.
To use the M-files in this subdirectory, either add the subdirectory to the MATLAB path (addpath) or make the subdirectory your current working directory (cd).

En R2010a , subdirectory a été remplacé par le mot subfolder mais malheureusement une coquille, un typo s’est inséré justement à la seconde phrase :

Documentation example files for MATLAB mathematics are located in the \help\techdoc\math\examples subfolder of your MATLAB root folder (matlabroot).
This suibfolder is not on the MATLAB path at installation.
To use the MATLAB files in this subfolder, either add the subfolder to the MATLAB path (addpath) or make the subfolder your current working folder (cd).

J’ai remonté cette erreur de documentation hier au support technique de The MathWorks.