Monthly Archives: March 2017

Vector graphics Pharo poster


With the board and Inria graphists we designed this poster to present what is Pharo.

Feel free to use it.


More (old) Enhancements

19601 [Epicea] Epicea monitor is off by default

19600 [Epicea] OmNullReference shuld provide #globalName

19590 Integrate new Epicea release
19593 TClassDescription>>#isTestCase should be in SUnit-Core

19558 GtDebugger should not call #updateSelectionInterval in #updateBrowser

19596 move #outerMostContext to the KernelPackage

19597 move #definitionForNautilus &co. to the Kernel

19595 Protocol *GT-SpotterExtensions-Core-private in MCWorkingCopy should be moved to accessing

19594 isTestMethods &co. should be SUnit extensions, not part of Nautilus

19574 update BaselineOfIDE
19554 #~~ should be a primitive and a compile-time inlined selector to be consistent with #==

19573 more rigid ThemeIcons defaultUrl

19534 Unify Epicea UIs
19556 Glamour version 4.31

– fixes example GLMBasicExamples>>#morphWithCustomInteraction
– adds example GLMBasicExamples>>#changingTabsInComposite
– case 19505 Setting the selection using #initialize: does not work in a pharo script presentation.
– case 19504 Glamour should preserve the selection when updating a text presentation
– Put example browser into World / Help menu.
– better tests for the FT renderer in Glamour
– synchronize packages with Pharo
19570 QA 3.3.0

19557 GTDebugger should use FastTable in the object inspector for thisContext

19561 Drag&Drop FastTable Example Does Not Work

19536 “Instance variables not read and written” critique false positive on classes with certain slots

19559 GTMoldableDebugger>>updateBrowser should not call #update

19551 GLMPopper should accept cmd L shortcut to remote popup and cancel text changes

19552 Cancelling changes by cmd L should not request user confirmation

19565 QA v3.2.11
19548 Fix Spec Integration class comments and examples

19545 Add comment about OC translator subclasses (for effect / for value)

19555 Nautilus should sort all binary methods before non-binary methods

19550 Typo in settings: Popup notifaction –> Popup notification

19509 controling class assignment

19515 complileSilently:classified: method does not set properly the package

19217 Add printOn: method on WeakAnnouncementSubscription to improve readibility

19540 TabMorph should refresh content in background by defer message

19532 Improve TBehaviour >> lookupSelector:

19501 GlobalIdentifierTest leaves a file present in $data directory

19531 Latest GTTools integration broke the bootstrap
19521 localMethods should be moved to TBehavior where localSelectors methods are defined

19528 Split larger variable entries in the Variables menu into submenus

19529 Mouseover an empty submenu causes UI lockdown

19526 readString should check NULL condition

19520 Epicea: Tests lacking files cleanup

19514 ConfigurationOfFuel has no latest FuelTests version

19421 Failing test: WeakAnnouncerTest>>#testNoDeadWeakSubscriptions

19512 References to Tab -> should be TabMorph

18729 DNU on showing menu in CriticBrowser (code pane)

19491 ClassRemoved announced when it is not removed from superclass subclasses list

19490 ClassAdded should be announcer after notifying superclass about new subclass

19494 ClassModificationApplied is not announced when traitComposition of class or trait is changed
19493 Load new FastTable config

19488 STONWriterTests>>#testDictionaryWithComplexKeys is order dependent

19495 TabMorph should fork morph building in lesser priority than active process
19486 TabMorph helper method to prevent blinking when morph retrieval is too fast

19469 Debbuging Super call inside a debugger does not call the super method but the self one.

19306 taskbarIcon on class side should be defined only in Object class by using taskbarIconName redefined by subclasses

19479 Typo in name attribute of GRVariableAssignedLiteralRule

19478 Criticsbrowser shows a refactoring class name instead of the text diff

19438 Widen tolerance for DelayScheduler timing tests
19484 BaselineOfMorphic references unexisting class

19483 Add bootstrap specific code in Monticello

More enhancements before release…


19874 URL in ZnCharacterEncoderTests>>#testByteEncoderFromUrl must be changed

19868 RBMoveMethodToClassRefactoring not works with class side methods

19862 Evaluating code in a diff morph raise an error

19864 Add support for Server Name Indication (SNI) to Zodiac/SSLPlugin
19863 RBMoveMethodToClassRefactoring reset method protocol

19857 add option #argsAsArray

19809 Failing test: WeakAnnouncerTest>>#testNoDeadWeakSubscriptions

19856 FileReference { #spotterPreviewItemsIn: . #spotterPreviewZipItemsIn: } relies on #doesNotUnderstand:

19854 Rename refactoring from source code by cmd r should support all kind of ast nodes

19850 OrderedCollection Inspector indexes not right for similar items

19847 removeLink: needs to invalidate

19842 add simple api for testing if a link is installed in a node

19841 Format as you read can produce confusing “contents has been modified” questions

19843 add simple demo of logging self sends

19844 remove some trivial duplicated code from TabsExample>>#open

19845 add printOn: to ReflectiveMethod

19846 Make spotter work with ReflectiveMethods.
19839 add support for signedByteAt:signedByteAt:put:

19837 Epicea: integrate release 8.1.3


– Log browser:
* Display changes in a FastTableModel instead of a TreeModel, much faster for many changes.
* Remove “x filtered entries” display as well as “See 50 more” and “See all” buttons, to make the list of changes look more as a standard list (to the user eyes). Also, implementation was not nice.
* Big code clean up.
* Show number of active filters in tab (small visual improvement).
* Increase initial width.
– Fix case 19737: class removal annoucement now comes after class is renamed to AnObsolete (workaround).
– Fix case 19263: Catch all errors on redo and undo.
– Merge with fix to case 19819 by Denis. Thanks!
– Multiple code clean-ups
* Code Critic runs.
* Reduce direct explicit references to EpMonitor.
* Others.
– Add tests of apply and revert changes.
– Split EpLog into a new superclass to conform a hierarchy, which has now EpSorterLog.
– Ombu:
* Shutdown flush should be performed by all OmDeferrers, not only by all OmSessionStores.
* Workaround needed because can”t get real file stream position from ZnBufferedWriteStream (+ would need special care of WideStrings).
* Remove OmDirectoryStore and OmCompositeStore since they are not used anymore (continuous-style EpPriorView was the user).
* The Ston”s OmEntryReader should not receive the stream as parameter and then store it in the Ston reader. This produced was confussing and produced concurrency issues.
19838 ZnMonticelloServerDelegate>>#repositoryListing sends self self

19668 importIcons:fromFolder:inClass:category: sends unimplemented methods

19833 CairoLibrary unix module location assumptions too restrictive
19826 Off by one error in FTTableContainerMorph>>#calculateStartIndexWhenShowing:

19828 Class side methods + hierarchy selection eats the selected class.
19834 Error in horizontal scrollbar

19831 catalog refresh retrieves an empty collection

19823 exported source of the package MonticelloFileTree-Core in pharo-core repository contains strange extension
19822 ScriptingExtensions tests must be standalone

19809 Failing test: WeakAnnouncerTest>>#testNoDeadWeakSubscriptions

19786 MonticelloFileTree-Core package exported to Git contains a strange extension

19825 circular dependency between Renraku and Refactoring-Critics

19824 fix #scrollBarDownButtonBoundsFor: calculation

19819 Epicea browser doesnt refresh when tests produce code changes
19814 OSPlatform current needs to differentiate 32 and 64 bits

19821 loading of the BaselineOfIDE is broken

This brings changes to the inspector, debugger and fast table renderer for glamour.
Detailed changes:

– added support for refresh in the Inspector/Playground. The refresh uses the stepping mechanism from Morphic. There exists a setting to start/stop the refresh. Each presentation can decide if it wants refresh or not.

– the Glamour renderer for fast table uses now a LRUCache for storing the string representation returned by the #format: block. This is disabled by default and configureable per presentation. By default it is enabled for the Raw presentation and the collection presentations.

– the debugger now offers access to variables defined in the playground when debugging code from the playground

– the inspector uses GTInspectorVariableNode to model variables in the Raw view.

– fixed inspector issues with collections

Also fixes issues:
– case 18899 Raw presentation from the debugger inspector raises error when the rawSelection comes from another presentation
– case 17949 Missing evaluator presentation for the current context in debugger
– case 19753 Disappearing content in the context inspector from GTDebugger when tags are used
– case 19720 Add method scoped [Evaluator] tab to debugger
– case 14569 GTInspector should do live updates of objects and their slots
19816 Packages postfix must be removed

19815 BaselineOfBasicTools still loads Polymorph-TaskbarIcons

19807 Assert:equals: rule should target only tests

19801 Remove SublimishTheme

19809 Failing test: WeakAnnouncerTest>>#testNoDeadWeakSubscriptions

19799 Nautilus rebuilds the package view twice when adding a new protocol

19810 Non weak announcements in the SystemAnnouncer
19793 SHTextStylerST80 always parser code as method if workspace is nil

19797 Add access methods in PharoCommonTools instead of using DNU

19796 Remove duplicate code from SublimishTheme

18785 FileList: filter field does not show the actual filter

19795 Fix PackageTasksPlugin

PhD position at SCG

Applications are invited for PhD candidates at the Software Composition Group, University of Bern, Switzerland.

The Software Composition Group carries out research in software engineering and programming languages, with a view to enabling software evolution.  The SCG is led by Prof. Oscar Nierstrasz and is part of the Institute of Computer Science at the University of Bern.

Applicants will contribute to the ongoing SNSF project, “Agile Software Analysis”, and towards the planned successor project:

The candidate must have a MSc in Computer Science (equivalent to a Swiss MSc), should demonstrate strong programming skills, and have research interests in several of the following areas:

– software evolution
– program understanding
– dynamic analysis
– static analysis
– software modeling
– model-driven engineering
– secure software engineering
– programming language design
– domain specific languages
– virtual machine technology

Female candidates are especially welcome to apply. To apply, please send an email including your research statement and your CV, with at least two references, to Prof. Oscar Nierstrasz (, by June 1, 2017.

Kind regards,
Oscar Nierstrasz

Fossil and FileTree

Hi all,

I have written a simple integration of FileTree with Fossil to avoid the 2-step
Pharo- and shell-level work to add/delete/commit files.

At the operating system command prompt, init a new Fossil project:

os% mkdir ~/repo
os% cd ~/repo
os% fossil init myproject.fossil
project-id: 3c05c3016eeabf8e87816ee218c6a86d3c87b950
server-id: ff42bc86dba1a26b1d94b64685f7c09d02581617
admin-user: laptop-user (initial password is “1fe2ff”)

Open the repository:

os% mkdir ~/myproject
os% cd ~/myproject
os% fossil open ~/repo/myproject.fossil

In a fresh Pharo 6 image – I used v60411 – install FossilFileTree:

Metacello new
baseline: ‘FossilFileTree’;
repository: ‘github://PierceNg/FossilFileTree’;

Write code in Pharo. Open Monticello Browser. Add a “fossilfiletree”
repository, using ~/myproject as the directory. Save to said repository
from within Monticello Browser. Done.

Full blog post here:


Smalltalk jobs in Germany

Hi guys

Tomcat is looking for Smalltalkers in Germany.


2-3 Y. ST-experience (no matter which system) and wants to work for longer time in Germany, beginning in next 4-10 weeks.

Contact them not me 🙂


[Consortium] 20 – 26 march 2017


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


23 March 2017:

*    Fixed (again!) build process for linux (libssh2 version was not correct).

22 March 2017:

*    I made another pass to some problems on *icebeg>* : added a new “branch browser” to compare sources from remote
branchs and added a couple of fixes to make the system a bit stronger… still working on this 🙂

*    I spent some time again on VM building, where a couple of issues arised:

=== Build windows VM with cygwin instead mingw
[Nico Cellier]( moved the [OSVM](
to cygwin as part of his effort to produce Win64 VMs (and to align PharoVM with the other VMs flavours built).

This was a cool work, but it requires some work for our side to properly build the [PharoVM](

=== Fix a problem with SDL2 and linux
SDL2 version was upgraded, but there was a remaining problem when building it, so I needed to track down the
problem and fix it.

Overall, the process are ok now… nevertheless I cannot merge the changes to make them available for users
because with latest VM sources there are some problems here and there (not all tests pass). So I’m waiting
for Eliot 🙂

20 March 2017:

*    I added edit of repositories to [Iceberg]( 🙂

This is usefull when you make a mistake and do not locate sources properly when cloning or when you want to
re-locate repository after moving it in your disk.


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,