Monthly Archives: March 2017

Enhancements for coming release

18207 Breakpoints still held after a method/class with breakpoints is removed

19669 FastTable jumps to the selected element when its resized

19775 Bootstrapped image does not contain class comment of the Context class

19788 sometimes external structures does not initialise properly OFFSET fields before use

19221 Rub Find And Replace can not search for “?”

19789 CI tests often fail on Windows

19717 FileSystem workingDirectory wrong after image moved to a new folder

18578 MetacelloValidationError(MetacelloValidationIssue) printOn: rasies Warning #name

19787 Athens crashes the VM
19780 Announcer has bad class comment which reference dead link

17728 Integrate Travis Griggs TAG-SortFunctions

19785 Athens crashes the VM
19779 BaselineOfMorphic compiles own version of SystemSettingsPersistence class>>#updateSettingNodes

19784 code loss when cancelling during save

19776 BaselineOfMorphic and BaselineOfUI both specify Polymorph-TaskbarIcons
19777 BaselineOfUI compiles own version of RubScrolledTextMorph>>#font:

19772 BaselineOfIDE compiles own version of EpLostChangesDetector>>#startUp:

18784 FileList selected directory entry is not cleared after selecting a new directory

18871 DNU after showing about box of QA annotation question mark icon

19774 BaselineOfUI is compiling own version of Pragma>>#methodSelector
19781 callback with return of void* leads to an invalid return

19783 prepare SDL2 for 64bits

19782 prepare Athens for 64bits

19778 NaturalLanguageTranslator contains a class variable AllKnownPhrases in bootstrapped image

19773 BaselineOfMorphic compiles own version of Character>>#characterSet

19667 After removing of a package by Nautilus the empty extension protocols are still there

18252 debugit on “self” causes endless loop
19770 FFIExternalStructurePlatformTests>>#testStructureHasCorrectOffsets32bits is failing on the bootstrapped image

19761 Debugger wrong temp var value after multiple step through block
19732 Reenable Catalog loading in Spotter and fix confusing/hidden setting for it

19769 BaselineOfIDE needs update

19771 remove debugging “Alive” report during the bootstrap initialization
19763 TabManagerMorph do not respect multipleContents mode when tabs are built in background

19762 Optimize small Dictionary and Set creation

19459 add #empty instance creation method

19502 Starting Pharo creates a .ston file in appdata directory
19759 after UFFI update, SDL2 has unbound global class ExternalForm

19760 MorphTreeNodeMorph>>canExpand should accept the nil value of complexContents

19742 Some system baselines needs update

19402 NNavNavigateTest should be in separate package
19733 update UFFI to allow 64bits structures

19756 Usage of #name in NautilusRefactoring

19752 Object>>#name deprecation in SpecDebugger>>#session:

19758 prevent surface GC when using it to draw a form

19739 MCFtpRepository for Komitter
19747 ClassRename refactoring is not working anymore

19750 catalog does not create meta repository for Pharo 50

19751 Rename Copy to Clipboard to Copy Stack to Clipboard
19749 FFICallbackTests needs to be skipped for now

19748 new VMs allow enabling of WriteBarrierTests

19736 Catalog should use Metacello API instead of Gofer for Configuration installation

19446 Extract Method is broken
19731 secondary selection color should be not modified

19538 When replacing a slot in class by WeakSlot, it fails to migrate existing instances

19603 composition mapping should be initialized on bootstrapped image
19730 RubPrimarySelectionMorph>>#selectionColor does not respect theme style

19735 Desktop color issue in the bootstrapped image

19658 Red in Dark Theme is plain bad

19734 Sublimish theme menu text selection should be not black
18915 Kernel depends on Reflectivity

19654 Tooltips with description of the over and through debugger buttons actions

19724 Inspecting socket can produce PrimitiveFailed

This actually is a merge for GT… with:

The version moves the inspector to FastTable. More precisely it moves the Raw presentation and the presentations for collections to FastTable. For that it adds a tree datasource that has columns. More details here:

There are still two issues that need to be fixed after integrating this version:
– sorting in the Raw presentation does not preserve expanded elements
– editing should be done using SHIFT+double click (in place) or using a popup window for larger expressions.
This fixes:
– case 19645 Enabling search triggers error in the FastTable renderer for Glamour
– case 19560 The Glamour renderer for FastTable should offer a DataSource that combines a table and a tree presentation
– case 19648 Collection>>gtInspectorItemsIn: should use FastTable

Also fixes:
– case 17578 GTInspector recognizes a mouse click only after moving the mouse
– case 19423 Collection*gtInspectorItemsIn: defines the same helpMessage twice
– case 17644 Header rows in the Inspector can be “dragged”
– case 19676 We miss closeAllInspectors in Smalltalk tools inspector to close all inspectors, like we do for debuggers
– case 19712 GTInspector should not sort variables by name

19728 Integrate Sublimish theme

18460 FileLists “more…” menu item in preview panes context menu does not work

19488 STONWriterTests>>#testDictionaryWithComplexKeys is order dependent

18584 DNU on showing menu in PointerExplorer

18459 FileList calls unimplemented method allRegisteredServices

18724 DNU EyeTreeInspector workspace pane context menu
19723 Nuke SequenceableCollection>>#checkedAt:

19722 Move setMultipleSelection to FTTableMorph

19721 fix #name send in Slot tests

15303 rename MethodContextTest to ContextTest

MaterialDesignLite for Seaside

Hello everyone,

Today I released the version v1.1.0 of MaterialDesignLite for Seaside.

Since this is a minor version it shouldn’t break anything existing, but
nobody can avoid bugs. If you encounter a regression, feel free to open
an issue and I’ll try to commit a hotfix soon.

Thanks to Philippe Back, Paul Debruicker, Sabine Mana, Tobias Pape,
Guillaume Larcheveque and Yann Lesage for the contributions and the
feedback. Also thanks to everyone using this project.

You can now find an image with the project on pharo-contribution’s
Jenkins and on PharoLauncher.
( You can
find more detail on the to start with the project.

One of the future goal would be to add Functional tests with Parasol.

Here is the changelog. You can find a more readable version at:


## Bug Fixes

* **SelectWidget: Do not upgrade the dom at all node insertion**
* **MDLDialog>>openButtonId: missing .close eventListener**
* **Chips: Use #ensureId rather than overriding #id & #id:**
* **SortableTable: Visible page might end up out of bounds**
* **NestedList: Tooltips are unusable**

## Features

* **Anchors as buttons** This add the possibility to have links with the
style of buttons to not break semantic
* **Sliders: New features** This add a label with MD style, possibility
to add an icon, possibility to add an output, show the bounds and a demo
* **Dialog: Multiple opening buttons for a dialog**
* **SelectWidget: Allow to customize the field**
* **SelectWidget: Add tooltips on entries**
* **SortableTable: Allow to have no pagination**
* **SortableTable: Allow to personalize the style**
* **NestedList: Add way to customize style + add some default styles**
* **NestedList: Ajax actions on clic**
* **NestedList: possibility to customize an entry**
* **NestedList: Possibility to have an icon to the right of the list**
* **NestedList: Add a filter**
* **NestedList: Dynamically load children**
* **NestedList: Search and loading should add a spinner while
* **Tooltip: API should let choose the position of the tooltip**

## Cleaning

* **Dialogs** Clean javascript
* **NestedList** Extract the javascript into a file and use dataset
instead of ids
* **Extract Material Colors in another project** New repositories to get
only the MDLColors:
* **Improve Chips loading scripts**

## Infrastructure

* **Travis and Appveyor CI**

## Compatibility

### Squeak

* **`MDColor` has a lowercase class variable**

### Gemstone

* **Use string in baseline and remove #asString**

Cyril Ferlicot

2 rue Jacques Prévert 01,
59650 Villeneuve d’ascq France

News from Lowcode


With the experimental Lowcode backend for the UFFI, it is possible to call functions with almost arbitrary calling conventions. For some of the special assembly instructions that are required by this project, I could add the following extra instruction:
– storeIntoSpecialRegister: {CR0, CR1, CR2, CR3, CR4, CR5, GDT, LDT, IDT)
– loadFromSpecialRegister:
– loadFromIOPortU?Int{8,16,32}:
– storeIntoIOPortU?Int{8,16,32}:

As for the interruptions, there are far trickier because they can be triggered in any time. They probably would require some special trampoline for storing/restoring the VM state, something similar to the callbacks.

Currently I am finishing a refactoring of the Lowcode register allocator, so the Lowcode VM is out of service for this week 🙂 .
For GPU compilation, I implemented a SSA based intermediate representation very similar to the one used by LLVM. As a experiment, I did a very basic machine code generator which can produce relocatable ELF32 and ELF64 object files, which can be linked with any C library or program. With this I managed to implement a basic ahead of time compiled Smalltalk runtime.

Before starting that backend, I took a look on AsmJit and the VirtualCPU and I did not like the dependencies and some details about the stack. However, now I do not like the low level backend so I started refactoring into a separate package, but I still think that I should take yet another look to AsmJit and the VirtualCPU, so I am wondering where is actually located the latest version of these two projects.

Best regards,


QCMagritte can be found on smalltalk hub (!/~DiegoLont/QCMagritte/ ) and pharo CI ( ).

So download a fresh pharo image, open it and perform the following:

Gofer new url: ‘’; package: ‘ConfigurationOfQCMagritte’; load.
((Smalltalk at: #ConfigurationOfQCMagritte) project version: #’development’) load: #( ‘All’ ).
(Smalltalk at: #ZnZincServerAdaptor) startOn: 8080

Doing this should give you a working QC Magritte tutorial hosted on your own pc. You can also download a pre build image from the pharo ci server.

When you have an running image with QCMagritte: start a browser on http://localhost:8080/ and the tutorial should pop up.

New consortium agreement

Multiple companies asked for it and we made it. We are happy to announce that now the Pharo consortium offers a platinium level

In a nutshell

  • 10 days per Year of Support or of Specific development or Consulting;
  • a dedicated space on PHARO Consortium Website allowing the member to broadcast its news which will be published by the Inria PHARO Team prominently on the frontpage of the website.
  • Possibility to ask and pay an internship supervised by RMOD team.
  • Four individual Pharo Association memberships.

The pharo consortium.

PharoNOS for Pharo40

I successfully ported SqueakNOS to Pharo, and want to share it with you!
It works with Pharo 4.0 image, networking included, ping works!!/~JanStruz/PharoNOS/

What is different:
– I use my own CMake build file, with “out-of-tree” build support, instead of “” directories inside source tree + some template scripts to build any VM type, but it is not complete…
– I use MUSL instead of GlibC, cross-compiling GlibC statically on 64bit for 32bit seems impossible, but anyway I use 32bit environment to build it
– It works with pre-opensmalltalk-vm migration directory structure, so the “sync” with latest trunk remains #TODO, or maybe start a new branch again from the latest upstream commit should work too
– freetype is included, but will not load any fonts, since the filesystem driver is image-side… so you will need to make new fonts embedded, if you want them
– known issues: image snapshot and fileout are not working, current date+time hacked to make fat32 timestamps work
– revision needed: timer (heartbeat) vs. GC vs. interrupts enable/disable
– there are even some hacks to image-side methods

PharoNOS platform directory sources: [pharonos branch]

VM sources: [dev branch]
– added platform directory, build scripts and CMake templates
– added VMMaker configs

Build Environment (32bit) – Docker image repository, with CI:

PharoNOS CI (uses previous Docker image):

How to run it:
You can download fresh disk image from CI and then run:
(sudo) kvm -hda build/NOS.img -enable-kvm -cpu kvm32 -vga qxl -m 256 -netdev tap,id=user.3,ifname=tap2,vhost=on -net nic,model=rtl8139,netdev=user.3 -global isa-fdc.driveA= -serial stdio

One more thing:
Statically linked Pharo Spur32 (headless) VM, with only one dependency – Linux kernel:
Size: 2,4MB (too big?, but Freetype included too!)




[ANN] threaded heartbeat VMs added to zeroconf


Following recent talks, I added threaded heartbeats VMs to zeroconf.
Is weird because is not anymore “zero” conf: you need to configure the machine to accept this VM… but well, this is like that 😛

The links to use are this:

(they are listed at, as usual)


Fog – Ethereum driver for Pharo

Hi all. Im happy to announce a pre release of the Fog ethereum driver that we develop in the space of an Inria project.

It still not complete but is already usable for some experiments and simple projects.
You can downloadit from



 sudo apt-get install rhash


 npm install solc

Download code

Iceberg / Baseline

    baseline: 'Fog';
    repository:  'github://sbragagnolo/Fog:v0.1.1.1/src';

By hand

You may want to use this version for having access to some scripts and contracts samples.

git checkout
git checkout v0.1.1.1
    baseline: 'Fog';
    repository: 'filetree:///path/to/git-repository/Fog/src';;
It’s based on the standar API for javascript ( .
It provides interaction with remote contracts, it do as well provides a way for navigating the architecture objects: blocks, transactions, accounts and contracts.
I hope you find it useful.
Feel free to fill the github issue tracker with anything you find :).
I will come to you with some new exciting news about ethereum soon 🙂

[Consortium ] 6/12 March 2017


This is my weekly ChangeLog, from 6 March 2017 to 12 March 2017.
You can see it in a better format by going here:


10 March 2017:

* === libgit2(ssh) and linux
An update on the libgit2 (and consequently iceberg) problem on linux: SSH will not work on ITIMER VM (which is the zeroconf default, at least for now).

Here the reason:

ITIMER sends an signal to the VM thread using +pthread_kill(tickerThread, TICKER_SIGNAL)+ and that aborts system calls, which are used by +libssh2+, producing a ‘wait for packet’ to fail answering a timeout ( even if that timeout does not happens for real).

Here is an interesting comment from +sqUnixITimerTickerHeartbeat.c+ :

/* While we use SA_RESTART to ensure system calls are restarted, this is
* not universally effective. In particular, connect calls can abort if
* a system call is made in the signal handler, i.e. the pthread_kill in
* prodHighPriorityThread. So we avoid this if possible by not prodding
* the high-priority thread unless there are high-priority tickees as
* indicated by numAsyncTickees > 0.

… and sadly, as +OSSubprocess+, +libssh2+ calls falls under the category of “not universally effective”(they are connect calls… once disconnected, you cannot connect again ‘as is’).

So, the only workaround possible (at least for now), is to use the threaded version of VM… I improved the error message it throws when this fails, now looks like this:

You need to add a conf file to /etc/security/limits.d, executing this:

sudo cat >/etc/security/limits.d/%s.conf <<END\n”, VMNAME);
* hard rtprio 2
* soft rtprio 2

You need to log out and log back in for the limits to take effect.
For more information read

which at least shows what’s happens and how you can easily fix it.

Now, I think this is a *sad solution*. Needing to touch system configuration in order to run a VM does not feels “professional”. I would like to have some time to find a fix.




Tuning the Pharo GC

Clément Béra wrote a really blog post of GC tuning for Pharo. A must read!