Planet Squeak

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

July 14, 2019

Pierce Ng


Gitea is an open source Github-lookalike written in Go. Building Gitea from source is straightforward; the output is a single executable gitea. Pre-built binaries and Docker images are also available.

Once configured appropriately, gitea runs a HTTP server, which provides the Github-ish user interface, and a built-in SSH server, which is used for synchronizing Git repos.

In Pharo, Iceberg works with a locally running Gitea just like it works with Github.

I've been using Monticello for version control of my little tools. Monticello works when requirements are simple. But some of the tools have grown enough to need a VCS with good branching and merging capabilities.

by Pierce Ng at July 14, 2019 09:05 PM

July 11, 2019


[ann] MessageFlowBrowser


I updated my MessageFlowBrowser today to work on Pharo 7 and 8, see attached screenshot
or youtube video on

It now also works in Calypso and you just need to right click on a method in the method
pane or code pane and select “Message Flow” close to Senders, Implementors and other.

You can load the tool using

Metacello new
repository: ‘github://astares/Pharo-MessageFlowBrowser/src‘;
baseline: ‘MessageFlowBrowser’;

I also now moved repo from!/~TorstenBergmann/MessageFlowBrowser

to the new location

on GitHub for future development.

Have fun,

by Stéphane Ducasse at July 11, 2019 04:48 PM

July 10, 2019


[ANN] Pharo Launcher 1.9.1 released

Hi all,

We are pleased to announce Pharo Launcher 1.9.1 release!
The goal of this release is to have a better Windows support. Indeed Pharo Launcher now uses a new library OSWinSubprocess ( created for Pharo Launcher needs. This library allows to create Windows processes through ffi calls to the Windows API. It uses the unicode api, allowing paths with non-ascii characters.
In the same time, we switched from OSProcess to  OSSubprocess (Linux and OS X) that is now the preferred library to use to fork processes on Linux-based systems.
This release is not yet the default download of Pharo Launcher on Pharo web site because we want more feedback before promoting it.
Please use this link to install it: and let us know if this version works fine/better for you.
ps: For now, the binary is not signed but it will come soon.
ps2: Thanks to Keldon Alleyne for his PR on Pharo Launcher offering the first FFI binding to Windows process API
The Pharo team.

by Stéphane Ducasse at July 10, 2019 09:55 AM

[ANN] OSWinSubprocess a library to spawn Windows System processes

Pharo Launcher had stability problems to spawn new processes (launch Pharo images) on Windows as well as limitations (paths could only contain ASCII characters).
To solve this problem, we developed a new library: OSWinSubprocess ( and decided to make it a standalone library so that people can use it if they need to.
We tried to use the same API as OSSubprocess when possible. This library uses the Windows API to create process from both 32-bit and 64-bit Pharo images. It also supports Unicode characters.
Here are some examples on how to use it:
process := OSWSWinProcess new 
		command: 'C:\Windows\notepad.exe';
process terminate.
OSWSWinProcess new 
		command: 'C:\Windows\notepad.exe';
		arguments: #('notepad.exe' 'C:\foo.txt');
Important note: As of now, this library does not yet support standard streams (stdin, stdout and stderr). It could be done by setting the appropriate information in the STARTUPINFO structutre.
You can check the README for more information.

by Stéphane Ducasse at July 10, 2019 04:45 AM

July 09, 2019


Call for improving Pharo together


it was in 2017 when I asked people here on this list to help cleaning and raise the quality level of our Pharo system:

I not only talked. I took action – meanwhile with around 658 (!) sometimes very trivial changes to
get Pharo 7 and 8 into a cleaner state (

One step at a time … evening per evening, week per week. Sometimes there was a minute – sometimes not.

And yes: Pharo already became cleaner with small contributions from my and many others contributors side. Pharo now
already feels a little bit better – has class and test comments, more aligned packages, fixed categories,
less typos, cleaner and more understandable code and more rules to hopefully keep that quality level.

What if YOU, YES YOU would also step in and also apply simple or complex fixes and cleanups on internal
and also external packages? You could also help with documentation or feedback on what is working and what not.

If we all clean the house TOGETHER the next guest would feel already more comfortable and also try not to
wear his dirty shoes…

I also intentionally opened one single trivial issue without fixing it myself. Now today this issue got somehow
“famous” on Twitter:

and YOU can get famous for FIXING or REVIEWING this single issue too.

Or you can help with many others that are left either here:
or here:

Jump in – the water is just fine!

Torsten (aka “astares” on Discord)

by Stéphane Ducasse at July 09, 2019 04:43 AM

July 04, 2019

Torsten Bergmann

PolySLAM and Pharo

PolySLAM (Polygon based Simultaneous Localization And Mapping) is a solution for multi-robot exploration of indoor environments.

Pharo Smalltalk was used to implement and simulate it.

Read more here or watch the video:

by Torsten ( at July 04, 2019 04:02 PM

Smalltalk and the largest MIDI instrument

Mariano has a nice story on using Smalltalk to control the largest MIDI instrument of the world. Nice and well done.

Smalltalk always rocks!

by Torsten ( at July 04, 2019 03:49 PM

Pharo Compiler: add the concept of a Production Environment

In Pharo so far the Compiler compiled into instances of class CompiledMethod. Now, there might be the case that the result of the compiler (the compiledMethod) should not be an instance of the class CompiledMethod from the environment in which we compile, but from some other environment.

The Pharo compiler is now able to support that as Marcus explains here.

This is more flexible and should allow for cross compiling locally or into remote environments. One could use it to build up a new environment within the existing one, ...


by Torsten ( at July 04, 2019 07:25 AM

July 03, 2019

Pierce Ng

Telemon: Pharo metrics for Telegraf

In my previous post on the TIG monitoring stack, I mentioned that Telegraf supports a large number of input plugins. One of these is the generic HTTP plugin that collects from one or more HTTP(S) endpoints producing metrics in supported input data formats.

I've implemented Telemon, a Pharo package that allows producing Pharo VM and application-specific metrics compatible with the Telegraf HTTP input plugin.

Telemon works as a Zinc ZnServer delegate. It produces metrics in the InfluxDB line protocol format. By default, Telemon produces the metrics generated by VirtualMachine>>statisticsReport and its output looks like this:

TmMetricsDelegate new renderInfluxDB
"pharo uptime=1452854,oldSpace=155813664,youngSpace=2395408,memory=164765696,memoryFree=160273136,fullGCs=3,fullGCTime=477,incrGCs=9585,incrGCTime=9656,tenureCount=610024"

As per the InfluxDB line protocol, 'pharo' is the name of the measurement, and the items in key-value format form the field set.

To add a tag to the measurement:

| tm |
tm := TmMetricsDelegate new. 
tm tags at: 'host' put: 'telemon-1'.
tm renderInfluxDB
"pharo,host=telemon-1 uptime=2023314,oldSpace=139036448,youngSpace=5649200,memory=147988480,memoryFree=140242128,fullGCs=4,fullGCTime=660,incrGCs=14291,incrGCTime=12899,tenureCount=696589"

Above, the tag set consists of "host=telemon-1".

Here's another invocation that adds two user-specified metrics but no tag.

| tm |
tm := TmMetricsDelegate new. 
tm fields 
  at: 'meaning' put: [ 42 ];
  at: 'newMeaning' put: [ 84 ].
tm  renderInfluxDB
"pharo uptime=2548014,oldSpace=139036448,youngSpace=3651736,memory=147988480,memoryFree=142239592,fullGCs=4,fullGCTime=660,incrGCs=18503,incrGCTime=16632,tenureCount=747211,meaning=42,newMeaning=84"

Note that the field values are Smalltalk blocks that will be evaluated dynamically.

When I was reading the specifications for Telegraf's plugins, the InfluxDB line protocol, etc., it all felt rather dry. I imagine this short post is the same so far for the reader who isn't familiar with how the TIG components work together. So here are teaser screenshots of the Grafana panels for the Pharo VM and blog-specific metrics for this blog, which I will write about in the next post.

This Grafana panel shows a blog-specific metric named 'zEntity Count'.

Grafana Pharo app metrics

This next panel shows the blog-specific metric 'zEntity Memory' together with the VM metric 'Used Memory' which is the difference between the 'memory' and 'memoryFree' fields.

Grafana Pharo VM and app metrics

This blog runs in a Docker container. The final panel below shows the resident set size (RSS) of the container as reported by the Docker engine.

Grafana Pharo Docker metrics

by Pierce Ng at July 03, 2019 08:27 PM

Torsten Bergmann

Telemon: Pharo and TIG

Pierce has two interesting blogposts:

He implemented Telemon - a Pharo package that allows producing Pharo VM and application-specific metrics compatible with the Telegraf HTTP input plugin

by Torsten ( at July 03, 2019 04:08 PM

PlantUML from Moose Java model in Pharo 8

Beginning of June I reported on "PlantUML access from Pharo". Now there is another video available:

by Torsten ( at July 03, 2019 04:03 PM


Compiler enhancements


We added support for setting a “production environment” for the compiler:

When compiling, there might be the case that the result of the compiler (the compiledMethod) should not be an instance of the class CompiledMethod from the environment
in which we compile, but from some other environment.

(e.g. imagine you have multiple environments and want to cross cross compile)

This PR adds the concept of a productionEnvironment and enables it for CompiledMethod.
(other use cases might make sense, too, for example all the literals in the CompiledMethod, this is future work but can be done similarly by handing the context into the Scanner)

This is our test for CompiledMethod:

| environment method return |
environment := {#CompiledMethod -> MyCompiledMethodForTesting} asDictionary.
method := Smalltalk compiler
productionEnvironment: environment;
compile: ‘tt ^1+2’.

self assert: method class equals: MyCompiledMethodForTesting.
return := method valueWithReceiver: nil arguments: #().
self assert: return equals: 3.

As one can see, the produces compiled method of the Compiler is an instance of our class.

PR needs a Review:

by Stéphane Ducasse at July 03, 2019 12:28 PM

June 30, 2019

Torsten Bergmann


Allstocker ( is one of the success stories of Pharo. There is a presentation prepared for "Smalltalk Day Japan 2019" revealing some infos on how Pharo and other technologies are used.

by Torsten ( at June 30, 2019 09:40 AM

June 29, 2019

Pierce Ng

Smalltalk's Greatest Performance Issue

The subject is an interesting discussion that took place on the VA Smalltalk mailing list. Notables:

Also, two implementations of Smalltalk on .NET/DLR were mentioned. Going by their websites/repos they have not been updated for several years.

by Pierce Ng at June 29, 2019 06:01 PM

June 28, 2019


Talk at the Smalltalk Users Group Japan


Just a little note, I published a version of the presentation that I will give tomorrow during the monthly meeting of Japanese Smalltalkers.


by Stéphane Ducasse at June 28, 2019 02:03 PM

Domain and tools hand in hand


What I REALLY like in Pharo is that people can build domain AND tools to go faster understanding and developing their domain.

Here is an example developed by Osoco a company in Spain. They developed Bloom Filter Sets but also the tools to understand if their implementation is good. Amazing experience.

It is so well done!


by Stéphane Ducasse at June 28, 2019 12:03 PM

Torsten Bergmann

Seaside 3.3.4 released

Seaside 3.3.4 was released this morning, for details see

by Torsten ( at June 28, 2019 09:30 AM

June 24, 2019


New success story… Honey Ginger

by Stéphane Ducasse at June 24, 2019 08:46 PM

Torsten Bergmann

Progress with Pharo Code Completion [June]

Myroslava is reporting about her progress with Pharo Code Completion in a June Medium Article

by Torsten ( at June 24, 2019 09:49 AM

New PetitParser minor release (v2.2.0)

Read more here and check the project on

by Torsten ( at June 24, 2019 09:47 AM



by Torsten ( at June 24, 2019 09:40 AM

June 14, 2019

Torsten Bergmann

Observer Pattern in Pharo

Read more here. Code is on github in

by Torsten ( at June 14, 2019 08:49 AM

Event Music Manager in Pharo and Seaside

Benoît Verhaeghe experimented with Pharo, Seaside and MP3 playing on Linux using LibMPEG3. Result can be seen here:

Code is on GitHub:

by Torsten ( at June 14, 2019 06:12 AM

June 13, 2019

Pierce Ng

TIG: Telegraf InfluxDB Grafana Monitoring

I've set up the open source TIG stack to monitor the services running on these servers. TIG = Telegraf + InfluxDB + Grafana.

Each of the above runs in a Docker container. Architecturally, Telegraf stores the metrics data that it collects into InfluxDB. Grafana generates visualizations from the data that it reads from InfluxDB.

Here are the CPU and memory visualizations for this blog, running on Pharo 7 within a Docker container. The data is as collected by Telegraf via querying the host's Docker engine.

Grafana Pharo CPU

Grafana Pharo Memory

Following comes to mind:

Only one way to find out - modify software, collect data, review.

by Pierce Ng at June 13, 2019 09:45 PM

June 10, 2019


[ann ] Dr. Geo release 19.06

I am pleased to announce the Dr. Geo release 19.06, the GNU interactive
geometry software. It follows the release 19.03 in March 2019.

– New features
– Bugs fix
– Updated French user guide <>
– New book “Programmer des math avec Dr. Geo” <>. WIP – Feedback appreciated!

See details in the change log file in the software or read the bugs fix
list <>.

Download <>.


Dr. Geo

by Stéphane Ducasse at June 10, 2019 08:22 PM

June 07, 2019


[ann] IPFS for Pharo

Hi everyone,

Over the last weeks I have started to explore IPFS more seriously.
IPFS, the Inter-Planetary File System, is supposed to be the
next-generation Web: a decentralized content-addressed database.

Since there is nothing better then Pharo for exploring databases,
I have started to write an IPFS interface to Pharo:

It connects to a local IPFS server, so you have to have one
running. It’s surprisingly straightforward to install and configure,
unless you have to fight with firewalls that block IPFS traffic.

Feedback of any kind is welcome!


by Stéphane Ducasse at June 07, 2019 05:36 PM

Blog post: About singleton

View at

G. Larcheveque

by Stéphane Ducasse at June 07, 2019 01:53 PM

June 02, 2019

Torsten Bergmann

PlantUML access from Pharo

Code is on GitHub:

by Torsten ( at June 02, 2019 01:12 PM

May 24, 2019


[Consortium] Lifeware and Schmidt Pro

The Pharo consortium is very excited and super happy to bring your attention to the following announce
that was presented during Pharodays 2019:

The consortium got two contracts to support financially one year of engineer to improve Pharo.
The companies Lifeware and Schmidt Pro fund work on Pharo to improve Pharo. The total amount
of the two contracts is around 190 K Euros.
In addition the RMOD team got some resources from Inria.
The net result is that in 2019 the consortium will have 3.5 engineers working full time on Pharo.
– Esteban Lorenzano
– Pablo Tesone
– Cyril Ferlicot
– Guillermo Polito
It will boost Pharo. Note that the issues raised by Schmidt Pro and Lifeware
and their impacts on the roadmap of Pharo 8 and Pharo 9 are presented in
What is key to notice is that the consortium is working because many contributing companies are sharing ressources.
This is built a strong soil to grow Pharo and business around.
On the behalf of Inria, the consortium and the community we would like to thank 

Lifeware and SchmidtPro for their strong support.

by Stéphane Ducasse at May 24, 2019 11:54 AM

May 23, 2019


Tech Talks restarted


Last year we had some “Pharo Tech Talks”… we want to start that again.


June 20
July 18
Sept 19
Oct 17
Nov 21
Dec 12

The time would be 17h local time (Berlin/Paris).

-> If you want to “drive” one of those dates —> send me a mail.
-> Dates are flexible, if you want to do a tech talk you can propose another date, too
-> For the dates without special talk, I think I will do a “lets fix something small” session as the default.
(with screen sharing, while the people on Discord help and discuss how to do it)

What can it be?
-> you could present your project
-> you could give a “lecture”
-> you could do some tutorial
-> You could moderate a audio chat around a topic

If someone wants to do something, send me a mail. I will for now already add these dates to the events list at


by Stéphane Ducasse at May 23, 2019 09:51 AM