Planet Squeak

blogs about Squeak, Pharo, Croquet and family
planet squeak - planet squeak es - planet squeak jp - planet croquet - planet squeak code - planet smalltalk

October 19, 2017


1900 Participants for the Pharo Mooc


The new session of the Pharo Mooc just started and you can still registered and have fun learning a cool system 🙂



by Stéphane Ducasse at October 19, 2017 01:38 PM

October 15, 2017


Open AL script

Hi Phil,

I did that using Ronie’s OpenAL binding and Merwann’s wav parser back in 2014-2015:

owner: ‘ronsaldo’
project: ‘OpenAL’

owner: ‘MerwanOuddane’
project: ‘WAVParser’

I did things such as (build yourself something derived from this code I did not check if it works):

WAVParser wavFromStream: (‘resources/music/spellNoise.wav’ asFileReference readStream binary readStream).
contextAttributes := ALContextAttributes new.
device := OpenALC openDefaultDevice.
context := device createContext: contextAttributes asList.
context process.
context currentDuring: [
“Create the buffer”
buffer := self makeBufferFromHeader: wav header data: wav data asByteArray.
“Create the source”
source := OpenAL genSource.
OpenAL sourcei: source param: AL_BUFFER value: buffer.
“Play the source”
OpenAL sourcePlay: source.
“Play for sometime ”
(Delay forSeconds: wav header soundDuration) wait.
“Delete the source and the buffer”
OpenAL deleteSource: source;
deleteBuffer: buffer
OpenALC nullCurrentContext.
context destroy.
device close.

MyClass>>makeBufferFromHeader: header data: data
| buffer |
buffer := OpenAL genBuffer.
OpenAL bufferData: buffer format: (self readFormatFromHeader: header) data: data size: data size freq: header sampleRate.
^ buffer

MyClass>>readFormatFromHeader: header
^ header channels = 1
ifTrue: [
header bitsPerSample = 8
ifTrue: [ AL_FORMAT_MONO8 ]
ifFalse: [ AL_FORMAT_MONO16 ] ]
ifFalse: [
header bitsPerSample = 8
ifFalse: [ AL_FORMAT_STEREO16 ] ]

I am pretty sure with a little work those things could work again. I have never succeeded in playing mp3 files from Pharo though (but I’m on mac and I remembered trying solutions that did not work on Mac but may work on other OS).

Have fun guys 🙂

by Stéphane Ducasse at October 15, 2017 05:50 PM

October 12, 2017


Building-With Versus Building-On

An intriguing essay

worth reading it and I will reread it


by Stéphane Ducasse at October 12, 2017 09:09 PM

Libusb binding


A bit late, there is a Libusb [1] binding (using UFFI) and support for the Human Interface Device [2] (that uses the binding but is written in pure Smalltalk) for Pharo.
Everything is on the github repository [3]. « Install »  and « Quick start »  sections give you all you need to start using the project.
One could also have a look at the wiki [4].
It works on Linux but hasn’t been tested on Mac OS nor Windows (it should work since libusb library works on these platforms).
Do not forget to install the 32 bits versions of libusb on your computer.
The purpose of this library is to provide the ability to use USB devices directly from Pharo.
For example, one could get data from a PS3 controller, a mouse, a keyboard, an Arduino device, etc…
PS: I realised this project during an internship in TaMère SCRL company [5]. Thanks to them!

by Stéphane Ducasse at October 12, 2017 08:06 PM

Last PR log



20442 open the welcome window

20462 An error in the Tests never break the build


20440 integrate ReferenceFinder


20461 Update Hermes to v2.2.1


20410 Undeclared variables should be compiled with explicit class UndeclaredVariable


20421 Email should run in a node and separate stage to be sent


20447 SystemVersion>>highestUpdate not initialized and nil


20459 Comment class ImportingResourceHelp

20444 FFIExternalStructurePlatformTests cleanup (is32/64bit)

20445 Uncategorized or wrongly categorized deepCopy, veryDeepCopy, shallowCopy and postCopy methods


20458 Two uncommented classes in Reflectivity package

20446 Properly categorize finalize and finalizeValues


20443 SDL_Event not initialized


20435 The CI process should fail if the conversion fails


20415 Restore the extra morphic worlds properly on startup


20434 use Ring2 during the bootstrap


20431 Move initialization of Color, InstructionStream and SmallInteger


20437 Uncategorized methods in RFCondition and RFMessageNode


20436 Pull request URL in build information e-mail is wrong


20423 Add health check that all class instance variable names in the system are lowercase


20429 ContextTest>>#testSetUp is dependent on Opal

20433 Fix the parsing of the PR description when sending the mail


20428 ClassTest (Kernel-Tests) is dependent on System-Changes

20424 standalone SUnit tests are failing after integration of the new version of Hermes


by Stéphane Ducasse at October 12, 2017 06:00 PM

Torsten Bergmann

Allen Wirfs-Brock - A Modular Journey To A World Spanning Virtual Image

Interesting video on the history of Smalltalk at Tectronix from Allen Wirfs-Brock

 and the slides are available here.

by Torsten ( at October 12, 2017 03:25 PM

Libusb binding and HID for Pharo

There is a Libusb  binding (using UFFI) and support for the Human Interface Device - HID (that uses the binding but is written in pure Smalltalk) for Pharo. Code is on GitHub.

Read the announcement

by Torsten ( at October 12, 2017 03:04 PM

Software exploration tool Moose2Model for developers (ABAP, SAP, Java, Smalltalk, …) – Roadmap

There is a Software exploration tool Moose2Model for developers (ABAP, SAP, Java, Smalltalk, …) written in Pharo. You can now read the Roadmap. You can see some of this in the ESUG 2017 presentation of Rainer Winkler

by Torsten ( at October 12, 2017 02:58 PM

Pharo success story: Driving ATMs in Moscow streets (Videos)

As I already reported here Pharo 1.1 was used to build ATM-kind software in Russian Bank. Such devices could be found in Moscow streets. Now there are two videos available on that, one showing the system in action

 and one showing it in Pharo development environment:

by Torsten ( at October 12, 2017 02:47 PM

October 11, 2017

Ecole des Mines

Pharo MOOC is coming…

The Pharo MOOC will start october 16th, 2017 on France Université Numérique (FUN). This MOOC is free and fully available in French and in English. Registration web page: If you are either a beginner or an expert in object-oriented programming, this MOOC will change the way you program with objects: come and learn or… Continue reading

by luc at October 11, 2017 08:19 AM

October 10, 2017


The story around PharoMinimal


What is the story around PharoMinimal and related images ?

Is there a writeup somewhere with instructions ?

Right now the minimal (Metacello) image based on Pharo 7 is used only as intermediate step in building of the full Pharo and the only real (successful) attempt to use it for something else is PharoLambda (
In general it can be used for building of own (server) applications. E.g. this way you can install and run Teapot on it:
./pharo Pharo7.0-metacello-32bit-d13eed2.image config ConfigurationOfTeapot –install=stable
./pharo Pharo7.0-metacello-32bit-d13eed2.image eval –no-quit “Teapot on GET: ‘/welcome’ -> ‘Hello World’; start.”
You can load baselines from the Git repositories too but we currently do not have any command line handler for it so you need to do it using “eval” command or *.st flile. Something like this:
Metacello new
baseline: ‘Seaside3’;
repository: ‘github://SeasideSt/Seaside:master/repository’;
To make it more usable we probably should extend it with SUnit and Fuel. If you want to extend it with some packages from vanilla Pharo, you should load them using FileTree from your local Pharo repository clone.
Gofer it
url: ‘filetree:///path-to-my-pharo-repository-clone/pharo/src’;
package: ‘Multilingual-OtherLanguages’;
package: ‘Multilingual-TextConverterOtherLanguages’;
It still needs some care. E.g. some classes from Zinc are not properly initialized (I know about DigitalSignatureAlgorithm MD5NonPrimitive RxMatcher RxParserRxsPredicate SHA1 ZnByteEncoder ZnConstants ZnMimeType ZnNetworkingUtils ZnServer ZnSingleThreadedServer TextConstants TextAction TextStyle).
I tried to load Seaside into it today (from the example above) and it failed (some strange error probalby related to Unicode processing). But we will fix it. If you will tell me what exactly you need we can make it work together as in case of PharoLambda.
followed by
Hi Pavel,

Thanks a lot for the explanation. To summarise: 70-minimal is the one with monticello and metacello in it that can load code via the config handler.

I was confused, because that failed for me.

Now, first doing

$ ./pharo pharo-minimal.image eval ‘ZnMimeType initialize’

fixed my loading problem. I also did the following because some of my project don’t separate tests (I known 😉

$ ./pharo pharo-minimal.image eval –save ‘Object subclass: #TestCase’

With those fixes I was able to load different projects

$ ./pharo pharo-minimal config ConfigurationOfZTimestamp –install=stable

$ ./pharo pharo-minimal config ConfigurationOfNeoConsole –install=bleedingEdge

The image remains equally fast in startup

$ time ./pharo pharo-minimal.image eval ZTimestamp now
real    0m0.062s
user    0m0.025s
sys     0m0.029s

And it works perfectly as a server, like

$ ./pharo pharo-minimal eval –no-quit ‘NeoConsoleTelnetServer new start’ &

$ telnet localhost 4999
Connected to localhost.
Escape character is ‘^]’.
Neo Console (32 Bit)
> get
known metrics:
system.status – Simple system status – Total allocated memory – Free memory
memory.gc – Garbage collect, return free memory
system.uptime – Image uptime human readeable
system.uptimeseconds – Image uptime seconds – Current date
system.time – Current time
system.timestamp – Current timestamp
process.count – Current process count
process.list – Current list of processes
system.version – Image version info
system.mcversions – Monticello packages version info
> get process.list
Delay Scheduling Process
Low Space Watcher
Idle Process
WeakArray Finalization Process
NeoConsoleTelnetServer port 4999
NeoConsoleTelnetServer port 4999 Connection Handler
> SessionManager default startupList collect: #handledId

#(#SmallInteger #Delay #ProcessorScheduler #OSPlatform #FileLocator #MCMethodDefinition #WeakArray #FileStream #MultiByteFileStream #EndianDetector #Symbol #LanguageEnvironment #Stdio #NonInteractiveTranscript #WeakFinalizationList #DiskStore #BasicCommandLineHandler #SourceFileArray #ASTCache #UUIDGenerator #InternetConfiguration #ZnLogEvent #ZnServer #Color #UIManagerSessionHandler #ZTimestamp)
Connection closed by foreign host.

Image size remains ~11Mb.

Very nice !

by Stéphane Ducasse at October 10, 2017 07:26 PM

Seaside on minimal Pharo 70


I was successfully able to run Seaside on the minimal Pharo 7.0. After the release cleanup the resultant image has about 12.4 MiB.
The loading script expects that in the working directory you have the Pharo repository clone (in a floder named ‘pharo’). You should modify the loading script to point to your real Pharo repository clone. This clone is needed to load SUnit into the minimal image. You should have PharoV60.sources reachable from the image.
The Seaside is loaded from my fork (github://pavel-krivanek/Seaside:minimalPharo/repository). I had to create a modified version because the original baseline broke the ZincHTTPComponents.
The strange line:
Smalltalk vm parameterAt: 25 put: (Smalltalk vm parameterAt: 25) * 50.
…sets the garbage collector. Without this the Seaside loading can fail on insufficient object memory.
wget -O – | bash
pharo Pharo.image –save –quit
pharo Pharo.image –no-quit
Starting of the image takes about 0.1 s on my machine.
— Pavel

by Stéphane Ducasse at October 10, 2017 07:05 PM

Benoit St-Jean

Le blogue de Jean-François Gagné

Si vous utilisez MySQL de façon intensive, le blogue de Jean-François Gagné est un incontournable!

Classé dans:bases de données, MySQL Tagged: MySQL

by endormitoire at October 10, 2017 09:06 AM

Trucs et astuces pour MySQL

Une page où vous pourrez avoir réponse à presque toutes vos questions concernant MySQL!

Classé dans:bases de données, MySQL Tagged: InnoDb, MyISAM, MySQL, snippets, tips

by endormitoire at October 10, 2017 08:04 AM

L’histoire et les origines d’Unix

Un article fort intéressant sur Unix, cet OS qui a toujours fait la joie des hackers et des power users!

Classé dans:informatique, Système d'exploitation, unix Tagged: Linux, OS, système d'exploitation, unix

by endormitoire at October 10, 2017 06:33 AM

La chanson du jour (1399)

Everybody Wants To Rule The World de Tears For Fears.

Welcome to your life
There’s no turning back
Even while we sleep
We will find You acting on your best behavior
Turn your back on mother nature
Everybody wants to rule the world

Classé dans:music, musique Tagged: Everybody Wants To Rule The World, Tears For Fears

by endormitoire at October 10, 2017 05:29 AM

October 09, 2017

Benoit St-Jean

La chanson du jour (1398)

Need You Tonight de INXS.

I need you tonight
‘Cause I’m not sleeping
There’s something about you girl
That makes me sweat

Classé dans:music, musique Tagged: INXS, Need You Tonight

by endormitoire at October 09, 2017 05:44 AM

La chanson du jour (1397)

Fly By Night de Rush.

Fly by night away from here
Change my life again
Fly by night goodbye my dear
My ship isn’t coming and I just can’t pretend

Classé dans:music, musique Tagged: Fly By Night, Rush

by endormitoire at October 09, 2017 05:40 AM

La chanson du jour (1396)

Solsbury Hill de Peter Grabriel.

When illusion spin her net
I’m never where I want to be
And liberty she pirouette
When I think that I am free
Watched by empty silhouettes
Close their eyes but still can see
No one taught them etiquette
So I will show another me

Classé dans:music, musique Tagged: Peter Grabriel, Solsbury Hill

by endormitoire at October 09, 2017 05:33 AM

La chanson du jour (1395)

Woodstock par Crosby, Stills, Nash & Young.

We are stardust, we are golden
We are billion year old carbon
And we got to get ourselves back to the garden

Classé dans:music, musique Tagged: Crosby, Nash & Young, Stills, Woodstock

by endormitoire at October 09, 2017 05:24 AM

La chanson du jour (1394)

Hold The Line de Toto.

It’s not in the way you look or the things that you say that you’ll do

Classé dans:music, musique Tagged: Hold The Line, Toto

by endormitoire at October 09, 2017 05:16 AM

La chanson du jour (1393)

Ironside Theme de Quincy Jones.

Classé dans:music, musique Tagged: Ironside Theme, Quincy Jones

by endormitoire at October 09, 2017 05:05 AM

October 08, 2017


Pharo goodies

At and the cool Pharo t-shirt


by Stéphane Ducasse at October 08, 2017 07:01 PM

October 07, 2017


Fun with UI Avatars

I came across, a web service that creates avatar images based on some parameters.

From Pharo, the shortest invocation would be something like
ZnEasy getPng: ‘‘.
Making use of the full builder interface of ZnClient that would look more like
ZnClient new
host: ‘‘;
addPath: #api;
queryAt: #name put: ‘Albert Einstein’;
queryAt: #size put: 128;
queryAt: #color put: ‘FFF’;
queryAt: #background put: ‘0D8ABC’;
queryAt: #rounded put: true;
accept: ZnMimeType imagePng;
enforceHttpSuccess: true;
enforceAcceptContentType: true;
contentReader: [ :entity | ImageReadWriter formFromStream: entity readStream ];
Anyway, it is cool to have an environment that makes this kind of experimentation so much fun.
It is probably easy to implement this avatar image generation directly in Pharo …

by Stéphane Ducasse at October 07, 2017 08:52 PM

October 06, 2017


Bugfix and enhancements release v0.2.5 for OSSubprocess

Dear all,

I have just released a new bugfix and enhancements release v0.2.5 for OSSubprocess as you can see in [1].
This new release is thanks to the awesome work of Guillermo Polito [2]. He found a problem (and a fix) that would hung/block the Pharo image in a wait state. This problem has been forever and I have faced it myself. It would only happen when using #waitForExit and under certain scenario.  Because of that, I recommend everyone to move to this release.
Aside from that serious bug, he has also done quite some improvements in the tests and in the Travis setup. Once this PR [3] has been merged and SmalltalkCI updated, our Travis build [4] should show all green builds for Linux/OSX and Pharo 5.0 and 6.1.
I have also copied the configuration into Pharo 5.0 and 6.0 catalog so as of tomorrow, it should be there.

by Stéphane Ducasse at October 06, 2017 07:32 PM

Iceberg version 0.6

Hi all,

I released Iceberg version 0.6. It includes a lot of small tweaks and fixes, but the most important inclusion is tonel file format which aims to replace file tree.
What is Tonel? (
Tonel is a file-per-class file format for monticello repositories. It’s purpose is to reduce the amount of files touched each operation, make the IO faster an compact the repositories database.
It has also as an objective to offer an “easy-to-read” format, so people wanting to understand a chunk of code will recognise it easily.
For testing, I migrated several of my projects to Tonel and I’ve been using it, you can see some as examples: (this was just an example and it has some minimal errors already fixed)
We plan to migrate Pharo development to tonel to address some problems we have:
– since it has to read/write a lot of files, IO operations are slow
– and even much more slow in Windows
– Windows also has a problem with longpaths.
Iceberg 0.6 will be integrated to Pharo7 soon 🙂
To update Pharo 6.1, there are instructions in the readme:
now, if you wan to migrate your projects to Tonel (from FileTree), here is a script you can use:
btw, tonel is independent of Iceberg and can be used with plain Monticello (but it is a metadaless format, history will reside on git, not on monticello).

by Stéphane Ducasse at October 06, 2017 06:01 PM

PharoLauncher 1.0.1

Hi all,

I just released a new version of the PharoLauncher 1.0.1.
Here are major improvements since last version:

  • Pharo launcher is now distributed with a Pharo 60 image with a 32-bits threaded VM (to avoid hangs when using OSProcess).
  • Add a VM management utility able to find (and download) the appropriate VM for a given image. So, the launcher is NOT shipped anymore with an extra VM. It will fetch required VM when needed.
  • Pharo Launcher files (images, VMs) are now considered as user Documents (easier to find). Consequently, they are now stored in the standard documents folder, i.e.
    • $HOME/Documents/Pharo on OS X,
    • $HOME/My Documents/Pharo on windows,
    • $HOME/Pharo on Linux (some linux distributions provide a document folder but some others not, so we put it in the HOME directory in all cases).
    • In this folder, you will find your images and virtual machines needed to run images.
  • Use of ProcessWrapper to run images on Windows.
  • Adds download of sources file for Pharo images > 60.
  • Left panel is now used for official images and Jenkins jobs templates and right panel is used for local images.
  • New mooc entry with the image ready to start the Pharo Mooc.
  • New deprecated category to find old official Pharo images.
  • Use system unzip when possible (Pharo unzip does not manage file permissions nor symbolic links).
You can get platform bundles from


For those wanted more info on how the adequate VM is computed, here is the process:
  1. determine the image format version
  2. find (and optionnaly fetch) a compatible VM (a VM able to run this image format) and run the image to get its Pharo version number
  3. find (and optionnaly fetch) the appropriate VM for this specific Pharo image version. Sources files are also downloaded with the VM when applicable.
  4. run the image with the appropriate VM

by Stéphane Ducasse at October 06, 2017 04:02 PM

[Fun] SVG snippet

Load XMLParser from catalog and load Athens-SVG from the Pharo/Athens repository
xmlDoc := XMLDOMParser parseUrl: ‘‘.
svg := AthensSVGConverter new importXMLDocument: xmlDoc.
svg transform: ‘scale(0.5)’.
surface := AthensCairoSurface extent: 500 @ 500.
surface drawDuring: [ :aCanvas | svg renderOn: aCanvas ].
surface asForm.

Screen Shot 2017-10-06 at 17.20.39


by Stéphane Ducasse at October 06, 2017 03:21 PM

October 03, 2017

Benoit St-Jean

Travailler avec GitHub

Je dois humblement avouer que la récente migration de Pharo vers une intégration totale avec GitHub me donne du fils à retordre. Nouvelle façon de storer le code, nouvel outil (Iceberg) et nouveau paradigme.  Je travaille en Smalltalk depuis 25 ans avec les mêmes outils de gestion de code (ENVY, Store, STS, Polytron, Monticello, etc) alors la transition vers GitHub me donne du fil à retordre.  ENVY et Store me sont tellement familiers autant dans leur fonctionnement que dans leur fonctionnalités que du jour au lendemain, je me suis trouvé perdu dans ce nouvel univers!

Donc, à défaut de savoir par où commencer, je me suis mis à chercher un guide du genre Best Practices assez simple pour que je puisse l’utiliser facilement et ainsi sortir de ce qui me semble un parfait merdier dans ma tête! Et je suis tombé sur l’article (même s’il date, les explications font totalement du sens dans ma tête!) A successful Git branching model.

Je vous ferai part de mes  aventures bientôt !


Classé dans:Pharo, Smalltalk Tagged: ENVY, GitHub, Monticello, Polytron, repository, Store, STS

by endormitoire at October 03, 2017 09:07 AM

VMProfiler et le profilage de code

J’avoue honteusement que cette annonce est passée sous mon radar. Tout autant que les articles subséquents. Un nouveau profiler développé par Sophie Kaleba (son blogue est ici) est maintenant disponible pour Pharo.

En préambule, elle vous explique comment obtenir le projet et l’installer dans votre image ainsi qu’elle vous fait un rapide survol de ce que l’outil peut faire et toutes les statistiques qu’il est en mesure de vous offrir.

Le premier article vous introduit au fonctionnement et aux fonctionnalité de base de l’outil.

Le deuxième article détaille les différentes informations relatives au temps d’exécution du code Pharo.

Finalement, le dernier article porte sur les autres données fournies par le profiler tels que la mémoire consommée/disponible, le garbage collection, les événements de la VM, etc.

Bref, VMProfiler est un outil vital quand vient le temps d’optimiser la performance de votre application!

Classé dans:Machine virtuelle, Pharo, Smalltalk, VM Tagged: machine virtuelle, optimisation, Pharo, Smalltalk, Sophie Kaleba, VM, VMProfiler

by endormitoire at October 03, 2017 08:31 AM