Monthly Archives: September 2016

Dr. Geo 16.10 is out

Dear Pharo fellows,

I am proud to announce release 16.10a of Dr. Geo.
It comes with the usual bug fixes and a new French programming API for
French speaking kids: programmed sketch can be written in French Smalltalk!


— Dr. Geo

Small-OS… project addition


now also the OSX project in the OS series [1] has support to 

 - directly open a terminal 
 - directly open a file browser (Finder) on the working directory

right from the Pharo tools menu. See attached screenshot.

Depending on your platform just load

 - OSWindows
 - OSLinuxUbuntu
 - OSLinuxCentOS

from catalog.



Territorial a new library for Geographical Information Retrieval in geopolitical objects

I am happy to announce the release of Territorial, a new Smalltalk library for Geographical Information Retrieval in geopolitical objects.
If you like it or have comments, different usage scenarios, improvement ideas, collaboration opportunities, etc. please don’t hesitate to contact me. I hope you find it useful.



A new FreeType binding


I am happy to announce the release of a new FreeType binding :)!/~ThibaultRaffaillac/UFFIFreeType
I use it to render glyphs with OpenGL, so a few features are still missing compared to FT2: gamma-space blitting (should belong to OSWindow?), GlyphForm class, and subpixel rendering (patch GlyphSlot>>form).

FT_Library startUp: true.
face := FT_Face fromFile: 'Arial.ttf' index: 0.
glyph := face glyph.
face setPixelWidth: 0 height: 12.
face loadChar: $x asUnicode flags: 4.
image := glyph form.


Sparta Canvas 1.0

I am happy to announce the release of Sparta v1.0 for Pharo 5 and Pharo 6.
For a moment only Linux and Mac are supported.
It can be bootstrapped with the following script:
Metacello new
  baseline: 'Sparta';
  repository: 'github://syrel/sparta:v1.0/src';
  load: #file:core
(on linux install 32bit libgtk-2, lingtk-3 and libstdc++)
(script for ubuntu

Sparta is an almost stateless vector graphics API for Pharo that provides bindings to the Moz2D rendering backend. Moz2D is the extracted graphical engine from Mozilla Firefox compiled as standalone shared library together with the extern C bindings required to call the engine from Pharo.

– developed with the help of Iceberg (thanks!) on Github.
– integrated into travis-ci using smalltalkCI (great job!).
– documented using Pillar (so better!) syntax.


Seamless 0.9.0

I released new version of Seamless 0.9.0. It is based on specialized TostSerializer instead of Fuel.

This version is ~4 times faster than previous one and produce much compact data packets.
For example Fuel based version takes 400 bytes to return small integer as result of message send. Now it is just 21 bytes.

Pharo 5 and 6 are supported.

Metacello new
smalltalkhubUser: ‘Pharo’ project: ’Seamless’;
configuration: ’Seamless’;
version: #stable;


Building an announcement spy in


To help us understand the behavior of announcements, Thierry Goubier wrote a simple script that monitors key methods of the framework. Really nice and powerful.



| c1 c2 c3 n1 n2 n3 l1 l2 l3 |
c1 := c2 := c3 := 0.
n1 := (Announcer>>#announce:) ast.
n2 := #(subscribe:do: subscribe:send:to: basicSubscribe:) collect: [ :e | (Announcer>>e) ast ].
n3 := #(unsubscribe: removeSubscription:) collect: [ :e | (Announcer>>e) ast ].
l1 := MetaLink new metaObject: [ c1 := c1 + 1 ]; selector: #value.
l2 := MetaLink new metaObject: [ c2 := c2 + 1 ]; selector: #value.
l3 := MetaLink new metaObject: [ c3 := c3 + 1 ]; selector: #value.
[ n1 link: l1. n2 do: [ :e | e link: l2 ]. n3 do: [ :e | e link: l3 ].
(Duration minutes: 1) wait.
n1 removeLink: l1. n2 do: [ :e | e removeLink: l2 ]. n3 do: [ :e | e removeLink: l3 ].
{ 'announce' -> c1. 'subscribe' -> c2.  'unsubscribe' -> c3 } inspect ] forkAt: Processor userBackgroundPriority

Towards class deprecation…


Using the idea we got with Peter Uhnak, we know implemented using the transformation library of gustavo two new transformations:

– deprecate class: It  just compiles a “new” method raising a warning and a class method deprecated returning true. This could then improve to rename the method new if it already exist.

– rename and deprecate:  the idea here is that we want to make sure that we can rename a class and that external users get a chance to load and execute their code. For that if we have a class A, we rename it into ANewName and create an empty subclass A that we deprecate.

Let us know what you think.

Stef and Gustavo

RProjectConnector 2.1

Hello everyone,

I am glad to announce the release of version 2.1 of the RProjectConnector.

The binding between Pharo and R ( is now translated to UFFI and so to Pharo 6.0.

You can call directly your R methods from Pharo. For example, with the famous iris clustering example:

      iris := 'eval' asREval: {RObject findVar: 'iris'}.
                 {(iris at: 'Petal.Length').
                  (iris at: 'Petal.Width').
                  (#pch -> 21).
                  (#xlab -> 'length').
                  (#ylab -> 'Width').
                  (#bg  ->((iris at: 'Species') collect: [ :value | {'red'. 'green3'. 'blue'} at: value ])).
              (#main -> 'Edgar Anderson''s Iris Data')}.
      iris inspect.

To use it, you should install R and copy the R libraries near the Pharo VM (see the documentation on SmalltalkHub (!/~VincentBlondeau/RProjectConnector) for how to proceed).

Don’t forget to relaunch Pharo after the installation to be able to use the connector.

Only basic features are implemented yet, but you can participate to its extension!


Vincent Blondeau