Planet Squeak

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

October 21, 2020

Yuriy Tymchuk

Using Pharo to Hack Everyday Tasks

moved to:

by Yuriy Tymchuk ( at October 21, 2020 03:06 PM

October 12, 2020


[ann] Telegram Bots with Pharo

Hi everyone, I share a tool for creating telegram Bots with Pharo. This library provides an interface for the Telegram Bot API.

To create our telegram bot in Pharo, the first thing we need to do is to create a new object that inherits from Bottlegram. This object must define at least these three methods:

The tool allows creating bots using two methods:

Github link:

If you use Telegram, do you test an echo bot in

Saludos, Pablo.

by Stéphane Ducasse at October 12, 2020 03:00 PM

October 11, 2020


[Ann] P3 version 1.3 – PostgreSQL client


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

Version 1.3 contains the following changes:

– Add object logging, see the P3LogEvent hierarchy
– Added P3ConnectionPool with tests
– Better management of prepared statements
– Add support for Chronology objects Time, Date and DateAndTime to be used directly as binding arguments for formatted/prepared statements, with tests
– Added basic support for array based parameter binding, see P3ValuesArray and #printValuesArrayOn:
– Better documentation and fallback for session/connection timezone and character encoder/decoder
– Reimplementation of P3Error adding unique codes and #isLocal as opposed to PostreSQL server generated messages; signalling now happens with instances created by class side accessors
– Bring back P3Client>>#queryEncoding as an alias for P3Client>>#serverEncoding as compatibility support for PharoDatabaseAccessor
– Add P3DatabaseDriver>>#connectSSL:
– Various cleanups and internal improvements

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.

I want to thank all contributors and users for their help and feedback: you make a real difference.

Since the end of last year, I have been using P3 in a real commercial production context, processing 10.000s of inserts a day and successfully supporting a web application for consulting the data. 



Sven Van Caekenberghe
Proudly supporting Pharo

by Stéphane Ducasse at October 11, 2020 02:59 PM

[ann] Eleven


I am using for one of my projects.
It is also a full framework, yet much simplier than Seaside and stateless
and I believe only the HTML building functionality can be used indpendently.

htmlObject := HtmlBody
class: ‘content’
(HtmlAnchor new
href: ‘‘;
with: ‘Pharo website’;
String streamContents: [:stream | htmlObject renderFor: nil on: stream]

The nil I am passing in the last line is there in place of an ELRequest
entity and is not needed for simple HTML tags without custom components. You
might check it out. Be aware that my former colleague created it for our
specific project and I have never used it in any other place, so I just HOPE
it would work like I imagine. It is also not documented or tested at all.

Best regards,

by Stéphane Ducasse at October 11, 2020 02:55 PM

October 09, 2020


This week (41/2020) on the Issue Tracker

Not communicating does not mean that we are not working 🙂 In fact we got busy. And we will start to have weekly log of activities.

Parser/Syntax Highlighting

Improvement to make the prior huge improvement on parsing of syntactically wrong
code much more usable:

Several fixes to the parser and syntax feedback #7411

First class Variables / Compiler cleanup

Lots of work has been done to unify all meta objects describing Variables into one  hierarchy (see Variable and subclasses). This in turn enables many
cleanups and simplification on the level of the name analysis of the Compiler and the API that the debugger uses to read Variables. Nearly finished, but some smaller steps remain:

Variable-scope-addTests #7435
(all Variable objects should know the scope where they are from)

Name Analysis: Lookup Slots In Class #7403

reduce-sends-doSemanticAnalysis #7402

7405-Debug-It-is-broken #7406
(this was a bad side effect of a refactoring needed to be able to move
 the call of #doSemanticAnalysis into the Compiler)

Fluid Class Definitions

This is ongoing work to have a better class definiton for what is now called
“slot enabeled class defintion” (the one where one can use First Class Variables and where the Layout class is shown explicitly)

7444-Prepare-fluid-class-integration-part-4 #7445

7437-prepare-fluid-class-integration-part-3 #7438

7412-preparing-the-integration-of-fluid-class-part-2 #7434

7431-preparing-fluid-class-Part-1 #7433


Debugger-should-show-Workspace-bindings #7408
A try to simplify how the workspace binding is found when debugging.
Leads to many problems, will be reverted.

7362-Package-Debugger-Filters-is-not-used-and-can-be-removed #7430

Added a closeAllDebugger method to trait TDebugger class, that users … #7328
(just a first step, not yet solved)

Exposing signalContext in Exception #7417

ReadOnly Literals

The compiler and the VM has support to make literals read-only. As the ability
to change literals without the code reflecting it has lead to ugly bugs in the
past, turning this on looks like a good idea:

SourceFileBufferedReadWriteStreamTest-readOnlyLiteral #7418

betterName-isSharedLiteral #7432

Enable-ReadOnly-Literals #7393

Bug Fixes

Background failures log in CI #7337

5956-Wrong-format-of-DoubleWordArray #7404
Ongoing work. All code is merged, but now we need to still see that we
can create classes like that with the bootrap

Fix_for_PluggableSliderMorph #7415

7414-division-of-number-by-array-fails-with-doesNotUnderstand-isZero #7425
Cleaning integer division #7436




7367-pragmas-not-needed-textEditorShiftedMenu-fileListContentMenu #7426

Fixed #7420. Added transformation rules to some non-transforming deprecations 
that were identified as automatable in the Deprewriter paper #7427

7364-RBSelectorNode-has-unclassified-methods #7424

7416-Fileout-a-protocol-raises-a-DNU #7441

7365-DictionaryValueHold-removeKey-calls-a-non-existing-method #7407

by Stéphane Ducasse at October 09, 2020 09:23 AM

October 05, 2020

Yuriy Tymchuk


moved to:

by Yuriy Tymchuk ( at October 05, 2020 05:39 PM

September 17, 2020

Yuriy Tymchuk

Getting Cache out of Nowhere for a Tiny Functionality in Pharo

moved to:

by Yuriy Tymchuk ( at September 17, 2020 06:04 AM

September 08, 2020


Pharo on a Netbook running TinyCore Linux

This is cool…  

After I booted TinyCore Linux[1] on my 10-year-old netbook[2], I decided to
see if it could run Pharo…

It does!

– TinyCore Linux “CorePlus”, 32-bit, version 11.1.
– Booted from a YUMI multiboot thumbdrive.
– Installed ‘curl’, ‘bash’, Firefox (to access ‘‘ site for download

– Acer D255 “AspireONE” netbook (Sept, 2010).
– 2 GB RAM (single DIMM).
– 250 GB SSD (not being used; TinyCore running 100% in RAM).

The Proof:


by Stéphane Ducasse at September 08, 2020 10:30 AM

September 07, 2020

Program in Objects

Rust and Smalltalk are perfectly complementary!

Rust has been selected as the Most Loved programming language at StackOverflow Developer Survey for five consecutive years! No other language commands so much respect.

StackOverflow Developer Survey’s Most Loved

And for good reasons. Rust is greatly lauded for:

These strengths are Smalltalk’s weaknesses, but Smalltalk’s strengths are also Rust’s weaknesses:

(While multi-core concurrency is possible in Smalltalk, as demonstrated by the RoarVM, unfortunately this is an experimental project that has lain fallow for a decade.)

Both programming languages are very useful in their respective domains, but neither can be used universally for all applications. The nice thing, however, is that these languages are perfectly complementary. Between them, there isn’t anything you can’t do.

If you need critical, real-time performance, Rust is your ticket, although programming is considerably more complicated. For just about everything else, Smalltalk is tickety-boo: web, desktop, mobile, data science, machine learning, Internet of Things, robotics, virtual reality, enterprise business computing, and so on. And it’s much easier, too.

It’s worth noting that in 2017, StackOverflow’s survey voted Smalltalk as the second Most Loved language after Rust. Why it disappeared from all subsequent surveys is anybody’s guess.

by smalltalkrenaissance at September 07, 2020 11:38 PM

August 31, 2020



Hi all,

I wanted to let you know that I ported the Crypto-Nacl library from SmalltalkHub to GitHub here:

The original author is Tony Garnock-Jones, with contributions from Hernán Morales Durand. See the README for more details.

Libsodium has evolved a lot over time, which means that there is plenty of additional functionality that can be unlocked through this library. I don’t have a need for it at the moment, but that might change in the near future. My interest is in using the cryptographic features to enhance security of business applications.

Oh, and thanks to the Buenos Aires Smalltalk team ( for inspiration on using GitHub Actions with smalltalkCI 🙂


Jonathan van Alteren

Founding Member | Object Guild B.V.
Sustainable Software for Purpose-Driven Organizations

by Stéphane Ducasse at August 31, 2020 12:28 PM

August 29, 2020


[ann] Indie Web

Hi all,

Due to the confinement in the pandemic, our forms of telepresence become
more important and many suddenly got even more immersed into an
Oligopoly cyberspace (Zoom, Google, Facebook, Twitter, Apple, Amazon,
Microsoft, etc) with opaque algorithms that under extractive logic
commodify our privacy and communications, try to condition our attention
and habits, as well as to shape our current and future behavior. But
this is not the only way to inhabit cyberspace.

From the Grafoscopio community[1], we would like to invite you to a
series of workshops that we are doing to make visible other ways of
populating and building the web, aligned with the movements of
IndieWeb[1a], from what we have called “pocket infrastructures”. You can
find more information about these topics in [2] and in particular about
the workshops in [3] (in Spanish).


The second workshop will be tomorrow, Saturday, Aug. 29 from 3:15 PM to
7:15PM CO (GMT – 5) — I will try to share the other workshops earlier,
but the site in [2] will be the consolidated memory of them, for those
who want to join us asynchronously.

We will see how IndieWeb sites help us to untangle and reweave that
other web and how this help us to reconnect in this stranger times.

Rethinking the infrastructure is also to rethink the ways in which it
enables and makes visible (or not) certain ways of being and acting.
Infrastructures are embodied discourses. So thank you in advance for
joining us in rethinking this in practice.

Of course, Pharo is behind scenes, as usual, powering this experience.
But with these IndieWeb workshops I think we have found a sweet spot
that puts coding in front with a practical introduction and motivation
beyond the kind of boring “Hello World”. Following a “local first”
approach, documentation will be in Spanish, but source code[5] and
interactive documentation will be in English to bridge our worlds :-),


See you on cyberspace,


by Stéphane Ducasse at August 29, 2020 05:47 AM

August 27, 2020


Static SmalltalkHub

Hi all,
Since May, SmalltalkHub is in read-only mode, allowing people to get back their data and move it to another forge if needed.We had several unexpected downtimes with the deprecated version of Smalltalkub (different software stack due to server migration).

To enhance the user experience, we put the static version of Smalltalkhub «  SmalltalkHub archive » on-line as the official service. It was already announced that it will be done in November but we decided to do it earlier because it improves the current state:

– faster and reliable downloads from (mcz files are no longer stored in a Mongo DB but served as static files)

– Smalltalkhub archive still allows to list projects, search for a project, see packages, contributors, commits

– the deprecated version of smalltalkhub is still on-line until November at

So you have the best of the 2 versions.

Regards,The Pharo consortium team.

by Stéphane Ducasse at August 27, 2020 02:42 PM

August 23, 2020


Pharo Master Class for Inria Academy @Inria Chile

Tuesday I will give a master class to 90 attendees. This master class is organized by Inria Chile and the Inria Academy.

I will do many interactive sessions but the slides to back-up and explain some sessions are available at


by Stéphane Ducasse at August 23, 2020 01:04 PM

August 22, 2020

Program in Objects

Anatomy of a Programming Competition


This is a case study of The James Robertson Memorial Programming Competition, which was created to promote the Smalltalk programming language. This is a case study by example, showing what was done and how it was done.

Promotion and Marketing

Advertising the competition at proved ineffective and costly. The click-through rate was infinitestimally small. Otherwise, we relied heavily on YouTube and social media.

YouTube Videos

Several promo videos were created:

using Powtoon
using Animaker
using Animaker

Blogs and Social Media

The main social media sites used included Twitter, Facebook, LinkedIn, Medium, Hacker News, Instagram, and Quora.

Competition Websites

Two websites were created, one for advertising the competition and the other for operating the competition (team registrations and team submissions). The advertising website has been archived. This website was based on The domain name,, was purchased from Google Domains.

The advertising website is also archived live at

The operational website has also been archived. In the home page, Internet Archive has a problem with the embedded YouTube link, but the unplayable video is the same as the first one shown above in the YouTube Videos section (Mission: Impossible-themed).

The operational website was hosted at OVH (VPS SSD 1 running Ubuntu 16.04 LTS). The web application was written in Pharo in conjunction with the Teapot framework. The domain name,, was configured at Google Domains, and the PositiveSSL certificate was purchased from Namecheap.

Contacting Schools

High schools across Canada were contacted by email, as well as snail mail. Attempts to contact various school boards were unproductive.

T-shirts and Swag

Our budget only allowed for T-shirts (from Big Mouth Promotions). Here is the design (for the front of the shirt):

using GIMP and Inkscape
examples from a team

The T-shirts were sent to all the participating teams; they were a big hit with everyone. About 100 shirts were made available for a public giveaway at the awards ceremony at Ryerson.

If budget allows, I think Smalltalk-styled coffee mugs would be a very nice giveaway.

Competition Software

The open source software for the JRMPC Organiser is now available, thanks to the great effort by Ben Coman who developed it.

JRMPC Organiser screenshot

Awards Ceremony


The trophies for First, Second, and Third Prizes all came from Innovative Imprints in Pickering, Ontario.


The awards ceremony was scheduled for Saturday, April 18, 2020 on the campus of Ryerson University. However, due to COVID-19, a virtual ceremony was conducted instead. Here was the result:

Lessons Learned

Since this is the first edition of JRMPC, there were bound to be some teething pains. We learned several important lessons:

Despite it all, we are pleased at the outcome.


The competition was a smashing success. Thirty teams registered from across Canada. Videos were created for each of the five rounds. I’ll just show the first and last of them here to avoid repetitiveness:

Hopefully, the information here can help you with your own programming competition.

by smalltalkrenaissance at August 22, 2020 08:53 AM

August 11, 2020


An object view on global usage: the case of Transcript

Hi guys
I wrote this I thought that I had to :).

See Chapter 8 for a longer version is available at

Feedback and PRs are welcome.

S (full of positive energy)

by Stéphane Ducasse at August 11, 2020 09:06 PM

August 10, 2020

Program in Objects

Smalltalk’s Successor

Alan Kay, one of the co-creators of Smalltalk, has said that he’d like to see Smalltalk evolve beyond what it is today. He believes that Smalltalk is stagnating and failing to advance the software industry. While I agree with him in principle, I also take a more pragmatic position. I believe that we cannot wait for this mythical new programming language and that we must use whatever we have available today because the software industry is in crisis. The demand for more and better software created in a timely manner is continually increasing and it’s causing considerable stress for programmers and users alike.

At the moment, there is only one programming language that has any hope of meeting this demand. I do not posit this lightly nor frivolously. Here are the key reasons why Smalltalk is perfectly suited to this mission…

Smalltalk has a great and storied history.

A programming language ideally should command respect, and there’s no better way to do this than by demonstrating a wonderful record of achievements. History matters.

Smalltalk pioneered the language virtual machine and JIT compilation. It created the world’s first modern IDE. It introduced the MVC architectural pattern. It pioneered TDD (test-driven development) and XP (extreme programming). It made live coding easily accessible. It pioneered the development of object-oriented databases. It created the world’s first refactoring browser. It was instrumental in developing GUI and WYSIWYG.

begin at 19:28

It influenced the design of Objective-C, Ruby, Java, PHP, Perl, Python, Groovy, Scala, Dart, and other languages.

It popularized object-oriented programming starting with the now-iconic cover of BYTE magazine.

August 1981

Smalltalk has a proven track record.

Smalltalk has been used in the enterprise for more than three decades. In the 1990s, it achieved the second highest object-oriented market share in the world after C++. IBM even chose Smalltalk as the centrepiece of their VisualAge enterprise initiative.

Today, there are three major Smalltalk vendors with thousands of enterprise users around the globe: Cincom, Instantiations, and GemTalk Systems. Many of these enterprise users are big names in the financial industry, manufacturing sector, shipping, utilities, etc., for example, JP Morgan, Desjardins, UBS, Florida Power & Light, Texas Instruments, Telecom Argentina, Siemens, and COSCO.

Smalltalk is incredibly simple and easy to use.

It’s even simpler and easier than Python! The syntax is as simple as you can imagine. It fits on a post card!

Smalltalk is extremely flexible and versatile.

Smalltalk has developed an extensive ecosystem. In the web space, you have the Seaside and Teapot web frameworks, and Amber and PharoJS for front-end development. In data science and machine learning, you have the PolyMath library, Roassal data visualization, and language bindings for TensorFlow and Keras. For Internet of Things, you have the PharoThings platform. For robotics, you have the PhaROS platform. Smalltalk is great for virtual reality!

Smalltalk is the most productive programming language in the world.

A study by Namcook Analytics showed that Smalltalk was, on average, twice as productive as JavaScript, C++, Go, Java, PHP, Python, and C#. Experienced Smalltalkers regularly develop software up to 5X faster than in conventional languages.

Smalltalk’s remarkable live coding capability plays a critical role here. Only two other significant languages support live coding: Forth and Lisp. But Smalltalk makes its very easily accessible.

Smalltalk is infinitely scalable.

Thanks to its pure object-oriented model which views the Smalltalk environment as a sort of “software internet,” applications can grow in a manner resembling the Internet. It has also been likened to biological systems of cells.

begin at 2:16

Any new programming language, no matter how superior to Smalltalk, would lack history, a track record, an ecosystem, a user base, and mindshare. Marketing the language would face an uphill battle and growing the language’s mindshare would take a considerable amount of time.

Meanwhile, we wait and we wait and we continue fighting a backlog of software that demands to be written.

Smalltalk Alternatives

There are newer languages that compete with Smalltalk, such as Dart, Go, Julia, Kotlin, Rust, Scala, Swift, TypeScript. Some are very large and complex (Kotlin, Rust, Scala, Swift, TypeScript). Some are used in narrow domains (Julia, Rust, Swift, TypeScript). None are as simple and easy as Smalltalk. None are as productive and scalable. None support live coding. None are as elegant.

So, really, the best choice we have today is Smalltalk. It comes in various flavours to meet various needs:

Is there really a need for a successor?

by smalltalkrenaissance at August 10, 2020 12:50 PM

August 05, 2020


Grafoscopio ported to Pharo 8.x and Git


Grafoscopio [1] has been ported to Pharo8.x and Git. Source code[2] and
documentation[3][3a] repositories reflect the change (at some point I
hope both could be integrated in Fossil, but meanwhile community hosted
Gitea and Fossil are working pretty fine).


For the Grafoscopio 2.x series I hope to update several other things
including migration to Spec2 and improved usability.



ps: We are experiencing some issues with our Gitea instance today. That
should be solved soon or I hope to provide a non-oligopolistic
alternative in the future.

by Stéphane Ducasse at August 05, 2020 09:02 AM

August 02, 2020


is the static file server version of Smalltalkhub is suffering instability. So may be we will turn sooner than planned.

by Stéphane Ducasse at August 02, 2020 04:57 PM

Migration SThub to … log

Please contribute


by Stéphane Ducasse at August 02, 2020 04:53 PM

[Ann] Updated Alpine Linux Pharo VM Docker image

Hi all,

I’ve updated the Docker image for pharo.cog.spur.minheadless VM
built on Alpine Linux. This version is built on Alpine Linux 3.12. 

Some links:


This version removes the following plugins. I’m still thinking about some
of the others, especially the GUI-related ones. The idea is of course to
have the smallest possible set of plugins. Comments welcome.

– Security
– Drop
– Croquet
– DSAPrims
– JoystickTablet
– Serial
– StarSqueak
– InternetConfig

The output Docker image contains the Pharo VM only and is not runnable by
itself. It is intended to be used as a base to build your own Docker image
containing your application-specific Pharo image. 

I’ll be building a similar Docker image for Pharo’s fork of the VM.


by Stéphane Ducasse at August 02, 2020 04:18 PM

July 12, 2020

Pierce Ng

Updated Alpine Linux Pharo VM Docker Image

I've updated the Docker image for pharo.cog.spur.minheadless VM built on Alpine Linux. This version is built on Alpine Linux 3.12.

This version removes the following plugins. I'm still thinking about some of the others, especially the GUI-related ones. The idea is of course to have the smallest possible set of plugins. Comments welcome.

The output Docker image contains the Pharo VM only and is not runnable by itself. It is intended to be used as a base to build your own Docker image containing your application-specific Pharo image.

I'll be building a similar Docker image for Pharo's fork of the VM.

by Pierce Ng at July 12, 2020 05:49 PM

July 11, 2020

Program in Objects

GoFundMe for JRMPC 202x

Please give generously: Smalltalk Programming Competitions.

Here’s the trailer for JRMPC 2021:

by smalltalkrenaissance at July 11, 2020 02:35 PM

July 10, 2020

Torsten Bergmann

Crosstalk: Smalltalk 80 for Raspberry Pi

Article is here:

and code is available on GitHub:

by Torsten ( at July 10, 2020 12:35 PM

July 08, 2020

Torsten Bergmann

Roassal 3 and Pharo integration

Roassal 3 - the visualization engine for Pharo is out and it will be integrated into upcoming Pharo 9.


by Torsten ( at July 08, 2020 12:54 PM

Smalltalk 80 VM

Dan Banay released (on the day of the 80th anniversary of Alan Kay) a fully functional Smalltalk-80 VM capable of running the original ST-80 images as distributed by Xerox Parc in 1979 and 1980. Really nice, especially when you check the code which is available on


by Torsten ( at July 08, 2020 12:53 PM

PDF and SVG from Athens in Pharo

Latest Pharo 9alpha image includes an AthensCairoPDFSurface and an AthensCairoSVGSurface class which you can use to easily create a PDF or SVG from an Athens Graphic Canvas in Pharo

Just click on the picture:


by Torsten ( at July 08, 2020 12:49 PM

Compendium for Pharo

Compendium for Pharo is now able to show a list per repository and a list of repos per author for the GitHub projects.

Also it shows the old Catalog entries - so finding project and code should be fairly easy now ...

Code is on


by Torsten ( at July 08, 2020 12:46 PM

Pandemics were explained and visualized by Alan back in 1998 using Squeak Smalltalk and particle simulation in Morphic in this video:


 And the BouncingAtomsMorph still works in recent Squeak Smalltalk just in case you want to show it to your kids ...


by Torsten ( at July 08, 2020 12:42 PM

Pharo and

I tried  with a simple script to download and run Pharo headless and also Pharo UI Works nicely - within the top right part of the browser window one can even see and use the Pharo window.

Clickable but X-Windows emulation does not seem to show the full window (try clicking on "full screen mode" in the welcome window to adjust this).

Try this


Just consider to create an own account on and use the following code in a

echo *********************************************
echo * Download and run Pharo
echo *********************************************

# prepare
if [ -d build ]; then rm -Rf build; fi
mkdir build
cd build

# download
wget -O- | bash

# run
./pharo-ui ./Pharo.image

by Torsten ( at July 08, 2020 12:36 PM

Chanel for Pharo

Chanel: a code cleaner for Pharo Smalltalk

Source code is here:

by Torsten ( at July 08, 2020 12:19 PM