Monthly Archives: September 2015

Multiple Desktops for Pharo

Julien Delplanque provided this week a goodie to switch between 
"desktops" - but his initial solution was more or less hiding windows
and not really switching between real Pharo worlds/desktops.

I gave him some tips what could be done on the pharo-user list. Havent heard
from him afterwards.

Now I was able to spend a few hours on this topic myself and implemented 
a full multiple desktop solution myself.

This works in Pharo 5 only (currently) and requires latest VM (at least on Windows)
from to get the keyboard shortcuts right.

To try:

  Gofer new
    smalltalkhubUser: 'TorstenBergmann' project: 'DesktopManager';

The goodie has some nice features like keyboard navigation, world menu
integration and even a custom spotter with preview of the desktops.

Quick start:
 - evaluate the above expression in a Pharo 5 image
 - check the world menu "Desktop"
 - you can press CTRL + D and then CTRL + A (= Desktop Add) to add a new desktop 
 - you can press CTRL + D and then CTRL + D (= Desktop Desktop) to open the overview
 - you can press CTRL + D and then CTRL + P (= Desktop Previous) to navigate to the previous desktop
 - you can press CTRL + D and then CTRL + N (= Desktop Next) to navigate to the next desktop

The code is hopefully a good example on how to build a custom spotter, shortcuts, inspector extensions, ...
Additionally all this is described in a new article including screenshots
and a guide on how to use this new goodie:

Actually the article took more time to write than coding but I hope 
it helps explaining Pharo and why it is a power tool. 

Project is on!/~TorstenBergmann/DesktopManager
Article and code is still subject to change.

Have fun

Ephemeric Cloud to a MongoDB hosted at Digital Ocean


Good news everyone! :)

Today I have successfully connected an application published in
Ephemeric Cloud to a MongoDB hosted at Digital Ocean!

It became possible due to a stunnel support implemented in Ephemeric
Cloud runtime – the utility allows to create secure tunnels between
applications. Thus the communication between an ephemeric instance and
a droplet is encrypted and safe. Configuration is extremely simple –
just put a stunnel.conf and the certificate files to your Image
archive before publishing it.

This approach is universal and it allows to connect Pharo Images to
any service providers or dedicated servers. Therefore Ephemeric cloud
becomes more than just Pharocloud but an universal tool to develop and
publish Pharo web applications. Another good thing is that it has a
free tier :)

Please try it out and tell me what you think.

You can find some documentation here:


Steady improvements….steadily

16500 Remove senders of subscribe:send:to: in the image

16564 Remove senders of Announcer>>#subscribe:send:to: in Tool-Workspace

16562 Remove senders of Announcer>>#subscribe:send:to: in Tool-FileList

16553 TabModel/TabModelManager are not setting owner:

16420 Remove #changeRecordsAt: from TBehavior

16580 #after block sequence

16579 parentScopeFor: not used

16576 more tests for Primitives

14294 request: should be in charge of its argument translation and not its clients

16572 Fix “-override” method unload

16561 Remove senders of subscribe:send:to: in GToolkit

16501 Remove senders of subscribe:send:to: in Glamour

16566 Replace WriteStream with writeStream message send in AST-Core

16556 Nautilus selection announcements intersect as they are in a hierarchy

16539 System-Changes and Compression should not depend on Graphics-Display Objects

16557 FileSystem-Core should not depend on Regex-Core

16550 Bad BlueInk block formatting

16558 Collections-Abstract should not depend on Regex-Core

16559 fix for #instead links
16546 Integrate Versionner

16503 Remove senders of subscribe:send:to: in Rubric


16545 Improve #after on sequence node

16498 unrecoverable changes

16548 Undeclared ivar in PragmaCollector
16541 type relase vs release in SyntaxErrorDebugger

16526 CubeHelix class example throws assertion error

16509 MenuTitleMorph for MenuMorph

15845 Integrate DependencyAnalyzer

16530 Monticello setting weird
16533 Multilingual-Languages and Multilingual-Encondings should not depend on Text-Scanning

16520 Help topic for how to contribute to Pharo basecode
16524 Assignment is misspelled in RBAssignmentInIfTrueRule>>#rationale

16515 Adding an instance variable to Model broken by QualityAssistant

16454 BlueInk block formatting

16521 Help topic for contributing to the catalog

16512 “Save As” should increment a version number

16517 Update manifest for the bootstrap

16411 implementors of announcer not subclass of Model should be subclass of Model
16496 Provide context menu icons in Catalog browser

15374 exception handling when running tests in Nautilus

16511 Smalltalk saveAs should include the current image name as the initial text in the file dialogue
16504 NewVersionBrowser and RGMethodDefinition vs. CompiledMethod

16496 Provide context menu icons in Catalog browser

16487 Dropping methods on empty areas of class/method category pane raises SubscriptOutOfBounds
16493 Syntax highlighting in Rubric need to highlight characters

16507 Simplify test running of Nautilus

16506 Ensure wrapping #after for MethodNode

16502 simple nautilus cleans

16499 Reflectivity and Primitive: Unwrap when destroying Twin, copy over links to wrapper
16495 Reflectivity: Wrap primitive methods

16039 put a space between numbers and units


16483 AST-Core should not depend on System-Localization

16472 Minor improvements to MenuMorph (2)

16492 no syntax highlighting if last expression is invalid code

16485 Class panes not refreshed when changing package

16479 Creating a class in an empty environment

16481 #instead for Block

16413 Model should be packaged outside System-Support

16482 Better default size for MCBrowser

16460 I fileout a package does not fileout metaclass extension
16475 Nautilus sends too many announcements for a single action

16477 Fixes: #before on sequence, after on Block
16452 Improve Morph>>layoutProportionallyIn:

16471 Pass over #after: make after work for assignment

14432 FreeTypeTests package should be FreeType-Tests

14427 CompressionTests package should be Compression-Tests

14434 MorphicTests package should be Morphic-Tests

16461 ChunkFileParser

16459 Refactoring remove method parameter doesnt work

16457 Minor improvements to MenuMorph

16464 Smart suggestion is broken

16458 #instead for MethodNode

16455 Spotter dying on not understanding #canUnderstand:
14426 BalloonTests package should be Balloon-Tests

14437 NetworkTests package should be Network-Tests

16449 update bootstrap dependencies v2

11461 TabModel not really removed tabs

16448 #instead for Array

16444 ASt-Core should not have a BlueInk rpackage tag

16438 Deprecate Color>>printHtmlString and Color>>asHTMLColor

14765 Missing calls of “super release” in #release methods


16442 ShoreLine Reporter version 0.2.0

15307 Error message not clear when trying to create a class with a name without the first letter in upper case

16391 Switching hierarchy visually removes selection of a protocol

14268 RBSentNotImplementedRule: checking for general senders is disabled
15941 Color>>printHtmlString and Color>>asHTMLColor are similar

16416 spec predebug notification window should use text without code highlighting

16267 Fasttable isnt visible in athens (in bloc)

16370 retryOnCredentialRequest: introduces a lot of repeated code and dependencies into monticello

16248 Remove unused ClassCategoryReader and ClassCommentReader

16439 improve #isUsed a little
16435 add Context>>#sourceNodeExecuted

16434 can not inspect block methods (RBUnpackagedRule)

16426 new OSWindow integration to clean up wrong merge

16340 ExternalBrowser or “Recover lost changes” broken

16432 add Color>>#asHexString

16421 ChunkWriter does not save correctly wideStrings

16433 simplify #unreferencedKeys
16431 Announcements with QualityAssistant

16417 instant Syntax Error Notification

16423 Replace == nil with isNil in AST-Core

16419 nil sourcePointer on Active Ring methods

Phratch 4.1

Based on Phratch 4.0 we made some bug fixes and added new small features. Phratch is now on top of Pharo 4.0.
The new features are:
– languages are more stable. Thanks to the community for the feedback and the enhancement of the language files.
– Add a “follow” option that allows one to see which block is currently executed.
Phratch 4.1 is already available on
If you detect an issue, you can submit a description on
And you can always download the latest build on the continuous integration server:
See you on

“pharo get” to load catalog published software


This functionality is in fact in Pharo 5 since a couple of months (I added it during ESUG), but I forget to send the ANN, then probably people does not know it and then is not using it. 
This is a catalog command line handler to prepare your images from command line. For example, if I want an image with Seaside3:  

./pharo Pharo.image get Seaside3

or if you want a version:

./pharo Pharo.image get Seaside3 —version=3.1.2

since this tool is part of catalog, just catalog projects are available… but I find it very useful for prepare my images (and a lot less verbose than the config command line who is still available for non-catalog projects)


New Tool: Flow message browser

A new tool to browse and dive deep into the flow of messages
using a tree representation (messages, senders, implementors, ...)
and further on. I know such a tool from Smalltalk/MT and it is really
helpful to trace a message flow without running in the debugger.

See the attached screenshot, the best is to try it: 

In a latest Pharo 5.0 image (Pharo5.0 Latest update: #50314)
you can evaluate:

  Gofer new
     url: '';
     package: 'Tool-MessageFlowBrowser';

to load it.

Then open whatever method in Nautilus and choose "Message Flow" from the context
menu. The nice thing is that you can dive into senders, implementors, messages sent 
deeper and deeper (or up again) and you do not open more and more windows but stay 
in a single window !!!

Alternatively you can start the tool from the playground:

 MessageFlowBrowser openOn: #inspect "open the flow browser on a selector"

 MessageFlowBrowser openOn: (Compiler>>#evaluate) "open the flow browser on a method"
 MessageFlowBrowser openOn: Object   "open the flow browser on a class"

 1 messageFlow.                      "open the flow browser on the class of an instance"

If someone with GT knowledge and time could help to correct the syntax highlighting 
in the code pane this would be super cool (see method MessageFlowBrowser #openOn:). 
Also selection could be improved to show/highlight the messages sent directly
in the code. Unfortunately I'm not so familar with the current code editors - so
any help is appreciated.

Repo is open for contribution. 


Pillar 1.1.0 is out :)

Cyril Ferlicot and I have polished Pillar 1.0.0 a little. Here is 1.1.0

- add shebang to generated
- improve messages a little
- HTML exporter
  - output a <figure> if and only if the Pillar figure has both a
    caption and a label
- LaTeX exporter
  - output a \begin{figure} if and only if the Pillar figure has both
    a caption and a label

Cyril migrated the list of issues and feature requests from to


Please report issues, describe feature requests and ask questions there.

Low traffic announce-only list

Low traffic announce-only list for Pharo and related news:

Pillar 1.0.0 is out

Hello guys!

I finished 5 months of internship into the RMoD team. I worked on Pillar
and I am glad to announce the version 1.0.0!
You can find an updated documentation of this version here :

We decided with Damien Cassou to use Semetic Versioning from now (see:

I will now explain the main changes I did on Pillar during my internship.

For each new feature I added tests and documentation.

I will begin with the changes of Pillar's structure

- The configuration system is now manage by Cocoon
-- We now use Magritte in Cocoon

- I added Annotations : A syntax extension point

- I added Transformers : A way to transform a document model before an
export (to add a section structure in HTML for example)

- Some small refactoring.
-- Improvement of the template management
-- Improvement of the Pillar model parameters

- Improvement of the document model
-- Now the figures and links are two different entity

- I begun a PetitPillar (with PetitParser) in order to replace the old
parser too complicated.

Now I will talk about new features for the users

- Improvement of the usability of Pillar under Windows

- Beamer and Deck.js exporters

- Annotations :
-- To include a Pillar file into an other (${inputFile:path}$) (Example:
-- To create new slides in Beamer and Deck.js (${slide:My
-- To create columns into a Pillar document (currently works in Beamer,
Deck.js and HTML)
-- …

- Transformers
-- You can now add a parameter "lineNumber=true" to a script and Pillar
will transform them to add the line numbers
-- You can now import a script from an other file (see the documentation
of the scripts)
-- …

- Improvement of the errors raised by Pillar

- Addition of the inter-files links

- Improvement of the title configuration for numbering

- No need to make scripts anymore to use Pillar !
-- You can used "defaultExporters" in your configuration to do multiple
export (see documentation)
-- Pillar generate a script for LaTeX compilation (only for Unix for now)

- Possibility to export everything into a different folder (simpler to
clean after)
-- And possibility to copy some support files

For the two previous point you can take example on Enterprise Pharo
( and Pharo
Mooc (

This was a really cool internship :)

If you have some questions do not hesitate!