Planet Squeak

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

September 22, 2018


Willow tutorials

by Stéphane Ducasse at September 22, 2018 02:11 PM

September 20, 2018

Torsten Bergmann

Caffeine.js and WebVR - Smalltalk in 3D

Craig is continuing on his caffeine Project - which uses SqueakJS for a binding to JavaScript. He plays with WebVR and it is nice to see Squeak Smalltalk running in the browser in 3D.

A demo is here:

by Torsten ( at September 20, 2018 05:14 PM


[Ann] Chrysal: a library to manage configuration files

Chrysal is a library to express and manage external configurations expressed as STON files. Chrysal is the successor of Cocoon but it does not use any magical things like DNU and Magritte. Chrysal is purely static, it means that given a list of items, a reader class is generated that manages the conversion between the two worlds (what the end-users is declaring and what the application needs). At runtime a generated Chrysal configuration can be a subclass of a domain subclass of Chrysal configuration. This way we can define behavior that will not be lost during the recompilation of the chrysal configuration (the one based on the actual description).

by Stéphane Ducasse at September 20, 2018 12:22 PM

PharoJS V22 is out.

Hi, PharoJS V22 is out. It mainly provides a fix to deal with the GitHub restructuring due to migration to Pharo 7.0. Below you’ll find PharoJS V22 Release Log!/~noury/PharoJS

by Stéphane Ducasse at September 20, 2018 08:33 AM

Torsten Bergmann

PharoJS V22 available

PharoJS V22 is available on SmalltalkHub.

From the release notes: RELEASE V22 Added statistics package. Generates statistics about Pharo classes used by an app and the size of generated JS code Fixed default app folder parent to fit the modification in github repo = non-pharo code moved to HTML folder

This is like the last version done on Pharo 5 and SmalltalkHub as Noury will switch to GitHub now.

by Torsten ( at September 20, 2018 06:46 AM

September 18, 2018


[ANN] New Pharo 6.1 stable VM


Following what I had in my todo list for when coming back from ESUG, I promoted a new stable VM for Pharo 6.1.
This is the VM that has been tested during almost two months for Pharo 7.0, so it should be fine, but let me know if there is any problem.

by Stéphane Ducasse at September 18, 2018 07:55 PM

September 17, 2018

Torsten Bergmann

Jun meets GTInspector

Combining Jun 3D with GTInspector:

by Torsten ( at September 17, 2018 12:11 PM

Creating Bloc Widgets in Pharo

Creating Bloc Widgets in Pharo: - part 1- part 2- part 3

by Torsten ( at September 17, 2018 12:07 PM

September 13, 2018

Torsten Bergmann

ESUG 2018 - Slides on Pharo evolution

Slides from ESUG 2018 from Esteban on Pharo evolution and current roadmap.

by Torsten ( at September 13, 2018 03:23 PM

ESUG 2018 - Clap Slides

Slides from ESUG 2018 about Clap - the Pharo Command line Parser. Code is on

by Torsten ( at September 13, 2018 03:20 PM

Ecole des Mines

PhaROS awarded

Great news that PhaROS got the 3rd price of the Innovation Technology Awards @ ESUG 2018. Santiago Bragagnolo, Luc Fabresse, Pablo Estéfo, Sang Xuan Le and Noury Bouraqadi. Congrats to all contributors!

by luc at September 13, 2018 08:17 AM

September 11, 2018

Torsten Bergmann

ESUG 2018

is running. You can follow it using the various tweets.

by Torsten ( at September 11, 2018 02:43 PM

Farmers Market App don in PharoJS

News from ESUG 2018 also on PharoJS:

The Farmers Market App at is built in PharoJS

by Torsten ( at September 11, 2018 02:36 PM

Shampoo - Emacs Smalltalk development

Shampoo: a set of tools for remote Smalltalk development with Emacs.

Basically it is constructed using a Smalltalk image-side server that provides a remote access to an image and a Shampoo mode for Emacs. It also runs for latest Pharo as this picture proves.

by Torsten ( at September 11, 2018 02:26 PM

September 09, 2018

Pierce Ng

Docker and Pharo

Recently there were discussions and blog posts on Docker for Pharo and Gemstone/S. This is my report after spending an afternoon on the subject.

First, some links:

This blog is implemented in Pharo and is the natural choice for my Docker example application. I already have a Smalltalk snippet to load this blog's code and its dependencies into a pristine Pharo image, so I'll be using that. Also, as a matter of course, I build the Pharo VM from source, and my VM installation also contains self-built shared libraries like and

Outside of Docker, prepare a custom Pharo image:

% cp ../Pharo64-60543.image scms1.image
% cp ../Pharo64-60543.image scms1.image
% ~/pkg/pharo6vm64/gofaro scms1.image st

gofaro is a simple shell script which purpose is to make sure the Pharo VM loads my custom shared libraries, co-located with the standard VM files, at run time:

PHAROVMPATH=$(dirname `readlink -f "$0"`)
LD_LIBRARY_PATH="$PHAROVMPATH" exec "$PHAROVMPATH/pharo" $@ looks like this:

"Load dependencies and then the blog code."
Gofer it ...
Gofer it ...
Metacello new ...
Metacello new ...

"Save the image for injection into Docker."
SmalltalkImage current snapshot: true andQuit: true

Before describing my Dockerfile, here are my conventions for inside the Docker container:

Starting with Ubuntu 18.04, install libfreetype6. The other lines are copied from Torsten's tutorial.

FROM ubuntu:18.04
LABEL maintainer="Pierce Ng"
RUN apt-get update \
  && apt-get -y install libfreetype6 \
  && apt-get -y upgrade \
  && rm -rf /var/lib/apt/lists/* \
  && true

Next, install the Pharo VM.

RUN mkdir -p /pkg/vm
COPY pharo6vm64/ /pkg/vm
COPY pharolimits.conf /etc/security/limits.d/pharo.conf

Now copy over the prepared Pharo image.

RUN mkdir -p /pkg/image
WORKDIR /pkg/image
COPY PharoV60.sources PharoV60.sources
COPY scms1.image scms1.image
COPY scms1.changes scms1.changes

Finally, set the Docker container running. Here we create a UID/GID pair to run the application. Said UID owns the mutable Pharo files in /pkg/image and also the /pkg/image directory itself, in case the application needs to create other files such as SQLite databases.

RUN groupadd -g 1099 pharoapp && useradd -r -u 1099 -g pharoapp pharoapp
RUN chown -R pharoapp:pharoapp /pkg/image
RUN chown root:root /pkg/image/PharoV60.sources
RUN chown root:root /pkg/image/
USER pharoapp:pharoapp
CMD /pkg/vm/gofaro -vm-display-null -vm-sound-null scms1.image --no-quit st runs the blog application. In my current non-Dockerized installation, the snippet is in a workspace; for Docker, to become DevOps/agile/CI/CD buzzwords-compliant, this snippet is run from the command line. This is one Dockerization adaptation I had to make to my application.

Now we build the Docker image.

% sudo docker build -t samadhiweb/scms1:monolithic .
Sending build context to Docker daemon    299MB
Step 1/19 : FROM ubuntu:18.04
 ---> cd6d8154f1e1
Step 2/19 : LABEL maintainer="Pierce Ng"
 ---> Using cache
 ---> 1defb3ac00a8
Step 3/19 : RUN apt-get update   && apt-get -y install libfreetype6   && apt-get -y upgrade   && rm -rf /var/lib/apt/lists/*   && true
 ---> Running in b4e328138b50
<bunch of apt-get output>
Removing intermediate container b4e328138b50
 ---> 79e9d8ed7959
Step 4/19 : RUN mkdir -p /pkg/vm
 ---> Running in efb2b9b717fe
Removing intermediate container efb2b9b717fe
 ---> 0526cbc4c483
Step 5/19 : COPY pharo6vm64/ /pkg/vm
 ---> 2d751994c68c
Step 6/19 : COPY pharolimits.conf /etc/security/limits.d/pharo.conf
 ---> f442f475c568
Step 7/19 : RUN mkdir -p /pkg/image
 ---> Running in 143ebd54f243
Removing intermediate container 143ebd54f243
 ---> 6d1b99d30050
Step 8/19 : WORKDIR /pkg/image
 ---> Running in 45c76d8c08c0
Removing intermediate container 45c76d8c08c0
 ---> 57247408801b
Step 9/19 : COPY PharoV60.sources PharoV60.sources
 ---> 8802acc416f0
Step 10/19 : COPY scms1.image scms1.image
 ---> 3e2d62be5d00
Step 11/19 : COPY scms1.changes scms1.changes
 ---> dcbec7ebdda9
Step 12/19 : COPY
 ---> 72fa4efb33ff
Step 13/19 : RUN groupadd -g 1099 pharoapp && useradd -r -u 1099 -g pharoapp pharoapp
 ---> Running in e0af716c8db2
Removing intermediate container e0af716c8db2
 ---> 0a42beed8065
Step 14/19 : RUN chown -R pharoapp:pharoapp /pkg/image
 ---> Running in 2da21fefa399
Removing intermediate container 2da21fefa399
 ---> 0d808f48ae32
Step 15/19 : RUN chown root:root /pkg/image/PharoV60.sources
 ---> Running in 4ca0c6eb8301
Removing intermediate container 4ca0c6eb8301
 ---> 1426236b509c
Step 16/19 : RUN chown root:root /pkg/image/
 ---> Running in a942ecb8a155
Removing intermediate container a942ecb8a155
 ---> 1213e1647076
Step 17/19 : EXPOSE 8081
 ---> Running in 3b74e55b6394
Removing intermediate container 3b74e55b6394
 ---> a04593571d13
Step 18/19 : USER pharoapp:pharoapp
 ---> Running in 77ecde5a7ca7
Removing intermediate container 77ecde5a7ca7
 ---> 975b614d3a9f
Step 19/19 : CMD /pkg/vm/gofaro -vm-display-null -vm-sound-null scms1.image --no-quit st
 ---> Running in 2c6e7645da3d
Removing intermediate container 2c6e7645da3d
 ---> 65b4ca6cc5c5
Successfully built 65b4ca6cc5c5
Successfully tagged samadhiweb/scms1:monolithic
% sudo docker image ls
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
samadhiweb/scms1        monolithic          65b4ca6cc5c5        2 minutes ago       402MB

The Docker image has been created, but it is not ready to run yet, because the web content is not in the image. I'll put the content in a Docker volume. Below, the first -v mounts my host's content directory into /tmp/webcontent in the container; the second -v mounts the volume smdw-content into /pkg/cms in the container; I'm running the busybox image to get a shell prompt; and within the container I copy the web content from the source to the destination.

% sudo docker volume create smdw-content
% sudo docker run --rm -it \
  -v ~/work/webcms/samadhiweb:/tmp/webcontent \
  -v smdw-content:/pkg/cms \
  busybox sh
/ # cp -p -r /tmp/webcontent/* /pkg/cms/
/ # ^D

Finally, run the Docker image, taking care to mount the volume smdw-content, now with this blog's content:

% sudo docker run --rm -d -p 8081:8081 \
  -v smdw-content:/pkg/cms \
  --name samadhiweb samadhiweb/scms1:monolithic
% sudo docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                    NAMES
bfcc80b32f35        samadhiweb/scms1:monolithic   "/bin/sh -c '/pkg/vm."   4 seconds ago       Up 3 seconds>8081/tcp   samadhiweb

Verified with a web browser. This works on my computer. :-)

by Pierce Ng at September 09, 2018 08:46 PM


Docker and Pharo: report of an exploration


by Stéphane Ducasse at September 09, 2018 08:12 PM

September 07, 2018


Domain specific modeling


by Stéphane Ducasse at September 07, 2018 06:05 AM

September 06, 2018

Torsten Bergmann

Geranium - agent-based simulator in Pharo

Geranium is an agent-based simulator with a dedicated DSL, for analyzing energy consumption in residential urban environments. The model takes into account structural, social and micro-climate characteristics. It is written using Pharo and here is a video session:

Code is on and a project page can be found here.

You can also check the following PDF with a presentation including some more details.

by Torsten ( at September 06, 2018 06:10 PM

ESUG 2018

Next week ESUG 2018 Smalltalk conference will start. You for sure will find infos and news on

by Torsten ( at September 06, 2018 01:17 PM


Why being a Pharo Association Member matters?

Hi Pharo supporters
First I would like thank you. And I would like to show you that your membership in the Pharo association is really
helping Pharo. We are creating a precise report but the main message is the same.
You concretely help Pharo.
First,  we would like to really thank you for your support because as you will see it is important. Your contributions are making an impact.


Until now, the association did not make visible how was spent the money from your membership. It’s time to fix this.
In the first place, the support we got from last year enable the creation of monthly activities helping with the development of Pharo. The association is now the support for the following ones:
Next, your association contributions are securing vital Pharo infrastructures. It pays:
On another note, we would like to remember the advantages of being an association member:

by Stéphane Ducasse at September 06, 2018 08:48 AM

September 03, 2018

Ecole des Mines

Goal Planning and Automatic Docking of a PhaROS-based Turtlebot

As part of our contribution to the DATA paroject, Sang is working on a demo with a turtlebot. It’s based on Pharo and ROS. Checkout the first video below. You can find out more details on Sang’s blog.

by noury at September 03, 2018 01:39 PM


[Ann] Fluid particule engine

Developed by T. Oda a really nice Fluid particule engine.

by Stéphane Ducasse at September 03, 2018 12:54 PM

Torsten Bergmann

HoneyGinger in Pharo

I already reported on HoneyGinger in the past.

This is a new demo movie for HoneyGinger, a fluid dynamics engine written in pure Pharo.

by Torsten ( at September 03, 2018 12:41 PM

September 02, 2018



Hi Pharoers

We are proud to announce the publication of HTML version as well as PDF of the booklets: Voyage, Scraping, Glorp, Reflective Core, and Phsyche on

Pillar has now a streamlined way to support the publications of full books on the web with a nice format. More books are in preparation and will be migrated to the new Pillar version.

Pillar 70 will also support personal web site and hosting on

Thanks Asbath/Samakhov and Guillep for their constant push over the last 6 months.


by Stéphane Ducasse at September 02, 2018 08:39 PM

August 30, 2018

Craig Latta

livecoding VueJS with Caffeine

Vue component

Livecoding Vue.js with Caffeine: using a self-contained third-party Vue component compiled live from the web, no offline build step.

by Craig Latta at August 30, 2018 09:26 PM

Torsten Bergmann

NeoVIM client in Pharo

A NeoVIM client written in Pharo.

by Torsten ( at August 30, 2018 07:15 AM

Roassal and Hololens

Roassal looks even cooler when presented using a Hololens...

by Torsten ( at August 30, 2018 07:08 AM

HDFS for Pharo

A library to access the Hadoop Distributed File System (HDFS) from Pharo. Nice!

by Torsten ( at August 30, 2018 07:01 AM

Pharo code completion work

Article from Myroslava on her internship at INRIA with infos on her work on code completion in Pharo

by Torsten ( at August 30, 2018 07:00 AM

git-migration and Tonel for Pharo

If you want to migrate projects from SmalltalkHub (or any MCZ-based repo) to GitHub to profit from new git integration in Pharo then use Peters "git-migration" tool.

The tool is now using the Tonel format to store the code. Tonel is a file-per-class format, that means a class and all methods are stored in a single file. This is faster than having a file for each method but also prevents some trouble with git on Windows due to number of files and subdirectory depth.

by Torsten ( at August 30, 2018 06:55 AM