Planet Smalltalk

September 24, 2018

Pharo Weekly - [ANN] New Consortium Member: Spesenfuchs

Cincom Smalltalk - Happy 50th Anniversary, Cincom!

CINCOM’S ‘NEXT 50 YEARS’ HONORS PAST, LOOKS TO FUTURE AS COMPANY CELEBRATES HALF-CENTURY OF BUSINESS Software industry pioneer, Cincom, will mark the 50th anniversary of its founding with a 12-month […]

The post Happy 50th Anniversary, Cincom! appeared first on Cincom Smalltalk.

Hernán Morales Durand - Pharo Script of the Day: Parsing Gene Ontology terms

Today a script from the Bioinformatics world, accessing an EBI REST service called QuickGO, to retrieve Gene Ontology information. For the first script I use the NeoJSON library, and return a Pharo dictionary which we can inspect interactively through the Inspector:(NeoJSONReader on: (ZnClient new accept: ZnMimeType applicationJson; url: '

September 23, 2018

Smalltalk Jobs - Smalltalk Jobs – 9/23/18

  • St. Petersburg, FLSoftware/Controls Engineer II at Plasma-Therm LLC
    • Required Skills:
      • B.S. in Computer Science or Computer Engineering
      • Five to ten years software engineering experience.
      • C# or SmallTalk programming capabilities.
      • Graphical User Interface design/development (ease of use, ergonomics, etc.)
      • Model, View, Controller (MVC) software architectures
      • Understanding of development of multi-threaded applications
      • Controls and automation systems development
      • Distributed computing environment application development
      • Client/server programming concepts
      • Database implementation and usage concepts
      • Software engineering (all phases of software lifecycle)
      • Agile development model/environment
      • Networked Application development
      • Object Oriented application design and development
      • Reading/writing software requirements/specifications
      • Embedded control for automation and robotics
      • Knowledge of SCADA Systems
      • Software Development for Semiconductor Processing Equipment and SECS standards
      • Supporting end users (both capturing feature requests, as well as fixing deficiencies)
      • Supporting software for manufactured equipment
    • Wanted Skills:
      • Controls/Automation experience
  • Richland, WAEngineer I – BWR Neutronics Reload Design & Analysis – May 2019-NUC00830 through AREVA Front End Business Group
    • Required Skills:
      • Bachelor of Science in Nuclear Engineering or comparable field completed by start date. Candidates with an advanced degree and/or experience may be considered for a higher level position. (Please attach a copy of your academic transcript when applying to this position)
      • Previous Framatome intern or co-op experience
      • Basic experience and capabilities with MICROSOFT Office software products (WORD, EXCEL, etc.)
      • LINUX and/or UNIX
    • Wanted Skills:
      • Advanced degree (MS or PhD) is a plus but not a strict requirement.
      • Experience withBWR nuclear fuel neutronics analysis spectral/lattice codes (CASMO-3, CASMO-4, etc) and core simulator codes (SIMULATE, MICROBURN-B2, etc)
      • French, Japanese, Mandarin Chinese, and/or German language skills.
      • Experience with Lean Six Sigma product/process development in design and engineering
      • A wide range of other skills related to the position, including Smalltalk
Good luck with your job hunting,
James T. Savidge

View James T. Savidge's profile on LinkedIn

This blog’s RSS Feed

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.