Planet Smalltalk

September 23, 2018

Hernán Morales Durand - Pharo Script of the Day: Rename instance variables programmatically

Today I am starting a series of posts sharing some short (I hope) Pharo scripts which can be useful for others in the community. I have published some of them in the mailing list, so it is also an attempt to resurrect them from the oblivion. The first script goal is to programmatically rename an instance variable in MyClass from oldName to newName (tested in Pharo 6.1):(

September 22, 2018

Pharo Weekly - Willow tutorials

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:

Pharo Weekly - [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).

  • Chrysal creates at compile time a reader that is responsible for mapping end-user expressed configurations to their internal representations (for example a ‘a/b/c.html’ into a file reference object).
  • In addition at runtime a configuration object can customize the default behavior of the generated reader.
  • Finally the configuration developer can extend Chrysal to support new data.

Pharo Weekly - 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

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.

September 18, 2018

Pharo Weekly - [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.

September 17, 2018

Torsten Bergmann - Jun meets GTInspector

Combining Jun 3D with GTInspector:


Torsten Bergmann - Creating Bloc Widgets in Pharo

September 16, 2018

Marten Feldtmann - Practical API Development using Gemstone/S

Here are the slides of my talk at ESUG 2018 in Calgliari, describing projects, where we use multiple programming languages against Gemstone/S


September 13, 2018

Torsten Bergmann - ESUG 2018 - Slides on Pharo evolution

Torsten Bergmann - ESUG 2018 - Clap Slides

Noury Bouraqadi - 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!

September 11, 2018

Torsten Bergmann - ESUG 2018

Torsten Bergmann - Farmers Market App don in PharoJS

Torsten Bergmann - 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.

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:

  • VM goes into /pkg/vm.
  • Application artifacts including the image and changes files go into /pkg/image.
  • For this blog application, the blog's content is in /pkg/cms.

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. :-)

Pharo Weekly - Docker and Pharo: report of an exploration

September 07, 2018

Pharo Weekly - Domain specific modeling

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.

Torsten Bergmann - ESUG 2018

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

Cincom Smalltalk - One of Only Five High Tech CAD Environments Was Made with Cincom® VisualWorks®

Using Cincom VisualWorks allowed companies to stay on equal footing with their competitors that rely on more complex programming languages as the foundation for their CAD motion simulators.

The post One of Only Five High Tech CAD Environments Was Made with Cincom® VisualWorks® appeared first on Cincom Smalltalk.

Pharo Weekly - 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:
  • Sprint organisations: Every month sprints to correct Pharo bugs are organised. You can join remotely or organise one at your location
  • TechTalks: Every month a technical talk is been done to give visibility on Pharo process and Pharo projects and interact with the community to get feedback
Next, your association contributions are securing vital Pharo infrastructures. It pays:
  • The domains such as
  • The hosting This year we moved out of Inria infrastructure because we could not identify the cause of a huge network latency. It got resolved – it was a fiber which was in bad condition but not cut. This was fixed at the level of Renater national back-bone layer, but we decided to stay outside. We plan to migrate to a better service.
  • The wild apricot software which manages the association. It will enable us to do more with the association. (40$/month)
  • The newsletter via Mailchimp. This newsletter is a real success with more than 2300 recipients . You get see the archive at (30$/month)
  • The mailing-lists are managed with Mailname a professional service.
On another note, we would like to remember the advantages of being an association member:
  • Reduction for the PharoDays

September 03, 2018

Noury Bouraqadi - 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.

Pharo Weekly - [Ann] Fluid particule engine

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

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.

September 02, 2018

Smalltalk Jobs - Smalltalk Jobs – 9/2/18

  • Richland, WABWR Engineer IV – Advisory Engineer (Pipeline) – DES03144-PL (Multiple positions) at AREVA Front End Business Group
    • Required Skills:
      • Engineer IV: BS in Nuclear Engineering plus 5 – 7 years experience reactor physics or fuel management engineering experience. An advanced engineering degree may be substituted for related work experience (MS 1-2 yrs. or PhD 1-3 yrs.)
      • Principal Engineer: BS in Nuclear Engineering plus 7-10 years experience reactor physics or fuel management engineering experience. An advanced engineering degree may be substituted for related work experience (MS 1-2 yrs. or PhD 1-3 yrs.)
      • Advisory Engineer: BS in Nuclear Engineering plus 12+ years experience reactor physics or fuel management engineering experience. An advanced engineering degree may be substituted for related work experience (MS 1-2 yrs. or PhD 1-3 yrs.)
      • Familiarity with computer systems, e.g., personal computers, HP workstations, UNIX, LINUX or other operating systems.
      • Proficient with C/C++ and FORTRAN computer languages.
      • Must possess good verbal and written communication skills.
      • Must have a pro-active approach to problem identification and resolution.
      • Must have ability and attitude to learn a variety of new procedures, processes, and tools, while maintaining various stages of production.
      • Must be able to work well in a fast-paced team environment.
      • Proficiency with MS WORD and EXCEL.
      • Familiarity with fundamentals of light water reactor (LWR) neutronics/thermal hydraulics numerical methods.
    • Wanted Skills:
      • A wide range of other skills related to the position, including Smalltalk
  • Pune, IndiaSmalltalk Technology through AmpersandSquare Tech-Services
    • Required Skills:
      • 4-5 years of experience in Smalltalk technology
      • Visual Age/VAST Smalltalk
      • Gemstone Database scripting
      • Experience in creating UML diagrams
      • Knowledge with integration Interfaces, middleware platforms, IBM MQs
    • Wanted Skills:
      • Visual Age/VAST Smalltalk above 6.x version would be preferable
Good luck with your job hunting,
James T. Savidge

View James T. Savidge's profile on LinkedIn

This blog’s RSS Feed

Pharo Weekly - [Ann]

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.


James Foster - GemStone in a Docker Container?

Update: See this Docker image.

People sometimes ask about making GemStone available in a Docker container. The demand seems to be driven by a desire for a simplified install/deployment process. In preparation for my ESUG talk on a cloud-hosted GemStone IDE I decided to do some investigation.

Docker is an alternative to a virtual machine (which I’ve written about extensively on this blog) where the guest environment (“container”) shares not just the hardware with the host and other guests, but also the OS kernel. What is isolated is the application and supporting libraries. It does allow simplified deployment and ensures that each installation has exactly the same libraries and other components. The container can also be isolated so that (by default) it does not write outside its boundaries. These are attractive features.


A typical description of Docker suggests that each container uses the host OS, but it really uses the host OS kernel, and on macOS it runs an embedded Linux instance. Thus, a single Docker container can run on various OS hosts. Contrary to my initial misconception, you don’t need a separate Docker container for every OS and version.

A more challenging issue is what should go in the container. Obviously, it should include GemStone (and you would need a different container for each GemStone version), but what else? Should it include a web server? If so, which one? Perhaps not, but it does increase the complexity if you need to install, configure, and coordinate multiple components.

One hurdle is that once built, the software in a container is essentially fixed. You do not upgrade the contained software, you replace the container. Furthermore, I hope your container does not have any persistent data – it’s not supposed to, meaning thou shalt not run a database inside a container. Or, at least, not a production database; running a development database inside a container might be a good idea.

More specifically, you need to make sure that any persistent data is held outside the container, meaning that your container is not so isolated. Volumes are the preferred mechanism for persisting data generated by and used by Docker containers. And you would still need to manage backups and related system administration tasks.

For things like Topaz (a command-line interface to GemStone), you could run a command in the container. For RPC Gems (used by most client applications and IDE tools such as Jade), you should need to have only one port open into the container since the server-side Gem would be inside the container as well.

Overall, I don’t find it very difficult to install GemStone, but if someone were more likely to investigate GemStone if a Docker container were available, then it shouldn’t be too difficult to provide it.

September 01, 2018

David A. Smith - Virtus Walkthrough

I just posted the video I made of Virtus Walkthrough. I created this in 1990 with David Easter and Mark Uland. I am actually demonstrating Virtus 4 here. Scott Haynes was responsible for this version, and I think it is the best version of Walkthrough we ever did. It was also, unfortunately the last. The overall design and interaction is almost identical to the original 1990 version, though. This is using a software renderer that I wrote and was greatly enhanced by the team led by Greg Rivera. It uses portals extensively, and though you won't notice it, it does not actually have a z-buffer. The objects are sorted using a kind of BSP thing I did that is extremely fast. I am actually running this on Parallels on an older Macbook, and it feels faster to me than Sketchup 7.1, which I run native. But of course, considering that this had to run in real time on sub-20 mHz 68010 and 68020 machines, this had to be pretty damn fast to work at all.

This is the system I first prototyped the virtual collaboration space in that I showed to Alan Kay. This led to the development of ICE (see previous post), OpenSpace, the Croquet Project, and Teleplace.

Virtus Walkthrough won many awards, including the very first Breakthrough Product of the Year from MacUser Magazine, and the PC Computing Best Drawing Program, where we beat Adobe Photoshop.

Here is the demo: