Planet Squeak

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

March 22, 2019


New post on scripting github from Pharo :)

by Stéphane Ducasse at March 22, 2019 03:28 PM

March 17, 2019


[ANN] Lan.d.s Alpha: All Along the Language Tower

Dear friends !

I am quite excited to announce the availability of an alpha version
of my latest work around Parsing and Programming Languages at:

Accompanied by ~ 30 min of transcribed eye-candy:

Backed by a crowdfunding campaign ! To get the book and stable release
successfully out of the door:

Click, download, watch, enjoy ! If you like what you see, support the project ! Tiers
start from 5 and 10 euros per chapter for individuals. Companies supporting
the project can get 6 to 12 days of consultancy, on-site workshops and other perks.


What is all about ??

Lan.d.s is a new solution for language design. From general purpose
like Lise (short for (list (embedding)) to Domain-Specific
Languages using the MOODs framework
, and everything else in between.
Lan.d.s is build around the formalism of Multi-Ordered Grammars,
which are a possible alternative to CFGs and PEGs in wider use today.

Multi-ordered grammars (or simply MOGs) aim for a better exploration of ambiguity,
recursion, ordering and associativity during language design. They can be parsed using the
Gray Algorithm.
After parsing in order to ease the production of executable code
Lan.d.s introduces the Abstract Syntax Language (ASL), which is an OO
solution for compile-time meta-programming. Finally in order to promote
language extension and re-use, Lan.d.s employs GrammarTraits, as units of
composition for both MOG rules and ASL actions.


Some random highlights for the impatient:

* Object subclass: #Prediction uses: Future syntax

* Languages are everywhere, they are all around you, even now in this very sentence.

* Study SICP with a Xerox flavor, while re-inventing some Bell-labs utilities.

* TOC-Board, the TOC for your next talk 😉

Enjoy !


by Stéphane Ducasse at March 17, 2019 01:20 PM

March 16, 2019


About Pharo and LibC

by Stéphane Ducasse at March 16, 2019 04:55 PM

March 13, 2019


[ANN] Minimal telepharo

I’m working on having a telepharo image based on the pharo minimal image. With the help of pavel and Allex I prepared a usable artefact on github that can be used. Both images are based on Pharo8.

The release file
contains a 32 bit minimal telepharo server image. It is 12,1 MB in size. And there is a 64 bit full pharo telepharo client image in the archive that can be used to connect to the minimal server one. I did not include the vms in the archive. These you need to install separately.
To run the server do
$ ./pharo server.image eval –no-quit “TlpRemoteUIManager registerOnPort: 40423“
The client.image can be started as usual. In a playground do

To be connected to the minimal server image. Further details on telepharo you can find at
Further relases of this will be made available at
I’m planning to make a pharothings release available as well when the telepharo release is considered stable.
Hope you like it,

by Stéphane Ducasse at March 13, 2019 07:50 PM

March 05, 2019


[Ann] v7.0.2

Hello Happy Pharoers

We just issued a release for pharo 7.0

Bugfix release

The crew

by Stéphane Ducasse at March 05, 2019 06:14 PM

March 02, 2019

Pierce Ng

Pharo SQLite I18N Enhancements

I've enhanced the Pharo SQLite library to be even more multilingual. It has always supported data elements that are Pharo WideString instances, these being converted to/from UTF8 transparently by the library. Now the library also handles multilingual table names, column names and default column values; in other words, multilingual SQL statements.

To install in Pharo 7, load GlorpSQLite from the Catalog Browser.


| db |
db := UDBCSQLite3Connection openOn: '/tmp/ml.db'.
[   "Chinese table name, column names, and default column value."   
    db basicExecute:  'create table 表一 (键一 integer primary key, 列二 text default ''中文'');'.
    "Insert a row, taking default column value for the 2nd column."
    db basicExecute: 'insert into 表一 (键一) values (NULL)'.
    "Insert another row, specifying a value in Chinese for the 2nd column."
    db execute: 'insert into 表一 values (NULL, ?)' 
        with: (Array with: '值二').
    (db execute: 'select * from 表一') rows inspect.
] ensure: [ db close ]

Inspector shows that it isn't quite I18N, although Transcript is:

Pharo SQLite I18N

From the SQLite shell:

% sqlite3 /tmp/ml.db 
SQLite version 3.27.2 2019-02-25 16:06:06
Enter ".help" for usage hints.
sqlite> .header on
sqlite> .schema 
CREATE TABLE 表一 (键一 integer primary key, 列二 text default '中文');
sqlite> select * from 表一;

Testing and feedback welcome, especially on which other parts of the library needing internationalization.

by Pierce Ng at March 02, 2019 09:04 PM

February 28, 2019

Torsten Bergmann

Running Pharo in Windows Subsystem for Linux (WSL)

Is described here:

by Torsten ( at February 28, 2019 01:48 PM


Running Pharo in Windows Subsystem for Linux

Cool blog post!

by Stéphane Ducasse at February 28, 2019 07:29 AM

February 26, 2019


Google Summer of Code 2019

Dear all,
Pharo Consortium has been selected this year as a Google Summer of Code 2019 mentor organization. This is the first time since 2017.
I would like to thank other GSOC co-admin Jigyasa Grover and Oleksandr Zaytsev for their commitment and hard work, Peter Uhnak for his help for the website, Alexandre Bergel, Yuriy Tymchuk and Stéphane Ducasse for their interactions.
We will prepare the call for students soon. We have already a website with a list of subject:
More subjects can be added, but we will focus on topics that will have the bigger impact on the Pharo community.
We will use the #gsoc-planning channel on Discord to discuss.
If you have students that might be interested, please let them know about this opportunity. There is #gsoc-students channel for them.

Serge Stinckwic

Int. Research Unit
 on Modelling/Simulation of Complex Systems (UMMISCO)
Sorbonne University
French National Research Institute for Sustainable Development (IRD)
niversity of Yaoundé I, Cameroun
“Programs must be written for people to read, and only incidentally for machines to execute.”

by Stéphane Ducasse at February 26, 2019 03:52 PM

February 23, 2019


SETT (Store to Tonel)

GemTalkSystems is pleased to announce SETT (Store Export to Tonel Tools)[1]. SETT is open source project with an MIT license.
SETT (Store Export to Tonel Tools) is a set of tools to export Smalltalk code from Store and
write into the Tonel file format managed using Git.
SETT is:
a Pharo 6.1 application, that
connects to a Postgres Database
containing source code history in VisualWorks Store format; and
writes to a Git repository
in Tonel format
maintaining all version history, source code and SCM metadata.
SETT was developed last year to support one of our commercial customers in their conversion From Store to Rowan[2]. Rowan artifacts are produced as part of the output of SETT, but the Rowan artifacts can be ignored. The important bit is that SETT converts from Store to Tonel and maintains version history in git.
Please see the project ReadMe[3] and Wiki[4] for additional details.

by Stéphane Ducasse at February 23, 2019 08:11 PM

[ANN] Buoy v5.0.0 released!

Buoy, the project aiming to complement Pharo adding useful extensions reached it’s 5.0.0 version.

The supported Pharo versions are 6.1 — 32 bits and 7.0 — 32 & 64 bits. The breaking changes are just in the package organization, so you may have to adapt your baseline dependencies but the rest of the code is backwards compatible with version 4.

You can see the detailed release notes here.



by Stéphane Ducasse at February 23, 2019 08:08 PM

[ANN] ba-st Web stack updated to P70 (RenoirSt, Willow and HighchartsSt)

Now that Pharo 7 is finally released, we took some time to update the whole web stack hosted at ba-st.

As a general update all the projects now follow the brand new community guidelines and support Pharo 6.1–32 bits and Pharo 7–32 & 64 bits. The build matrix now includes Pharo 8 as a preview.

This includes new versions of RenoirSt, HighchartsSt, Boardwalk, Willow and it’s related projects.
You can see the detailed announcement here.

by Stéphane Ducasse at February 23, 2019 08:06 PM

February 22, 2019

Pierce Ng

Pharo 7 Multilingual Input on Windows 7

On Windows 7, setting up multilingual (for me, Chinese and Japanese) input for Pharo is straightforward: Outside of Pharo, configure Windows multilingual input. Start Pharo and choose a font such as Arial Unicode MS. Then, just switch Windows's input system using hot-key or mouse click, and type, or write, as the case may be.

Pharo on Windows multilingual input

by Pierce Ng at February 22, 2019 11:59 AM

February 19, 2019

Pierce Ng

Nvidia X11 hardware acceleration on Ubuntu 18.04

After reinstalling Windows 7, I set my laptop up to dual boot Xubuntu 18.04. My laptop has an integrated Intel i915 graphics chip and also an Nvidia GeForce GT 330M GPU. This post describes how I set up X11 to use the GPU.

Start by finding out which drivers are in use and available:

% ubuntu-drivers devices
... currently running nouveau
... recommends nvidia-340

Install the recommended driver and reboot:

% sudo apt-get install nvidia-340
% sudo shutdown -r now

After the reboot, VT-7 showed a black screen. VTs 1-6 were still available and the machine was otherwise functional. recorded that the Nvidia driver had set (the graphics) mode to NULL.

To fix:

% sudo apt-get install nvidia-prime
% sudo prime-select nvidia
% sudo shutdown -r now

The X environment came back. To validate:

% inxi -G
Graphics:  Card-1: Intel Core Processor Integrated Graphics Controller
           Card-2: NVIDIA GT216M [GeForce GT 330M]
           Display Server: x11 (X.Org 1.19.6 ) drivers: modesetting,nvidia (unloaded: fbdev,vesa,nouveau)
           Resolution: 1920x1080@59.94hz
           OpenGL: renderer: GeForce GT 330M/PCIe/SSE2 version: 3.3.0 NVIDIA 340.107

There's a tool to switch between the Nvdia and Intel chips:

Nvidia Profile Switching


% glxgears -info
13122 frames in 5.0 seconds = 2624.275 FPS
13039 frames in 5.0 seconds = 2607.778 FPS
13916 frames in 5.0 seconds = 2783.134 FPS
11971 frames in 5.0 seconds = 2394.196 FPS

For comparison and contrast, an even older GPU-less laptop managed about ~60 FPS running glxgears.

As for Pharo, the OSWindow external operating system window examples, such as SDL2AthensDrawingExample, now only run in Nvidia mode and crash Pharo instantly in Intel mode:

The program 'pharo' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadValue (integer parameter out of range for operation)'.
  (Details: serial 100 error_code 2 request_code 154 minor_code 3)
  (Note to programmers: normally, X errors are reported asynchronously;
   that is, you will receive the error a while after causing it.
   To debug your program, run it with the --sync command line
   option to change this behavior. You can then get a meaningful
   backtrace from your debugger if you break on the gdk_x_error() function.)

by Pierce Ng at February 19, 2019 09:52 PM


Iceberg testimony!


This is a thank you note about Iceberg.

I have been moving all my external and internal Pharo code to git/tonel/7 and on multiple occasions I have been pleasantly surprised about the functionality and performance of Iceberg. Basically, it just works.

Finally, Pharo code lives in standard open source and commercial repositories (git, GitHub, Bitbucket, …), without losing anything.

I know that it took years to get here and that lots of code and community battles had to be fought. So thank you, to the whole team, you did a great job !


Sven Van Caekenberghe
Proudly supporting Pharo

by Stéphane Ducasse at February 19, 2019 08:56 AM

February 18, 2019


[Ann] Iceberg for Pharo60


Hi all,

I'm on vacations, so I've produced a new patch version of Iceberg :). This version restores compatibility with Pharo6, which was broken since latest changes done for Pharo7 64bit support.

I hope people still using Pharo6 find this useful. You should be able now to use again the update script to use latest iceberg on it. I've updated the doc to point to the latest supported version:

"load iceberg"Metacello new
  	baseline: 'Iceberg';
  	repository: 'github://pharo-vcs/iceberg:v1.5.?';

On this same direction, we have been discussing that v1.5.* will be the latest minor version supporting Pharo6. Still, we will keep integrating bugfixes and patches as they come.

New versions (>= 1.6) will host the new features and will be available and maintained for both the stable Pharo7 and the in-development Pharo8 versions.


by Stéphane Ducasse at February 18, 2019 01:32 PM

February 16, 2019


[Ann] new version of Pharo with Style

I updated Pharo with Style.


by Stéphane Ducasse at February 16, 2019 10:48 AM

February 15, 2019

Torsten Bergmann

Continuous delivery with GT Releaser

new article on GT Releaser tool.

by Torsten ( at February 15, 2019 01:45 PM

February 14, 2019

Torsten Bergmann

Future of Coding about Moldable Development

Interview of Tudor Girba in a podcast on "Future of Coding"

by Torsten ( at February 14, 2019 11:13 AM

February 13, 2019

Historical - Bert Freudenberg

Emulating Smalltalk-76

If you got as excited as me about Dan Ingalls' live Smalltalk-76 demo on an actual 1970's Xerox Alto, you may have wanted to try it yourself. This is actually possible, and here is how:

First, you need an emulator for the Alto computer. Ken Shiriff posted a nice piece on how to run ContrAlto on Windows. It is written in C# and I got it to work on my Mac using Mono. So here's a step-by-step:

  1. Install Mono from
  2. Download from
  3. Download this Smalltalk-76 disk image:
  4. Unzip both and in the same folder.
  5. In a terminal, change to the ContrAlto directory and run mono Contralto.exe. This opens the Alto screen in a new window, and the emulator control in the terminal. 
  6. (if you get an error about a missing SDL library at this point, install that via homebrew using brew install sdl2)
  7. At the emulator's ">" prompt, type load disk 0 xmsmall.dsk and then start:
    $ mono Contralto.exe
    ContrAlto v1.2.2.0 (c) 2015-2017 Living Computers: Museum+Labs.
    Bug reports to

    You are at the ContrAlto console.  Type 'show commands' to see
    a list of possible commands, and hit Tab to see possible command completions.
    >load disk 0 xmsmall.dsk
    Drive 0 loaded.
    Alto started.

  8. In the Alto screen window, type resume xmsmall.boot to start up Smalltalk-76:
  9. And now you should see Smalltalk-76 running!
  10. There is no explicit "save" option. The OOZE object swapping system continuously writes objects to the disk. Use "quit" from the main menu to flush all objects back to disk.
Note that you will need a 3 button mouse to properly interact with the system. On my MacBook, I installed MagicPrefs to emulate a third mouse button. After installing, in MagicPref's "MacBook Trackpad" section, for "Three Finger Click" choose "Middle Click".

You will also need some keyboard shortcuts to access the special characters in Smalltalk-76:
ctrl A             ≤ (less or equal)
ctrl B             bold
ctrl C             user interrupt
ctrl F             ≡ (identical)
ctrl G             ◦ (index operator)
ctrl I             italic
ctrl N             ≠ (not equal)
ctrl O             ↪ (quote)
ctrl Q             ⇑ (return)
ctrl R             ≥ (greater or equal)
ctrl S             's (eval operator)
ctrl T             ┗  (prompt)
ctrl U             ¬ (unary minus)
ctrl X             clear emphasis
ctrl /             ⇒ (if then)
ctrl =             ≡ (identical)
ctrl shift =       ≠ (not equal)
ctrl \             ≠ (not equal)
ctrl ]             ⌾ (create point)
ctrl [             ◦ (index operator)
ctrl :             ⦂ (open colon)
ctrl '             ↪ (literal quote)
ctrl <             ≤ (less or equal)
ctrl >             ≥ (greater or equal)
shift -            ¬ (unary minus)
cursor down        doit (in dialog view)
To learn Smalltalk-76, the User Manual is a good starting point:!1.pdf

Have fun!

by Bert ( at February 13, 2019 08:30 PM

Torsten Bergmann

v2.1.0 Material Design Lite for Seaside

New version v2.1.0 is available now. Check it here.

by Torsten ( at February 13, 2019 02:42 PM

Glamorous Toolkit v0.5.1

is out now - and it is based on latest Pharo 7.

by Torsten ( at February 13, 2019 02:40 PM

Reactive data bindings framework for Pharo

A small Vue.js-inspired reactive data bindings framework for Pharo.

by Torsten ( at February 13, 2019 02:38 PM

Registration for Pharo Days 2019 open

Just check this page if you want to participate.

by Torsten ( at February 13, 2019 02:28 PM

New (bugfix) release of PetitParser v2.1.2

is available here.

by Torsten ( at February 13, 2019 02:27 PM


Marvin - a Prototype system based on Self for Pharo from Pavel.

by Torsten ( at February 13, 2019 02:24 PM

P3 V1.2 - PostgreSQL client for Pharo

A new release 1.2 of P3, the modern, lean and mean PostgreSQL client for Pharo.

by Torsten ( at February 13, 2019 02:19 PM

ObservableSlots for Pharo

A language extension for Pharo to have slots that announce changes. This is useful expecially in UI projects.

by Torsten ( at February 13, 2019 02:15 PM

The computational notebook of the future

This screencast shows an idea of how computational notebooks should work in the future. For pointers to the technologies being used, see the accompanying blog post

by Torsten ( at February 13, 2019 02:13 PM


[Ann] new release of P3 (postgreSQL)


There is a new release of P3, the modern, lean and mean PostgreSQL client for Pharo.

Version 1.2 contains the following changes:

- P3PreparedStatement is now joined by a polymorphic P3FormattedStatement working client side on text strings
- P3PreparedStatement & P3FormattedStatement now share the same double dispatch mechanism to process argument binding
- Added convenience methods #listDatabases #listSchemas & #listTablesInSchema: to P3Client
- Added convenience methods #firstColumnData & #firstFieldOfFirstRecord to P3Result
- Added dynamic ENUM support via #loadEnums in P3Client
- Add support for the 7 geometric types POINT, CIRCLE, LINE, LSEG, POLYGON & PATH with corresponding objects P3Point, P3Circle, P3Line, P3LineSegment, P3Polygon & P3Path
- Add support for the INTERVAL type with P3Interval object
- Added P3Client>>#serverVersion accessor
- Add support for BIT & VARBIT types with P3FixedBitString & P3BitString objects
- Add TIMETZ support
- Organised P3 package with tags
- More & better documentation & unit tests

The quality of open source software is determined by it being alive, supported and maintained.

The first way to help is to simply use P3 in your projects and report back about your successes and the issues that you encounter. You can ask questions on the Pharo mailing lists.



by Stéphane Ducasse at February 13, 2019 12:15 PM