WEBVTT

00:00:01.150 --> 00:00:03.440 align:middle
Dans cette vidéo, je
voudrais vous expliquer un petit peu

00:00:03.607 --> 00:00:06.480 align:middle
les différentes façons dont
Pharo est packagé, pour que

00:00:06.647 --> 00:00:08.640 align:middle
vous vous y retrouviez dans le futur.

00:00:09.000 --> 00:00:11.400 align:middle
Quand vous allez installer
Pharo vous irez sur un lien

00:00:11.950 --> 00:00:14.370 align:middle
normalement qu'on vous aura
donné, mais si vous allez sur

00:00:14.537 --> 00:00:17.280 align:middle
Pharo, la distribution au
moment où je fais cette vidéo c'est

00:00:17.447 --> 00:00:21.060 align:middle
la version 4 mais la version 5
sera rigoureusement identique.

00:00:21.410 --> 00:00:24.370 align:middle
Quand j'ai downloadé
Mac OSX, j'obtiens ce Zip.

00:00:24.750 --> 00:00:29.090 align:middle
Si je dézippe ce Zip,
j'obtiens ce que j'appelle Pharo4 app.

00:00:29.480 --> 00:00:32.460 align:middle
Quand je le lance
Pharo 4 app, j'ai Pharo.

00:00:32.627 --> 00:00:36.410 align:middle
Imaginons qu'on va faire

00:00:42.690 --> 00:00:47.380 align:middle
"Hello". Quand je fais Sauve,
ça va me sauver l'environnement.

00:00:48.730 --> 00:00:50.430 align:middle
Je vais faire Save.

00:00:51.490 --> 00:00:55.920 align:middle
Si je fais Quit maintenant,
je vais le relancer après,

00:00:56.360 --> 00:01:00.100 align:middle
et j'aurai exactement
"Hello", puisque sauvegarder l'image

00:01:00.267 --> 00:01:03.810 align:middle
Pharo c'est faire une
copie de mémoire avec tous les

00:01:04.000 --> 00:01:07.780 align:middle
objets dont les objets
Bytecode et les méthodes compilées.

00:01:07.947 --> 00:01:11.920 align:middle
Maintenant qu'est-ce qu'il y a dans

00:01:13.340 --> 00:01:14.400 align:middle
cette application ?

00:01:14.567 --> 00:01:16.750 align:middle
Sur Mac, on peut voir
ce qu'il y a l'intérieur.

00:01:16.930 --> 00:01:20.620 align:middle
Si je fais Show Contents
qu'est-ce que je vais voir?

00:01:20.930 --> 00:01:24.380 align:middle
Je vais trouver une machine
virtuelle Pharo et des ressources.

00:01:24.810 --> 00:01:27.530 align:middle
Et là, je vais trouver un
fichier changes et un fichier

00:01:31.280 --> 00:01:31.913 align:middle
image.

00:01:32.400 --> 00:01:35.880 align:middle
Le fichier image, c'est
celui qui contient vraiment les

00:01:36.047 --> 00:01:39.840 align:middle
objets qui représentent la
mémoire, et le fichier changes

00:01:40.070 --> 00:01:42.760 align:middle
c'est un fichier qui
comprend tous les changements

00:01:42.927 --> 00:01:46.680 align:middle
incrémentaux que l'on a
faits. Si je double-clique

00:01:48.580 --> 00:01:49.800 align:middle
sur le fichier image,

00:01:55.800 --> 00:02:00.000 align:middle
normalement suivant votre
OS, je vais le lancer sur une

00:02:00.470 --> 00:02:03.960 align:middle
machine virtuelle Pharo
que j'ai installée, ça va me

00:02:04.127 --> 00:02:05.900 align:middle
relancer mon fichier image.

00:02:07.020 --> 00:02:08.450 align:middle
Ce fichier image,
qu'est-ce qui se passe?

00:02:08.617 --> 00:02:10.000 align:middle
Imaginons que je
définisse une classe.

00:02:10.157 --> 00:02:12.050 align:middle
Je vais définir un package,

00:02:18.100 --> 00:02:18.733 align:middle
"Add package" "ATest".

00:02:18.900 --> 00:02:20.060 align:middle
Dans ce package,

00:02:23.470 --> 00:02:24.300 align:middle
je vais définir "MyStrangeClass".

00:02:28.600 --> 00:02:33.170 align:middle
Je la définis et puis là, je
vais mettre "foooo" qui rend

00:02:33.430 --> 00:02:34.063 align:middle
42.

00:02:38.650 --> 00:02:42.750 align:middle
Si je sauve cette image
avec un autre nom, je vais la

00:02:42.917 --> 00:02:44.270 align:middle
sauver avec le nom 

00:02:44.437 --> 00:02:45.070 align:middle
Pharo40Stef.

00:02:52.060 --> 00:02:53.930 align:middle
Qu'est-ce que ça va avoir fait ?

00:02:54.097 --> 00:02:58.580 align:middle
Je quitte. Ça m'a
créé un autre couple

00:02:58.747 --> 00:03:01.570 align:middle
image et change. Dans ce
fichier changes, on ne va pas l'ouvrir

00:03:01.737 --> 00:03:04.620 align:middle
parce que ce n'est pas
lisible pour l'humain, il y a le

00:03:04.787 --> 00:03:07.110 align:middle
code des méthodes
que je viens de créer.

00:03:07.277 --> 00:03:11.840 align:middle
Et là si je relance
Pharo 4, je vais le

00:03:12.007 --> 00:03:16.300 align:middle
relancer en utilisant ma
machine virtuelle, j'obtiens

00:03:17.940 --> 00:03:22.110 align:middle
de nouveau le snapshot, ce
qu'on appelle la copie du

00:03:22.277 --> 00:03:27.200 align:middle
système que j'avais fait à un temps T

00:03:27.440 --> 00:03:28.073 align:middle
ultérieur.

00:03:28.240 --> 00:03:32.790 align:middle
Maintenant, si je réexécute
l'image PharoStef, qu'est-ce

00:03:32.957 --> 00:03:33.590 align:middle
qu'elle va me faire ?

00:03:33.757 --> 00:03:37.180 align:middle
Elle va me montrer le
système avec ma nouvelle classe.

00:03:39.740 --> 00:03:42.920 align:middle
L'application Pharo 4,
c'est ce qu'on appelle un Bundle

00:03:43.087 --> 00:03:47.460 align:middle
Mac qui contient la VM Pharo
plus une image plus un change.

00:03:47.627 --> 00:03:50.500 align:middle
Si je double-clique dessus,
je n'ai pas le choix, il va

00:03:50.667 --> 00:03:52.950 align:middle
toujours choisir Pharo
image parce que c'est un script

00:03:53.330 --> 00:03:55.660 align:middle
qui a codé en dur:
"Voilà, c'est cette image-là.

00:03:55.827 --> 00:03:59.430 align:middle
" En général, c'est pratique
au début de l'utilisation de

00:03:59.597 --> 00:04:02.600 align:middle
Pharo, mais nous on n'utilise pas ça.

00:04:02.767 --> 00:04:05.840 align:middle
En général, soit on utilise
une instruction du command

00:04:06.007 --> 00:04:09.200 align:middle
line qui va être
quelque chose du genre

00:04:10.290 --> 00:04:14.470 align:middle
Pharo-ui avec 
MyPharoImage.image,

00:04:14.637 --> 00:04:19.250 align:middle
et qui va

00:04:19.417 --> 00:04:21.710 align:middle
envoyer le truc. Ou alors si
on est en command line et qu'on

00:04:21.877 --> 00:04:24.010 align:middle
ne veut pas avoir le ui, on
va faire ce genre de choses.

00:04:24.520 --> 00:04:26.450 align:middle
Ça veut dire que Pharo est
installé quelque part dans

00:04:26.617 --> 00:04:30.130 align:middle
votre système comme sur une
application Unix standard.

00:04:31.070 --> 00:04:34.400 align:middle
Maintenant, ce que vous voyez sur

00:04:36.150 --> 00:04:38.930 align:middle
cette page, c'est que vous
pouvez télécharger un couple

00:04:39.097 --> 00:04:40.940 align:middle
Pharo, vous pouvez
télécharger une machine virtuelle.

00:04:41.110 --> 00:04:43.560 align:middle
On va télécharger la
machine virtuelle et on va

00:04:43.727 --> 00:04:48.220 align:middle
télécharger un couple
image et aussi source.

00:04:48.690 --> 00:04:50.830 align:middle
Je vais vous expliquer ce
que c'est comme ça on aura les

00:04:51.000 --> 00:04:54.460 align:middle
3 sous la main, on va
pouvoir jouer ensemble.

00:05:02.630 --> 00:05:05.760 align:middle
Maintenant si je dézippe
le fichier qui correspond à

00:05:06.570 --> 00:05:09.240 align:middle
Pharo Image et
Changes, j'obtiens celui-là.

00:05:09.710 --> 00:05:12.260 align:middle
Quand je le dézippe qu'est-ce que
j'obtiens dans Pharo dans ce fichier?

00:05:12.427 --> 00:05:13.680 align:middle
J'obtiens une image.

00:05:13.870 --> 00:05:15.950 align:middle
On va le faire
plutôt en mode pour que

00:05:19.140 --> 00:05:20.070 align:middle
vous voyez ce qu'il y a dedans.

00:05:21.290 --> 00:05:24.010 align:middle
Ça veut dire que ce fichier,
c'est encore un couple image

00:05:24.177 --> 00:05:27.660 align:middle
qui correspond à un certain
état du snapshot ou de l'image

00:05:27.827 --> 00:05:32.630 align:middle
Pharo, du système virtualisé.
Là, je vais pouvoir l'exécuter

00:05:32.797 --> 00:05:36.280 align:middle
sur l'image Pharo.

00:05:38.140 --> 00:05:42.120 align:middle
Il me donne un message et ce
message qu'est-ce que c'est?

00:05:44.700 --> 00:05:49.270 align:middle
Le système peut fonctionner
puisque je peux exécuter n'importe quoi.

00:05:49.890 --> 00:05:50.770 align:middle
Je peux le faire tourner.

00:05:50.937 --> 00:05:53.330 align:middle
Maintenant, je peux faire
exactement ce que j'ai fait avant.

00:05:53.497 --> 00:05:58.360 align:middle
Je peux définir
MyPackage, et dans MyPackage

00:05:58.770 --> 00:05:59.900 align:middle
je vais dire MyStrangeClass.

00:06:00.740 --> 00:06:02.220 align:middle
Donc on commence à avoir l'habitude.

00:06:04.180 --> 00:06:07.580 align:middle
Je vais définir une méthode :

00:06:09.010 --> 00:06:12.520 align:middle
fooo 42. Il me
demande mon identifiant.

00:06:14.460 --> 00:06:17.510 align:middle
Je vais pouvoir faire comme
d'habitude "MyStrangeClass

00:06:19.370 --> 00:06:23.050 align:middle
new fooo" et ça va me rendre 42.

00:06:23.420 --> 00:06:24.600 align:middle
Donc, très bien. Et
là, je peux le sauver.

00:06:25.620 --> 00:06:27.360 align:middle
Je vais le sauver par
exemple avec un autre nom, je vais

00:06:27.527 --> 00:06:32.240 align:middle
l'appeler Stef, là je
vais l'appeler PharoStrange.

00:06:32.407 --> 00:06:33.040 align:middle
OK.

00:06:39.410 --> 00:06:40.200 align:middle
Qu'est-ce qu'il me dit ?

00:06:40.367 --> 00:06:44.530 align:middle
Il me dit "Je ne peux pas
trouver le fichier source

00:06:45.310 --> 00:06:49.200 align:middle
Pharo 4. 0. " Pourquoi il me dit ça ?

00:06:50.240 --> 00:06:53.730 align:middle
Quand j'ouvre le browser si
je veux voir par exemple le

00:06:53.897 --> 00:06:58.670 align:middle
code de AST, ce n'est pas votre
code, donc on va aller tout en haut.

00:06:58.837 --> 00:07:03.000 align:middle
Le système, ce qu'il est en
train de faire, c'est pour ça

00:07:03.167 --> 00:07:04.000 align:middle
qu'il ne trouve pas les commentaires,

00:07:08.120 --> 00:07:09.180 align:middle
en fait il est en
train de décompiler.

00:07:09.750 --> 00:07:11.730 align:middle
Alors on ne le voit pas
parce que les méthodes sont trop

00:07:11.897 --> 00:07:13.420 align:middle
simples mais il décompile le code.

00:07:13.587 --> 00:07:15.000 align:middle
On va aller sur quelque
chose de plus concret.

00:07:15.147 --> 00:07:19.820 align:middle
Là, il a décompilé le
code, le Bytecode représente un

00:07:20.000 --> 00:07:21.620 align:middle
argument et il sait très
bien que c'est un argument.

00:07:22.040 --> 00:07:23.440 align:middle
Mais on a perdu le source.

00:07:24.050 --> 00:07:28.870 align:middle
Le source en général du
système, quand Pharo est

00:07:29.037 --> 00:07:33.530 align:middle
déployé, est stocké dans un
fichier qui s'appelle, et qu'on

00:07:33.697 --> 00:07:36.290 align:middle
trouve ici, qui est
le fichier Pharo 4.

00:07:36.457 --> 00:07:38.920 align:middle
source. En général Pharo 4.

00:07:39.087 --> 00:07:41.420 align:middle
source, on va l'installer
une fois sur le système parce

00:07:41.587 --> 00:07:44.040 align:middle
que ce fichier est en
lecture seule, et que toutes vos

00:07:44.860 --> 00:07:46.030 align:middle
applications vont
pouvoir s'en servir.

00:07:46.210 --> 00:07:47.180 align:middle
Là je l'ai ici, je vais le dézipper.

00:07:47.347 --> 00:07:50.670 align:middle
Là, j'ai Pharo 4. source.

00:07:51.270 --> 00:07:52.840 align:middle
Si je quitte ici sans sauver

00:07:56.690 --> 00:07:59.060 align:middle
et que je relance mon
application, là de toute façon vous

00:07:59.227 --> 00:08:02.280 align:middle
voyez que ça a fait exactement
comme précédemment, c'est-à-dire

00:08:02.470 --> 00:08:05.190 align:middle
que quand je sauve un
snapshot en lui donnant un autre

00:08:05.357 --> 00:08:10.160 align:middle
nom, j'ai de nouveau un
système avec 2 pendants:

00:08:10.420 --> 00:08:11.620 align:middle
l'image et ses changes.

00:08:12.520 --> 00:08:16.650 align:middle
Là si je reprends mon
ancienne image, elle

00:08:17.670 --> 00:08:20.780 align:middle
ne fait plus d'erreurs parce
qu'il a trouvé le code et il

00:08:20.947 --> 00:08:24.710 align:middle
sait très bien que ça
correspond à l'état qu'on avait

00:08:24.880 --> 00:08:27.130 align:middle
quand on a lancé la première image.

00:08:27.297 --> 00:08:28.640 align:middle
Maintenant si j'utilise la deuxième,

00:08:34.500 --> 00:08:38.960 align:middle
là si je reprends le
fichier AST-Core, déjà

00:08:39.127 --> 00:08:41.830 align:middle
mes classes ont des commentaires.

00:08:47.100 --> 00:08:51.000 align:middle
Là c'est vraiment les noms que les
gens ont donné qui correspondent à ça.

00:08:51.830 --> 00:08:53.870 align:middle
Si on regarde cette
architecture, qu'est-ce qu'on a?

00:08:54.950 --> 00:08:57.230 align:middle
On a le fichier source
qui contient les sources du

00:08:57.397 --> 00:09:02.000 align:middle
système, en général le
compilateur une fois que le

00:09:02.167 --> 00:09:04.610 align:middle
système est compilé il n'a
pas besoin de ses sources, la

00:09:04.777 --> 00:09:08.330 align:middle
machine virtuelle et des
paires image et change.

00:09:09.390 --> 00:09:12.180 align:middle
Image contient tous les
objets que vous avez définis plus

00:09:12.347 --> 00:09:14.790 align:middle
les objets du système,
avec le fichier changes qui

00:09:14.957 --> 00:09:18.520 align:middle
contient les deltas de ce que vous
avez fait par rapport au fichier changes.

00:09:18.690 --> 00:09:22.430 align:middle
A chaque fois que vous allez
sauver votre système, ça va

00:09:22.597 --> 00:09:25.260 align:middle
faire comme si vous sauviez une
image virtualisée de votre OS.

00:09:25.427 --> 00:09:26.730 align:middle
C'est exactement le même principe.

00:09:27.480 --> 00:09:31.910 align:middle
Si on regarde à
l'intérieur de l'application Pharo 4,

00:09:33.200 --> 00:09:35.200 align:middle
on va retrouver ces ressources.

00:09:36.430 --> 00:09:40.730 align:middle
J'ai le fichier Pharo 4
sources et j'ai le fichier image,

00:09:40.897 --> 00:09:43.130 align:middle
le fichier changes et
quelque part ici la machine

00:09:43.297 --> 00:09:44.540 align:middle
virtuelle avec ses plugins.

