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 23, 2020


[Ann] Zinc HTTP book

Hello Pharoers and others

I’m super happy as editor of the Pharo technology collection to announce the release of a new book on Zinc the excellent and elegant HTTP/S framework for Pharo.

I would like to thank Sven Van Caekenberghe for his excellent work. Thanks again Sven for your Pharo support and your great libraries.


S. Ducasse

by Stéphane Ducasse at March 23, 2020 04:46 PM

March 20, 2020


[Ann] New chapter for the Testing in Pharo book

Just a little announce to thank Juan-Pablo Sandoval and his crew for the new chapter on testing Web applications with Pharo.



by Stéphane Ducasse at March 20, 2020 06:45 PM

March 13, 2020

Program in Objects


Due to the COVID-19 crisis, the JRMPC awards ceremony has been postponed till a later date.

It was originally going to be held at Ryerson University, one of our chief sponsors, on April 18th.

In the worst case that the ceremony cannot be held by the start of summer, a virtual awards ceremony will be conducted. This ceremony will be recorded and a special YouTube video will be made for all of you to enjoy.

For more information about JRMPC, visit JRMPC 2020 Award Winners.

by smalltalkrenaissance at March 13, 2020 06:21 PM

March 09, 2020


[Ann] some communication material …

Hi guys

We designed some communication material around Pharo: sticker, tshirt, flyers,….


by Stéphane Ducasse at March 09, 2020 04:01 PM

March 08, 2020

Program in Objects

JRMPC 2020 Award Winners

I am most pleased to announce this year’s winners of The James Robertson Memorial Programming Competition. It was an exciting contest with several teams consistently finishing in a strong position over four rounds:

Thus, they were the favourites to win. But as Duncan MacLeod from Highlander might say, “There can be only one.”

In Round 5, the prize-winning round, the titanic struggle can be seen in this video:

So, here are the winners:

First Prize of $6,000 goes to team ‘WCI1’ of Waterloo Collegiate Institute in Waterloo, Ontario.

Second Prize of $4,000 goes to Team Dijkstra of Centennial Collegiate Vocational Institute in Guelph, Ontario.

Third Prize of $3,000 goes to team ‘Bickle Blatwoon’ of Robert Thirsk High School in Calgary, Alberta.

Additional recognition: the Honour Roll

The following teams are recognized for their fine efforts. They are awarded $500 each.

On completion of simulation

Congratulations all! These were outstanding performances.

I encourage everyone to learn Smalltalk programming. Smalltalk is a magnificent language, simple, concise, easy-to-learn, purely object-oriented, extremely versatile, most productive, and highly scalable and maintainable. Learn more at

Stay tuned for details about the awards ceremony.

by smalltalkrenaissance at March 08, 2020 04:17 AM

March 05, 2020


[Ann] Quuve Moves to the Public Domain under MIT License

Quuve provides a pro-grade integrated environment for portfolio management and research for securities investors. Professional grade in that it was meant to be licensed out to firms/groups offering research & portfolio management services. It is a virtualized, scaleable, web application developed with Pharo and deployed on GemStone/S. See the Quuve Overview video on YouTube for more information.

Quuve development stopped in the Fall of 2017 due to a lack of funding, however it still has some cutting-edge features for the industry. Because Quuve can function as an institutional level data server, tailored mobile apps could be built as standalone technology – and such an approach could even take advantage of Quuve’s analyst/site model subscription selections.

Software Positives:

Software Issues (“opportunities”!):

More info:

Currently copyrighted to Debris Publishing, Inc. – This is changing to MIT License.

Quuve is intended to assist investors manage portfolios and perform research.

Quuve was built and deployed using tools from various sources. The following firms, organizations, communities, and individuals have not endorsed Quuve nor Debris, but we offer due credit whether they are aware of us or not. Many thanks for/to…

Development and deployment environments and platforms

Pharo (c) Pharo is our development platform, language and environment.

GemStone (c) GemTalk Systems We use GemStone system to deploy and run each Quuve site for production. In addition, GemStone serves as our scalable object database.

Web frameworks

Seaside Web Framework The web UI of Quuve is built using Seaside: a great web framework ideal for developing dynamic and complex applications

Twitter Bootstrap for Seaside Bootstrap is very nicely integrated in Seaside web framework and we use it for styling and designing Quuve web components.

Highcharts for Seaside All our web charts use Highcharts JS bindings for Seaside

Magritte Magritte provides us a nice and small meta-description framework which allow us to build a fully featured CRUD system. Most of Quuve forms and reports are automatically generated from our CRUD framework build on top of Magritte.

Development tools and frameworks

Fuel Serializer We use Fuel to save and load our development and testing databases when working in Pharo platform

SIXX Serializer SIXX is used to move small databases from GemStone to Pharo or vice-versa or between different GemStone instances

Metacello To manage software dependencies, releases, environment building, deploying, etc. we use Metacello

Zinc and Zodiac HTTP Components Both are used as HTTP and HTTPS clients. In Addition, Zinc is used as the web server when using Seaside in Pharo

Blowfish We use Blowfish as part of our encryption and decryption tools.

XMLParser We also need to parse and write XML in many places

Javascript Libraries

JQuery and JQuery-UI Even if small, most of our JS development is using JQuery when possible. In addition, a couple of components like autocompletion, popups, sortable lists, etc are used from JQuery-UI

TinyMCE For nicely editing notes, documents, etc. we use the fully WYSIWYG editor TinyMCE

Datatables To improve or HTML tables and reports we use Datatables. This allow us to have fixed header, fixed columns and many many other features.

CodeMirror For scripting, editing accounting and computation rules, and many other places, we use CodeMirror to color highlight code, autocomplete, etc.


CentOS Linux All our guest/virtual operating systems are CentOS Linux, with latest stable release and security updates.

Nginx Our web server for production purposes is nginx.

Monit We use monit to monitor all processes, being that Quuve ones or the ones we need from the Operating System. Monit will, for example, automatically restart Quuve processes upon crashes.

Fail2ban As part of our security efforts we use fail2ban to protect us from DOS attacks and from malicious user

Firewalld We also use firewalld as out OS firewall

by Stéphane Ducasse at March 05, 2020 08:08 AM

March 03, 2020


[Ann] New VM promoted to Stable for Pharo 8

a new VM has been promoted for Pharo 8. This VM has been used in Pharo 9 during the last 4 weeks without incidents and as the latest one for Pharo 8 during the same period of time.

Basically this VM solves the following main issues:

– GC memory corruption during saving the image
– LibSSH error in Windows.

And a couple of small issues.

The VM is downloaded directly when using zero conf (
And in new installations of the Pharo Launcher.

The new VM should be from 2020-02-12.
Depending of the Pharo Launcher version, maybe the table is not auto-updated 😛
To check the correct version, close the VM manager window and open it again.

by Stéphane Ducasse at March 03, 2020 07:37 PM

Program in Objects

Battlesnake: the Competition

A few years ago, I learned of a programming competition in British Columbia called Battlesnake. It had been covered in the media.

Battlesnake and JRMPC share some common traits. First, they both involve creating a robotic “mind” (Battlesnake calls it an “AI snake”).

Second, they both work off a grid and, at least in later rounds, involve competing “minds” or “AI snakes” on the same grid, tournament-style.

Third, they’re both team-based events, though Battlesnake permits “teams” of one. JRMPC teams must comprise four students.

Fourth, their prize funds are very similar — $15,000 from Battlesnake and $13,000 from JRMPC (this doesn’t include $2,000 in T-shirts).

Fifth, they both involve some luck. Having the best mind or AI doesn’t necessarily guarantee a win.

Where they differ is that the main Battlesnake event is a one-day affair at a physical venue in Victoria, BC (though there are options with limited seats for remote participation). JRMPC is a national event, entirely online, and takes place over five weeks; the actual code execution occurs in our air-gapped computer.

Mission: Impossible

Also, JRMPC is only open to high school students across Canada. There is only one level, whereas Battlesnake has Beginner, Intermediate (no longer available), and Expert levels for students and non-students alike.

And, most importantly, JRMPC is all about using Smalltalk, the greatest programming language in the world. Battlesnake supports multiple languages. (Interestingly, an AI snake has been written in Smalltalk which has done well in previous Battlesnake competitions.)

I won’t say Battlesnake inspired me to start JRMPC, but it’s an interesting coincidink that the two are so similar and started roughly at the same time, 2015.

To be honest, I don’t find Battlesnake very interesting but this is a personal opinion. I think the JRMPC competition is far more imaginative. Battlesnake’s grid is dull and boring. JRMPC’s Islands of Qyzmr, Concentric Treasure, and City Quadrant are cool beyond belief.

Islands of Qyzmr
Concentric Treasure
City Quadrant

In some respects, JRMPC is more challenging than Battlesnake. The competition maps (or grids) are quite complex and robot strategies need to be very sophisticated.

The introduction of Smalltalk to young Canadian software developers is potentially groundbreaking for the IT industry in Canada. Smalltalk will help entrepreneurs and startups deliver IT solutions in a fraction of the time it would take using languages like Python, JavaScript, Java, C#, C++, and PHP.

Major enterprises like JPMorgan, Desjardins, UBS, Telecom Argentina, Siemens, BMW, Thales, Orient Overseas Container Lines, and Communications Security Establishment (Canada’s national cryptologic agency) have been using Smalltalk for years.

Lam Research is worth mentioning. This company is a vital link in the global supply chain. The electronic components in your smartphones, PCs, laptops, etc. started out as silicon wafers fabricated by Lam machines controlled by Smalltalk. You owe your digital existence to Smalltalk!

Canada has the opportunity to lead the world in software development.

by smalltalkrenaissance at March 03, 2020 06:48 PM

Torsten Bergmann

Analysis of Coronavirus using Pharo

Analysis of Coronavirus outbreak data using Pharo

Read more here.

by Torsten ( at March 03, 2020 08:44 AM

ReStore relational persistence for Pharo

ReStore - a relational persistence project for Pharo got some more documentation.

Check it out on

by Torsten ( at March 03, 2020 08:15 AM

PragmaCompatibility for Pharo

A tiny project call PragmaCompatibility for Pharo:

Multiple changes of API happened through Pharo 6 to Pharo 8 making it hard to get the keyword of a pragma on all those versions. This project help to deal with this case.

by Torsten ( at March 03, 2020 08:13 AM

Telescope Cytoscape v2.2.0 for Pharo

v2.2.0 of Telescope Cytoscape was released, a framework to build interactive web visualizations with Seaside and Pharo

Release notes are here:

The main highlights are the box selection and stabilization of mouseover events.

by Torsten ( at March 03, 2020 08:10 AM

Pharo and Lint

lint, or a linter, is a tool that analyzes source code to flag programming errors, bugs, stylistic errors, and suspicious constructs. In elder Smalltalks you often find a tool called Smalllint.

Pharo also includes lint rules by default - integrated into the toolset - and they are very helpful. You can even add you own rules.

by Torsten ( at March 03, 2020 08:08 AM

Pharo Reflectivity

This Reflectivity paper - describe the latest, up-to-date version of Reflectivity that is shipped with Pharo 8

Link to PDF:

by Torsten ( at March 03, 2020 08:04 AM

Krendrick epidemiology modeling for Pharo

More infos on Krendrick epidemiology modeling - which is based on Pharo, nice:

by Torsten ( at March 03, 2020 08:03 AM

Image Processing in Pharo

Nice project providing a small Pharo library for basic image processing:

Look here for a demo.

by Torsten ( at March 03, 2020 08:01 AM

Teachable for Pharo moved to GitHub

I moved Teachable project for Pharo now to GitHub:

You can easily load via catalog within Pharo 8.


The project shows the power of Smalltalk meachanisms within Pharo and is useful for mock object building in unit tests.

by Torsten ( at March 03, 2020 07:58 AM

Pomodoro Timer for Pharo 8

Pomodoro Timer for Pharo is now easily loadable from Catalog in Pharo 8.


Project is available on:

An old video is here:

by Torsten ( at March 03, 2020 07:56 AM

QuickAccess for Pharo 8

My QuickAccess project for Pharo is now available in catalog for Pharo 8 so you can easily load. 

An old video explaining it is here:

by Torsten ( at March 03, 2020 07:54 AM

YUMLGenerator for Pharo

I published some old code for Pharo on

to easily generate links for YUML to get a class hierarchy image. Helps to include simple class hierarchy pictures into your (markdown or other) documentation.

Example:     YUMLGenerator open: String


by Torsten ( at March 03, 2020 07:53 AM

Harbour for Pharo

My Harbour file browser experiment for Pharo is now loadable from Catalog:

 Now I need to find the time to add more functionality to make it more useful...

by Torsten ( at March 03, 2020 07:51 AM

March 01, 2020


[ANN] COVID-19 analysis in Pharo

I have set up a new Pharo project for the analysis of COVID-19 outbreak:
Thanks to the ObjectProfile for Roassal and PolyMath contributors for the DataFrame package.

by Stéphane Ducasse at March 01, 2020 10:20 AM

February 29, 2020

Program in Objects

Round 4 Results

I am pleased to announce the #1 leading team for Round 4 in The James Robertson Memorial Programming Competition (JRMPC). Congratulations to Team Dijkstra from Centennial Collegiate Vocational Institute in Guelph, Ontario.

This round is special because it’s the first time that competing team strategies play out on the same board simultaneously. It’s a fight to the finish! No quarter is asked and none is given.

by smalltalkrenaissance at February 29, 2020 03:36 PM

February 27, 2020


DNS over HTTPS (DoH)


Today Firefox switched over to using ‘DNS over HTTPS (DoH)’ by default.

We can do this in Pharo as well, even out of the box (minus the interpretation of the results, but still).

First, what is this ? A good description is:

Using the Cloudflare server, we can do the following in Pharo, using the JSON wire format.

ZnClient new
url: ‘‘;
accept: ‘application/dns-json’;
queryAt: #name put: ‘‘;
queryAt: #type put: ‘A’;
contentReader: [ :entity | STONJSON fromString: entity contents ];

The actual address can be accessed inside the returned result.

SocketAddress fromDottedString: (((ZnClient new
url: ‘‘;
accept: ‘application/dns-json’;
queryAt: #name put: ‘‘;
queryAt: #type put: ‘A’;
contentReader: [ :entity | STONJSON fromString: entity contents ];
get) at: #Answer) first at: #data).

If you load the following code,

it is just as easy to use the binary UDP wire format.

ZnClient new
url: ‘‘;
accept: ‘application/dns-message’;
contentWriter: [ :message |
ZnEntity with: message asByteArray type: ‘application/dns-message’ ];
contentReader: [ :entity |
DNSMessage readFrom: entity readStream ];
contents: (DNSMessage addressByName: ‘‘);

Again, the actual address can be accessed inside the returned object.

(ZnClient new
url: ‘‘;
accept: ‘application/dns-message’;
contentWriter: [ :message |
ZnEntity with: message asByteArray type: ‘application/dns-message’ ];
contentReader: [ :entity |
DNSMessage readFrom: entity readStream ];
contents: (DNSMessage addressByName: ‘‘);
post) answers first address.

Incidentally, a more robust answer can be got as follows:

NeoSimplifiedDNSClient default addressForName: ‘‘.


by Stéphane Ducasse at February 27, 2020 01:08 PM

February 26, 2020

Program in Objects

Smalltalk Poll 1

JRMPC is The James Robertson Memorial Programming Competition. First Prize is a staggering $6,000. This poll is about the competition.

Promo videos for the competition:

T-shirt design for the competition:

Here’s how the T-shirts look from one of the teams:

The team-based competition involves finding the best strategy in a Pac-Man style game and implementing it in Pharo, a modern variant of Smalltalk. The purpose of the competition is to attract attention to Smalltalk and raise people’s awareness.

<noscript><a href="" target="_blank">Take Our Poll</a></noscript>

Thanks for participating in the poll.

by smalltalkrenaissance at February 26, 2020 01:08 PM


[Ann] Mediaclue getting open-source

Hi all

I’m a Pharo lover since many years. A huge thanks to all of you, making Pharo possible! As a giving back I would like to open source some of my business projects (Thanks to my supporting customers, too). The first is a web based media assets management called “mediaclue” (Think of it as a image/audio/video/document sharing platform, e.g. for teachers inside a school):


(Everything is ready for simple install into a fresh Linux server with included Ansible provisioning scripts to create the whole appliance)


P.S. The UI language is still german at the moment, but that should turn multilanguage eventually


Andreas Brodbeck
mindclue GmbH
Dipl. El.-Ing. ETH

+41 55 622 26 24

by Stéphane Ducasse at February 26, 2020 01:02 PM

February 22, 2020


[Ann] PolyMath 1.0.2

Dear all,

we are happy to announce the release of PolyMath 1.0.2, the
computational framework for Pharo. This release works on Pharo 7.0 and Pharo 8.0. All the 815 tests and the CI are green on MacOs, Windows and Linux 🙂

Please find more information about the project here:

Changelog of modifications since version 1.0.1 is available here:

You can install the 1.0.2 version in a fresh Pharo 7.0&8.0 with the
following code snippet:

Metacello new
repository: ‘github://PolyMathOrg/PolyMath:v1.0.2/src‘;
baseline: ‘PolyMath’;

You can join the dev team on #polymath channel for weekly meetings on Thursday. We are looking for more people for tests and contributions.
I’m starting a small experiment. If you want to support me working on PolyMath or others of my project like Tensorflow Pharo bindings, you can be one of my github sponsors.
Please give a monthly support here:

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, Cameroon
“Programs must be written for people to read, and only incidentally for machines to execute.”

by Stéphane Ducasse at February 22, 2020 08:17 AM

February 21, 2020

Program in Objects

Smalltalk: An Entrepreneur’s Secret Weapon

If you’re an entrepreneur, and especially if you’re a digital entrepreneur, one of your greatest concerns is getting to market as quickly and as easily as you can. Your business is highly dependent on computers, whether that’s in the area of web applications or mobile development or machine learning or virtual reality or robotics or whatever.

At the heart of software development is the programming language. Some languages make your job easier; others make your job much harder. We will look at one particular language that makes your job as a software developer much easier and much more productive than with any other language in existence.

But first, let’s look at a few programming languages that are frequently adopted by startups…

  1. Python — widely regarded as easy to learn and extremely versatile because of its numerous third-party libraries
  2. JavaScript — practically the only language you can use for writing web browser software
  3. Java — the chief Android programming language and the enterprise standard
  4. C# — most commonly used for Windows/.NET programming
  5. Ruby — best known for its Rails web framework
  6. PHP — the most widely used language for dynamic websites

Python has many peculiarities in its design, especially with respect to object-oriented programming. Its multithreading capability is crippled by the GIL (global interpreter lock). Its lambdas are oddly restricted to single expressions. Its half-open intervals are unintuitive. Its off-side rule syntax is offensive to many programmers.

JavaScript has even more peculiarities, especially with respect to weak typing and its myriad nonsensical type coercions. JavaScript code can fail silently. The language is riddled with traps and pitfalls, which is why so many transpiled languages exist as JavaScript alternatives.

Java is extremely verbose. It’s more awkward to use than Python. C# is Java on steroids.

Ruby and PHP have seen better days. Both are in decline.

To be clear, all of these languages can be effective for startups. However, there is one language that offers very special benefits, especially for entrepreneurs on a tight deadline. It’s called Smalltalk.

The first major benefit is Smalltalk’s simplicity and ease of use. Smalltalk is much, much easier than even Python. The syntax is ridiculously simple. It can be learned in its entirety within 15 minutes!

Smalltalk’s total syntax fits on a post card

The second major benefit is Smalltalk’s live coding capability, which practically eliminates the traditional edit-compile-test-debug cycle that has hampered programmers for over half a century. This helps to make Smalltalk the most productive programming language in the world. On average, Smalltalk is twice as productive as JavaScript, C++, Go, Java, PHP, Python, and C#. In many instances, Smalltalk can be up to 5 times more productive!

The third major benefit is Smalltalk’s purity, clarity, and consistency in its object-oriented model. Smalltalk is the easiest object-oriented language for this reason, far surpassing C++, C#, Java, Python, and Ruby.

Smalltalk’s object-oriented nature makes it supremely maintainable and scalable without the headaches imposed by other object-oriented languages.

The fourth major benefit is Smalltalk’s system image. The image is a snapshot of an application’s total execution environment. It allows you to save the execution state of your program and to resume execution later on at your convenience. This is terribly handy.

Smalltalk’s image also makes software deployment a breeze. You never have to worry about installing and configuring the numerous software components (like libraries and frameworks) that constitute your application in production.

The end result is that a startup can minimize the “time to market” for its product. It can deliver the product months, or even years, ahead of its competitors.

The good news is that Smalltalk is every bit as versatile as languages like Python and Java. For back-end web development, you have Smalltalk web frameworks like Seaside and Teapot. For front-end development, you have transpiled languages like Amber and PharoJS.

For data science, you have tools like PolyMath, Roassal, and Moose. For machine learning, you can use TensorFlow and Keras.

Roassal demo

Smalltalk is also good for things like IoT (PharoThings) and robotics (PhaROS) and virtual reality (check out this virtual reality startup).

virtual reality demo

It can even be used for scripting game engines!

game engine scripting demo

Speaking of games, here’s one for mobile devices called HexSolve written entirely in Smalltalk.

I can’t think of anything that Smalltalk hasn’t done compared to Python, JavaScript, and Java.


Smalltalk is a wonderful secret weapon because it flies under the radar of most entrepreneurs. While startups get distracted by the high profile languages, the smart ones can leverage the tremendous benefits of Smalltalk to get well ahead of competitors.

If you’re interested in checking out this magical language, visit the Resources page at my Smalltalk tech blog.

by smalltalkrenaissance at February 21, 2020 01:45 PM

February 18, 2020


Hacking Pharo in Amsterdam

Hacking Pharo in Amsterdam

Come join us in Amsterdam at our programmers workspace in Amsterdam. Its a sea container studio at NDSMTreehouse, open 24/7 (but please make an appointment until you have your own key).

Morphle Inc. T.T. Neveritaweg 57-E1 1033 WB Amsterdam +31507200071

by Stéphane Ducasse at February 18, 2020 09:11 PM

[Ann] new version of concurrent Prog booklet

Thanks for all the feedback. I fixed the embarassing english mistakes and french left over. I just issued a new version of the booklet.


by Stéphane Ducasse at February 18, 2020 01:03 PM