Category Archives: Unsorted

New Booklet: a nice Bloc tutorial


We are happy to announce a nice tutorial on Bloc. The turorial is still in alpha version but fully working for now. We will add animations and more in the future.

A. Chis, S. Ducasse, and A. Syrel

Pharo Server Tools

Tools to deploy and manage headless Pharo servers from the command line.

To deploy and manage a Pharo based server application on a Linux system. More specifically, Pharo 4 on Ubuntu 14.04 LTS server.

The goal is to integrate well within the standard Linux world,

  • create an entry in /etc/init.d or /etc/systemd/system/ for automatic start/stop/restart
  • create an entry in /etc/monit/conf.d for monitoring with automatic restarts whenever the check fails
  • setup logging to daily files
  • setup secure REPL access to the running application

This document describes the basic manual installation procedure. There is also an interactive scaffold script that automates most work.


Hi Torsten and All,

Quick Introduction for those not familiar with Pharo-Chrome:

Pharo-Chrome enables Pharo to control and query Chrome / Chromium, in
particular to retrieve the DOM of a page.  This is useful as many modern
pages are just a template which then loads some javascript to
asynchronously build the DOM, meaning that the ZnEasy / Soap combination
doesn’t get the bulk of the information on a page.

Pharo-Chrome is now mostly working, i.e. it is possible to open
a connection to Chrome, navigate to a requested URL, wait for it to
load, retrieve the DOM and then navigate the DOM using a subset of the
Soap API, e.g. #findAllStrings:, #findAllTags:, attributeAt:, etc..

GoogleChrome class>>exampleNavigation has been updated to retrieve the
DOM from

GoogleChrome class>>get: is analogous to ZnEasy class>>get:, although it
returns a ChromeNode, not an html string.

I wasn’t able to get rid of the delay while waiting for the page to
finish loading.   This actually makes sense, since, as mentioned above,
many modern pages build the DOM asynchronously, so there’s no clear
indication of when it is complete.  The default delay is currently 2000
milliseconds, which is about twice the maximum I saw needed (983ms), but
this can be changed (ChromeTabPage>>pageLoadDelay:).

I had three use cases for this library: one which works with
ZnEasy+Soap, one that used to work with ZnEasy+Soap, but doesn’t due to
a page redesign, and one which I hadn’t got working before.  All three
are working now.

Unlike Soap, I’ve currently modelled the nodes as a single class, and
have only implemented a subset of Soap’s methods, but is enough for what
I need.

I’ve introduced a dependency on the Beacon logging framework.  I find it
useful, but can remove it if you don’t want the additional dependency.
(I’m planning to add some GoogleChrome specific logging classes and use
those to better understand what pageLoadDelay should be).

I was focussed on trying to understand the events that Chrome generates,
so documentation is still lacking (read “missing” :-)).

I’ll generate a pull request after some more testing, tweaking and
documenting, but if you would like to take a look, the code is available

I haven’t yet updated BaselineOfChrome with the Beacon dependency.  I
did merge in your two commits from May 23.

If you, or anyone else, finds this useful, I welcome any feedback.

P.S.  I’ve just realised that I need to tidy up #sendMessage:,
#sendMessageDictionary and #sendMessageDictionary:wait:.  I’ll do that
as part of the general tidy up.


Reading JSON Feed format

Here is a quick example using the new JSON Feed format (

json := ZnClient new
url: ‘‘;
accept: ZnMimeType applicationJson;
contentReader: [ :entity | NeoJSONObject fromString: entity contents ];

json items collect: #title.
json items collect: [ :each | each title -> each url ].

Note how you can just pretend that the objects understand #items, #title or #url.


Chrome DevTools Protocol and Pharo


I played around with remote controlling Google Chrome from
Pharo using Chrome DevTools Protocol [1] (based on WebSockets).

The video shows an example using latest Pharo 6 on Mac:

Initial Code is on GitHub [2] if someone is interested,
requires OSOSX and Zinc Websockets to be loaded.

Have fun


New booklet: Voyage :)

A new booklet is joining the collection and it is on Voyage the object to document mapper developed by E. Lorenzano.

Available in beta and open to contributors at



Pompeii Volcanic Graphics, a mesh based 2D graphics API


I am releasing a first version of a new 2D graphics API that I am making for Pharo, using OpenGL.


This 2D graphics API is not vectorial based becase it does not use SVG style paths. This API is triangle mesh based, so it is more friendlier with the GPU than Athens or Sparta.

With this API I did a basic gui toolkit, with only two widgets: buttons and label. I did this Widget toolkit to not mess with Bloc, and because I need something relatively stable for the Woden 2 level editor. For now, I am leaving this widget toolkit mostly as a demo. Hopefully it is possible to make Bloc backend using this API.

During the process of making this API, I had to fix several bugs with OSWindow, and bugs in the interaction between OSWindow and OpenGL. The biggest problem was a race condition between the creation of an OSWindow using SDL2, and the events (such as Expose) that are sent to the just created Window.

As for Mac OS X, OSWindow is out of service until a pull request ( ) gets integrated into the VM.

Best regards,


Last enhancements getting closer to the release

20047 in Versioner (or Komitter), RemotesManager needs to list just remotes

20005 Epicea: Integrate release 8.2.2

20035 UDPSocketEchoTest testEcho fails on Mac

20036 WindowAnnouncementTest is failing on mac

20038 GLMPharoScriptMorphicTest and GLMTextMorphicTest are failing on Mac CI

20032 RF: compile access to #node as LiteralVariable

20023 #isDeprecated does not cover all deprecation messsages

19920 FTTableMorph implicit filter isnt working properly with the escape keystroke
20010 Deprecated methods should be placed in the Deprecated60 package

20021 fix for #instead: stack needs to be cleaned

19984 TabExample does not switch theme correctly

20014 Dark theme is bad for changes browser

19975 Can add a _tag_ to a Nautilus work group but a package is expected

20016 Extensions with the same prefix may not be categorized correctly
19986 STON do not support WideSymbols

20013 WelcomeHelp for Pharo 6

19979 Revert gray comments color and fix colors in DiffMorph

20011 OSEnvironment>>getEnv: needs to use a primitive

19936 The code presentation in the Meta tab cuts the scrollbar at the bottom

19897 Problem with presentations containing tabulators in the inspector from the debugger

19988 #testShouldGetUnresolvedDependencies can fail easily
19909 Versionner reset modifications of first opened project when user opens another project in addition

19981 Class side slot initialization does not work

20004 SnapshotDone should be after all startup actions

19985 SourceFileArray should be encoding independent when read preamble of methods

20003 useExternalPackages mentions Pharo 5.0 although in Pharo 6.0

20000 HelpBrowser should open real browser when “WebBrowser” is loaded

19998 Settings Syntax highlighting “set to default” crashes the image
19993 Provide comment for TAbleToRotate

19959 base local Metaclass and ClassTrait methods tests on pragmas

19989 testAllCallsOnASymbol can fail easily

19997 Cleanup the Help menu (order)

19982 Better method comments

19925 Document that SmallInteger>>printString breaks the #printOn: rule

19999 Improve SHTextStylerST80 class side protocols

19990 UFFI not reset method cache at image startup
19968 Class rename do not mark extending packages dirty

19987 Bad highlight for matching parentheses with dark theme

19995 Fix typo in testIsNativeSSLPluginPresent

19996 Cleanup FFIConstants
19992 Use assert:equals: in simulateKeyStroke tests

19463 Improve SessionManager class comment

19983 activate the Dark theme by default in the bootstrapped image

19991 Use of deprecated name method in TextEditor>>changeStyle
19912 Epicea: Integrate release 8.2.1

19958 Find and Replace dialog uses black text color in dark theme

19963 Improvement of TravisIntegrationHelp

19977 Menu failure on right click in code pane when coming from MessageBrowser
19960 Comments in changed code in Diff tool

19962 Watery theme is broken because SimpleButtonMorph does not understand isDefault

19970 Formatting methods recently introduced for WelcomeHelp should be accessible to all Help classes
19956 switching back to pharo3 theme has wrong tooltip color

19937 Help for TravisIntegration

19961 Impossible to read popup error in playground and Dark Theme
19943 Error while browsing a comment un MessageBrowser

19945 PharoCommandLineHandler class comments incorrect

19954 Komitter should explicitly unsubscribe form SystemAnnoucer when window is closed

19941 Dark Theme – overlapped title bars need to be distinctive
19935 Versionner tags are unreadable in the dark theme

19938 Traits methods flattened

19809 Failing test: WeakAnnouncerTest>>#testNoDeadWeakSubscriptions

19951 StringMorph imageForm shows a white rectangle in DarkTheme

19944 Server deployment is broken due to GlobalIdentifier

19932 WelcomeHelp for Pharo 6 update

19934 change default theme to DarkTheme

19933 Remove ConfigurationOfMooseAlgos from the image.

19929 Comment guard to warn debugging top most process context

19926 Glamour Fast Table selection menu item actions does not work together with a filter

19884 Rubric should not use SmallInteger maxVal
19923 QA v3.3.1

19922 System-BasicCommandLineHandler calls name method
19921 allow CairoLibrary to find x86_64 bits libcairo when needed (linux)
19918 split unixModuleName into unix32ModuleName and unix64ModuleName
18028 Playground play-cache does ignore rename of current working directory

19895 Remove SmallInteger>>#instVarAt:

19855 SyntaxErrorNotification skips ensured block

19916 Fix correct author naming
19907 Improve Comment OpalCompiler

19911 Epicea makes a memory leak

19898 CompiledMethod package detection logic has bug when same selector is defined on instance and class side

19886 Add a popup in case the title of a window is too large

19905 ZlibPlugin reads past the zipCollection boundary

19900 Better ProcessTest about ensure processing
19892 Socket problem with LatestVM

19870 Removing a method using Nautilus while it is present in a message browser raises #ast was sent to nil

19860 MC generates duplicated trait methods

19899 SettingBrowser>>choosePackagesIn: is not documented at all
19888 FastTable should not reset highlighting rows when selection is changed

19887 cairo surface does not need to set lock/show surface callbacks

19882 copyBits fails when showing Athens surface

19885 STON cannot read classes with underscore in their name

19879 Accessors for instance and class variable rename refactoring

19881 add Time >> #hour:minute:second:nano: constructor

Pharo job in Belgium

Dear all,

Yesplan is looking for a new colleague to join the software engineering team.
The position is required to be full-time and on-site in Gent, Belgium.
Do you fancy working with Pharo and GemStone/S but also with Javascript / ReactJS and other technologies to build intuitive event venue management software?
Read our vacancy in the link below and let me know!
Best regards