FAQ développeur Squeak

From OFSET Wiki

Jump to: navigation, search

:: Espaces Squeak ::

accueil | programmer | outils et frameworks | applications Smalltalk | présenter Smalltalk | communauté | foire aux questions


Cette FAQ est construite pas à pas en fonction des échanges sur La liste francophone Squeak-fr et la liste beginners. Vous êtes bien sûr invité et encouragé à participer à son élaboration.

Autres questions n'entrant dans aucunes de ces catégories :

Contents

[edit] Comment gérer les fichiers ?

Voir Fichiers et répertoires dans Squeak

[edit] Comment télécharger une page web ?

C'est super simple ! On utilise un client HTTP, une instance de la classe HTTPClient :

 httpCli := HTTPClient httpGetDocument: 'http://www.squeak.org'.
 file := FileStream fileNamed: 'www.squeak.org.html'.
 file nextPutAll: httpCli contents.
 file close.

[edit] Comment télécharger un fichier binaire (une image par exemple) ?

|fs|
fs := FileStream newFileNamed: 'google.gif'.
fs binary.
fs nextPutAll: (HTTPClient httpGet: 'www.google.fr/intl/fr_fr/images/logo.gif') contents.
fs close.

Plusieurs points:

  • il faut mettre le flux en binaire pour éviter les conversions inadéquates
  • il faut ajouter #contents après ce que retourne HTTPClient>>#httpGet: pour convertir le flux en une collection de caractères qui va ensuite être écrite.


[edit] Existe-t-il un raccourci pour stopper un processus en cours ?

Oui, [Ctrl]+[Alt]+., cela ouvre en même temps un débogueur.


[edit] Comment charger un fichier ".sar", ".mcz", ".pr" ... ?

En règle générale, on peut charger un fichier interactivement via un FileList :

  • ouvrez un FileList (Menu global/open/file list);
  • sélectionnez le fichier
  • La barre de bouton supérieure du FileList se met à jour en cohérence avec le type de fichier que vous sélectionnez, choisissez alors l'action appropriée :
    • open ou import pour une image
    • install pour un .sar
    • ...

Par programme, le chargement d'un fichier est dépendant du type de fichier, du type d'objet qui le représente sous squeak et de l'action de chargement désirée. Pour une image, par exemple, on peut vouloir l'importer ou l'ouvrir, pour un fichier source, on peut vouloir l'installer ou le consulter simplement sans l'interpréter, etc...

Pour trouver comment programmer l'action désirée, on peut s'appuyer sur les services gérés par un FileList. En effet, un FileList se base sur l'extension du fichier pour proposer les services possibles et présenter les menus en cohérence avec le type de fichier sélectionné.

Voici comment explorer tous les services offerts par un FileList pour un type de fichier :

(FileList new itemsForFile: 'Morph.png') explore

On visualise alors tous les services disponibles pour une image stockée dans un fichier ".png". Ses servives sont des instances de SimpleServiceEntry ou d'une de ses sous-classes. On s'intéresse plus particulièrement au fournisseur du service (variable d'instance provider du SimpleServiceEntry) et au message à envoyer au fournisseur (variable d'instance selector du SimpleServiceEntry). On peut voir ainsi que, pour ouvrir un fichier ".png" (service dont le label est open graphic in a window), on peut utiliser Form class>>openImageInWindow:.

Form openImageInWindow: 'Morph.png'

[edit] Comment enregistrer une application dans le menu global ?

Prenons l'exemple d'une application 'Tetris' mise en oeuvre par la classe TetrisApp. Si le jeu est ouvert par TetrisApp class>>open alors, dans la méthode TetrisApp class>>initialize on place le code suivant :

TheWorldMenu registerOpenCommand: {'Tetris'. {self. #open}}

[edit] Comment prévoir le nettoyage du système lorsqu'une application est retirée ?

Toute classe supprimée du système reçoit au préalable le message removeFromSystem. La version par défaut est dans la classe Class. On peut redéfinir cette méthode pour agir avant. Par exemple, si l'initialisation de la classe a créé une entrée dans le menu principal, il convient de retirer cette entrée (vous connaissez le truc, "laissez ces locaux dans l'état dans lequel vous les avez trouvé":) ).

Par exemple, pour la classe TetrisApp (voir le point précédent) :

TetrisApp class>>removeFromSystem
	TheWorldMenu unregisterOpenCommand: 'Tetris'.
	super removeFromSystem

N'oubliez surtout pas le "super removeFromSystem"


[edit] Comment enlever l'effet d'echo lors de la lecture d'un son ?

SoundPlayer stopReverb

[edit] Pour distribuer une application, comment se passer des fichiers .changes et .sources ?

Le fichier .sources contient l'ensemble des sources (avec les commentaires, noms de variables, etc.) de l'image. Le fichier .changes contient les modifications de l'image par rapport aux .sources. Pour alléger la distribution d'une application développée avec Squeak, il est possible de se passer de ces deux fichiers. Cependant Squeak vérifie au démarrage la présence de ces fichiers, et signale leur absence le cas échéant. Il est possible de supprimer cette vérification en exécutant les deux lignes suivantes puis en sauvant l'image :

Preferences disable: #warnIfNoChangesFile.
Preferences disable: #warnIfNoSourcesFile.

Ces options sont aussi accessibles depuis le gestionnaire graphique de préférences depuis le menu du fond.

Il existe également Preferences disableProgrammerFacilities qui semble faire plus de choses, lire le commentaire de cette méthodes.

[edit] Comment obtenir des informations sur le contexte d'exécution ?

C'est dans la classe SmalltalkImage et la méthode d'instance getSystemAttribute: que cela se passe. Par exemple, les exécutions suivantes donnent :

  • SmalltalkImage current getSystemAttribute: 0, le chemin absolue vers l'image.
  • SmalltalkImage current getSystemAttribute: 1, un script de démarrage si la VM a été invoquée avec.
  • SmalltalkImage current getSystemAttribute: 1001, le type de système d'exploitation.
  • ...

Voir le commentaire de la méthode getSystemAttribute: pour plus de détails.

[edit] Comment démarrer l'image avec un script en Smalltalk ?

Pour exécuter le script startup.st ci-dessous au démarrage de Squeak...

"Script startup.st a exécuter au démarrage de Squeak"
| montre |
montre := WatchMorph new openInWorld.
montre center: DisplayScreen actualScreenSize // 2.

...invoquer la machine virtuelle avec le chemin absolu vers le script :

squeak squeak.image file:///chemin_absolu/startup.st

Ou bien si le script est dans le même répertoire que l'image :

squeak squeak.image file://`pwd`/startup.st

Il semble que file:// puisse être remplacé par http:// ou ftp://.

L'utilisation de Launcher (Installer) permet d'utiliser un chemin relatif vers le script.

Personal tools