Planet Squeak

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

September 15, 2017

Torsten Bergmann

Smalltalk ENVY

Nice - this blog post brings back some memories on ENVY - a Smalltalk source code management system. I used ENVY in the past too and still have a signed copy of the book "Mastering ENVY/Developer" in my bookshelf

And yes - after coding in VisualAge for Smalltalk I also used VisualAge for Java which was really a nice tool for that time - it lowered the Java pain. Because at that time most Java people coded in editors like Notepad while VisualAge for Java was a full IDE with Browser, Debugger and all. It was built on top of the Smalltalk version like most of the members of the VisualAge family

by Torsten ( at September 15, 2017 08:07 PM


Tonel is a file-per-class format for monticello repositories. It allows to store the class definition and methods in a single file. The idea is to use this for a more performant git support in Pharo (as currently a file per method is used). Code is in

by Torsten ( at September 15, 2017 01:15 PM

September 14, 2017


[Ann] Launcher new version available

I published an update of the Launcher yesterday fixing some issues to run Pharo images from Linux. You can find latest-versions (0.2.13) here:
It already propose to download Pharo 70 images. The VM is now downloaded automatically if the adequate one is not available.
Let us know if everything is fine.

by Stéphane Ducasse at September 14, 2017 04:48 PM

September 11, 2017

Torsten Bergmann

Updated Pharo Launcher

According to Peter the updated Pharo Launcher automatically downloads the proper VM. No more VM juggling.

by Torsten ( at September 11, 2017 01:39 PM

First-class undefined classes for Pharo

Lets assume a class A requires a class B which is defined in a different package than class A.

If you defined the wrong load order of packages (so you load the package with A before the package with B) you might easily hit the problem of "Undefined classes".

Pharo will now address this issue better by having first class entities representing missing (or yet undefined) classes. It is already planned for Pharo 7.

Here are the slides from ESUG 2017 on this topic to give you more informations.

by Torsten ( at September 11, 2017 10:55 AM

September 09, 2017

Torsten Bergmann


Another new Pharo success story. Read more

by Torsten ( at September 09, 2017 12:15 PM


New success story: Contestia


We are happy to announce a new success story….


Pharo consortium

by Stéphane Ducasse at September 09, 2017 09:34 AM

September 08, 2017


Pharo 70 enhancements waiting for an automated reporter :)

Remove SmalllintManifestCheckerTest(class)>>DoIt

Uncategorized methods in SystemVersionTest, SystemProgressMorph, SugsWatchpointSuggestion, SugsSuggestionSwapMethodTest, SugsNau

add Gt and Github support to minimal image

Uncategorized methods in TextKern, TextSelectionColor, TextURL

Enforce Proper method categorization – Part 1 – SUnit

Use instead of disney

Uncategorized methods in WorldMenuHelp,WeakValueAssociation, WeakOrderedCollectionTest, WeakOrderedCollection, WeakMessageSendTe

Pharo 7 Help should already use Pharo 7 instead of 6 and show some first highlights

Categorize methods in UserOfFooSharedPool, UnusedVariable, UnlimitedInstanceVariableSlotTest, UnknownSelector, UndefinedVariable

Categorize methods in TabLabelMorph, TaskbarTask, TermInfoCharacter, TestAutoFractionComputation, TextClassLink, TextComposer, T

Uncategorized methods in VSUnloadUnit and VMWindowDriver

Uncategorized methods in ZipStringMember, ZipStore, ZipFileMember, ZipDirectoryMember

MailMessage API Improvement

Add Retry of tests in CI

Categorize methods in RubNotificationStrategy

free and beNull missing methods in referenced structures

New warning text color is not readable on white theme

deprecated call in QANautilusPluginMorph>>#displayCritique:

RecursionStopper methods not categorized

Categorize method in PharoShortcuts

Uncategorized methods in CP1253TextConverter, CairoPNGPaint, CairoScaledFont, CheckboxButtonMorph, CheckboxMorph, CheckboxMorph,

Uncategorized methods in DummyUIManager, DropListMorph class, DropListMorph, DoesNotUnderstandDebugAction, DockingBarMenuMorph

Move SymbolicBytecode>># and hash from package “GT-BytecodeDebugger” into “Kernel”

[ Pharo 70] Senders-of-String—isLegalInstVarName-isLegalClassName-

[ Pharo 70]  Categorize methods in AnnouncementLogger #240

[ Pharo 70 ] Build 83 PR 236 introduce-at-at-in-dictionary


[ Pharo 70 ] Build XX PR 236 free-and-beNull-missing-methods-in-referenced-structures


[ Pharo 70 ] Build XX PR 233 cleanup #isMorphicModel


… lots not recorded, build is at 79.


[ Pharo 70 ] Build 69 PR 225 20350-include 32-bit sources in the 64-bit Pharo archive


[ Pharo 70 ] Build 66 PR 223  20348-testWideStringClassName-needs-to-be-unmarked-as-expected-failure

by Stéphane Ducasse at September 08, 2017 04:32 PM

[Ann] Git Thermite

I am releasing an initial version of Git Thermite, the GitHub pull request visualization that I presented at IWST.
SmalltalkHub page:!/~ronsaldo/GitHubAPI

Script for loading Git Thermite:
Gofer it
smalltalkhubUser: ‘ronsaldo’ project: ‘GitHubAPI’;
configurationOf: ‘GitStats’;
For visualizing a GitHub pull request, you can use the dialog on the World menu -> Git Thermite -> Visualize pull request.
The GitHub access credential can be entered through the System Settings. I  recommend to generate a GitHub API secret token instead of using your GH password for the access token.
Because this project is for my Master Thesis, and I need to gather experimental data to validate the visualization, I will ask to the people at Lille to not experiment   with this tool until I test it with you during the next two weeks at Lillle.
The current implementation is quite hackish because I am building this in an exploratory way. Later I will make a full rewrite to clean the tool and make it easy to extend and experiment with more visualizations with it.
Best regards,

by Stéphane Ducasse at September 08, 2017 05:26 AM

[Consortium] Zweidenker GmbH upgraded to Gold

The Pharo Consortium is very happy to announce that Zweidenker GmbH
has upgraded to Gold Member status.

– Zweidenker GmbH:
– Pharo Consortium:

The goal of the Pharo Consortium is to allow companies and institutions to
support the ongoing development and future of Pharo.

Individuals can support Pharo via the Pharo Association:

by Stéphane Ducasse at September 08, 2017 04:42 AM

September 07, 2017

Torsten Bergmann


Studio is a debugger for the data produced by complex applications. It is ongoing work based on Pharo and Roassal - but nonetheless interesting. Read more here.

by Torsten ( at September 07, 2017 02:21 PM

DataFrame - Towards exploratory data analysis for Pharo

Intro video to DataFrame in Pharo. Code is here.

by Torsten ( at September 07, 2017 11:19 AM

September 06, 2017

Torsten Bergmann


Jun4Pharo, a 3D graphics library, now works on Pharo 5.0. As Pharo 5.0 adopted UFFI and SDL binding, Jun4Pharo uses Pharo's SDL and OpenGL low-level interfaces.

by Torsten ( at September 06, 2017 02:29 PM

BlockStyler for Pharo

Highlights blocks to make them stand out more and detect nesting levels more easily. Code is on

by Torsten ( at September 06, 2017 02:25 PM

September 04, 2017


Pharo 6 Generating Ruby on Rails Applications

by Stéphane Ducasse at September 04, 2017 08:49 PM

Torsten Bergmann

ESUG 2017 is running

The ESUG 2017 conference started today. You can follow the latest news from ESUG 2017 on twitter.

by Torsten ( at September 04, 2017 09:34 AM

Lowtalk - a new Smalltalk dialect

Lowtalk, a new Smalltalk dialect written in Pharo that could eventually replace Slang (the dialect that is used to build the Smalltalk virtual machine).

Read the announcement and checkout the code.

by Torsten ( at September 04, 2017 09:02 AM

Pharo 6 Generating Ruby-on-Rails Applications

The Rails Express RAD framework in Pharo 6.0 Smalltalk

by Torsten ( at September 04, 2017 08:57 AM


Report from AWS: Pharo Lambda

Hi – I neglected to mentioned “the catch” with Lambda, next to my results. So on a tiny EC2 instance you get those kinds of results (this is where I measured the numbers of 50ms) – however on Lambda you aren’t entirely clear what hardware its running on – and there are 2 aspects to consider – a cold start (where you are allocated a new Lambda instance, and so it has to bring in your deployed package) and then there appears to be a cached start – where it seems that one of your old Lambda environments  can be reused. On top of both of these states – there is an extra cost of spawning out to Pharo as its not supported natively.

I mention this in the Readme on the gitlab page (it’s possibly a bit subtle) – but I was pointed to the Sparta GoLang project (who aren’t supported natively either) where they have measured that that cost of spawning out to GoLang (and it looks fairly similar for Pharo) is 700ms. Essentially this spawning is the cost of loading up a NodeJS environment (presumably some Docker like image they have already prepared – although they don’t reveal how this is done), “requiring” the ‘child-process’ node module to get an exec method, and then your code to shell out. (In my repo – this is the PharoLambda.js file).

Empirically I am seeing results from 500ms to 1200ms which are in line with Sparta (possibly better? I haven’t loaded up a Go environment to understand what they need to package up to deploy an app that can be exec’d and how that compares to our 10mb’ish footprint).

If I look at a basic NodeJS hello world app – I see .5ms to 290ms responses – (the min billing unit is 100ms). I got the impression for a recent serverless meet-up that sub 500 is what people aim for. Which means we are at least in the running.

I don’t know how sensitive the ‘overhead’ load time is due to the package size you deploy (I saw a big increase when I got my package below 10mb) or whether it truly is the NodeJS tax. I would love to get hold of the AWS team and suggest they provide another fixed solution that efficiently exec’s in C, a named executable with configurable parameters and the “event” parameter serialised in JSON (on the surface it seems overkill to use NodeJS for just that simple operation).

All this said the free tier gives you “1M free requests per month and 400,000 GB-seconds of compute time per month” – so assuming we can do interesting things in under a second (which I’ve shown), then you can process 400,000 of them a month for free (which isn’t bad really).



Hi – the script I’m using is in – it’s nothing fancy, look at the Gitlab .yml file.
This is all Linux running in an ubuntu docker image on Gitlab CI.


by Stéphane Ducasse at September 04, 2017 05:15 AM

[ann] moldable editor – transcript with adornments


We are happy to announce that the moldable editor helped us create a richer transcript: GT Transcript.
The transcript is traditionally a stream of plain text. As we now have an elaborate editor, we can take advantage of it to help us display richer representations.
The API is backward compatible with the existing transcript. To enable the new features, we introduced a builder. For example:
transcript nextPutAll: ‘something’
transcript next putAll: ‘something’
and after #next we can add multiple attributes that we want to affect the following insertion of a text.
Below you can find an example detailing most of the API. The most notable additions is the support for expandable adornments. For example, #showException: provides an in-place expansion of the stack of the exception context.
To get an idea of how this tool can be useful, take a look at the following video showing the visual logging of a Bloc animation:
The code can be found in the new incarnation of GToolkit:
Iceberg enableMetacelloIntegration: true.
Metacello new
baseline: ‘GToolkit’;
repository: ‘github://feenkcom/gtoolkit/src‘;
The feenk team

by Stéphane Ducasse at September 04, 2017 05:14 AM

September 02, 2017


Google summer projects in Youtube!





by Stéphane Ducasse at September 02, 2017 05:20 PM

DesktopManager and integration


In latest DesktopManager (available from catalog) package you can now also easily choose a background picture
from the “” collection in a custom spotter and apply it to the current desktop.

See the attached screenshot for an example.

The magic key combination is to hit CTRL+ D (like Desktop) followed by CTRL+B (like Background)

There is also

CTRL + D followed by CTRL + D — “Desktop Display” to display all desktops
CTRL + D followed by CTRL + A — “Desktop Add” to add a new desktop
CTRL + D followed by CTRL + N — “Desktop Next” to go to next desktop
CTRL + D followed by CTRL + P — “Desktop Previous” to go to previous desktop

Have fun

by Stéphane Ducasse at September 02, 2017 03:37 PM

September 01, 2017


Mooc Forum Moderators Wanted

Hi guys

we are looking for some brave souls to help us helping newbies during the next run of the mooc
planned for October 16th 2017…

Please let me know if you are interested helping.

by Stéphane Ducasse at September 01, 2017 09:38 AM

August 31, 2017


Experimental CentOS

CentOS 6.8:
# Add the repo
$ yum-config-manager –add-repo
# Install 32bit packages (with X11 dependency for *-ui or not)
$ yum install pharo6-32-ui.i686 or pharo6-32.i386
# Install 64bit packages
$ yum install pharo6-64-ui.x86_64 pharo6-64.x86_64
that will install correct vm for your distribution.

by Stéphane Ducasse at August 31, 2017 05:10 PM

August 30, 2017

Torsten Bergmann


Clap-st is an Command Line Argument Parser for Pharo. Read more about it on the following blog posts:

- Post 1
- Post 2

by Torsten ( at August 30, 2017 09:37 PM

August 29, 2017

Torsten Bergmann

Renraku release 1.0

Renraku - the quality framework is already in Pharo 7. Read more.

by Torsten ( at August 29, 2017 05:38 PM


PharoThings: a must watch



by Stéphane Ducasse at August 29, 2017 05:27 PM

Pharo 70 alpha process rolling for real…

[ Pharo 70 ] Build 64 PR 196  Add validation step for binary loaded tests


[ Pharo 70 ] Build 62 PR 222 20346-Update-Iceberg-to-057


[ Pharo 70 ] Build 61 PR 218 Dead code: #destinationBuffer: and #digitBuffer:


[ Pharo 70 ] Build 60 PR 219 20340-IconHardcodedMessageRuleinitialize-is-dirty


[ Pharo 70 ] Build 59 PR 201 -DarkTheme-disabledTextColor-is-too-close-of-textColor


[ Pharo 70 ] Build 58 PR 104 SendsDeprecatedMethodToGlobalRule-might-be-hard..


[ Pharo 70 ] Build 57 PR 209  Merged in Renraku v1.0.2


[ Pharo 70 ] Build 56 PR 174 20260-FastTable-not-support-cell-morphs-with-stepping-animation #174


[ Pharo 70 ] Build 54 PR 193 Integrate WebBrowser-Core package to be able to open a browser on a URL


[ Pharo 70 ] Build 52 PR 205 index-inst-var-should-move-from-Slot-to-IndexedSlot


[ Pharo 70 ] Build 52 PR 195 Make-SUnit-loadable-by-Hermes


[ Pharo 70 ] Build 51 PR 214 Matrix-Trivial-typo-fix


[ Pharo 70 ] Build 50 PR 215 Rubric-line-numbers-are-not-dark-theme-friendly


[ Pharo 70 ] Build 49 PR 207 Replace-self-error-no-such-inst-var-by-a-first-class-error


[ Pharo 70 ] Build 48 PR 72 Remove-empty-protocols-on-categorize-all-uncategorized


[ Pharo 70 ] Build 47 PR 202  Refactor-the-MostUsedTools-of-the-world-menu-to-cut-dependencies-and-use-priorities


[ Pharo 70 ] Build 46 PR 200 Space-analysis-resurrection


[ Pharo 70 ] Build 45 PR 175 Space-analysis-resurrection


[ Pharo 70 ] Build 44 PR 212 Add-build-number-to-SystemVersion


[ Pharo 70 ] Build 43 PR 208 Open-a-package-extending-a-class-via-the-extension-protocol


[ Pharo 70 ] Build 41 PR 139 MailMessage-API-Improvement

by Stéphane Ducasse at August 29, 2017 05:25 PM

August 26, 2017


Pillar morphic renderer

We developed a minimal pillar morphic renderer. It is in the Pillar-Renderer package of Pillar. If you want to have fun, please improve it.

The screen shot shows what you get if you execute

PRMorphInterface new openWithSpec.



by Stéphane Ducasse at August 26, 2017 02:50 PM

August 25, 2017

Torsten Bergmann

SmartTest Teaser

Cool and funny ESUG 2017 Teaser for SmartTest project

by Torsten ( at August 25, 2017 03:29 PM