Monthly Archives: September 2016

PhyloclassTalk video!

I want to share with you a video I did just yesterday (no audio yet) of the PhyloclassTalk application:

As some of you may know, I work in a research institute, so the workflow is very specific to phylogeography and bioinformatics. But I hope you may find it useful as a showcase for Pharo, or to grab some ideas. It took some years to get here.

It also uses code many of you wrote, so you can say Hi! if you recognize your source there 🙂

Here is the web site for documentation and details:

I would love to read your recommendations, or comments.



Pharo Mooc in Numbers

[Infographie] Le MOOC Pharo en quelques chiffres

Pharo libclang FFI

hi all,

Just announcing that I'm writing a series of posts on using FFI in
Pharo 5 to interface to libclang, the interface library for the LLVM C

I'm writing this from the perspective of a FFI newbie progressively
learning the system.  I've left in a few mis-steps since I think it
can be useful seeing what didn't work.

cheers -ben

Continuous improvements

18987 Extract asClass and friends in a separate package and deprecate

19128 Deprecation: The method Object>>name called from KMRepository>>#addCategory: has been deprecated.

19117 Another stab at iconNamed: cleaning…


This is:

– case 19032
– testLocalMethodsOfTheClassShouldNotBeRepeatedInItsTraits was failing due to #isLastInOwner
– add manifest wit preUnload action in GTDebugger


=> 19032 seems to be not fixed. (there is still a sender if #ifNotNilDo:)

=> the gt problem with testLocalMethodsOfTheClassShouldNotBeRepeatedInItsTraits was fixed, but in the meantime
we got more problems (from epicea). This is a nice example how not fixing a trivial bug leads to more decay fast
that we do not even know about. “yes, that test fails and I know why. Will be fixed when we merge”.
What happens instead is that this “known failure” will fail soon due to many more other reasons… that nobody is
even aware of.

Trivial is not trivial.. that is why one needs to fix them as soon as possible and *never* think that batching trivialities is
a good idea…

19039 Optional source code annotation pane Nautilus

18482 Typing a large number into a playground freezes the image

19124 enhance Deprecation to log sending method

19122 Remove category from Opal

18788 TxTextStyler do not work

19023 debug menu in GTDebugger

19101 Unload CubeHelix

19116 FTRootItem>>expandAll sends deprecated #name message

19115 formatter should not modify symbol formatting in literal arrays

19119 Integrate Epicea 8.0.2

18327 SystemWindow reset his borderWidth on #themeChanged

18825 The current Pharo Fuel platform is still FLPharo5Platform and cannot be reset

18731 NeoUUIDGenerator should not rely on Network-Kernel package

18933 unload Collections-Grid and Collections-Grid-Test

18963 DANode>>#browseClass: sends unimplemented fullOnClass:

19113 Problem with selection in rubric (select from line beginning)

18594 Remove references to Smalltalk evaluate: from Fuel
19110 DNU on menu counter

19091 Problem adding breakpoint through suggestions

19108 Logging error stack should not hang image and prevent opening debugger
19104 Typo in SizeMismatch error message

19051 Do not reinit selector table on startup (takes too long)
19096 String selection behaviour in code editor is not logical

19035 Default time limit for tests should be small

19102 Another clean iconNamed: phase…
16877 another endless debugger loop

19097 Move to instance side refactoring of class method in the sender list is mispelled

19098 FuelOutStackDebugAction uses incorrect debugger API

19094 cleaning iconNamed:

19093 WeakSet anyOne is not work correctly when only nil there

19089 About dialog: add a space to Pharo6.0…

17881 loading package which add extension method to trait from external package makes loadable package dirty

19077 extend ClassDescription>>printSubclassesOn:level: to have a filter
19092 TestExecutionEnvironment should clean all intercepted processes collections when test completes

19088 simplify newAnonymousSubclass in MetaClass

19083 Introduction of FullBlockClosures (as an option)

19085 Integrate Epicea 8

Change log:

– Pass on UI + search more consistent names (e.g. session -> log).

– Replace “Session Browser” by “Log Set” from EpiceaHiedra experimental package.

– Add EpMonitorModel, to manipulate EpMonitor via UI.

– Rename: apply/revert instead of redo/undo.

– Fix 18946: package does not exist when a category removal is announced.

– Fixes for Dark theme.

– Avoid using #name in some cases.

– Make EpLogBrowser composable (it needs to be correctly initialized when created with #new).

– Optimization: reuse entryReader with an instance variable.

– Encapsulate morph creation to a new class: EpMorphFactory.

– Delete Trait issue (case 19045): Avoid sending #name to nil.

– Add EpMonitor>>debug setting

– Ombu writing entries: Do not catch all Error but FileException.

– Ombu: Move writing error handling to EpMonitor.
19087 Tracking of processes during test run should not keep processes strongly.

18755 Variable-button raises “SubscriptOutOfBounds: 1” when a Trait is selected

17543 VM crash in Windows when compiling many symbols
19086 do not allow expressions as pragma arguments
17857 newAnonymousSubclass should works for Metaclass

19082 The tool to do updates is broken due to space in SystemVersion
19079 CriticBrowser can not show result for transformation rules anymore (DNU)

19071 FuelOutStackDebugAction should not hide error

18463 ReleaseTest>>#testMethodsWithUnboundGlobals is failing

19057 Failing test: SHParserST80Test.testNumberHierarchy
19049 Unify Dictionary APIs

19074 comment all RBRefactoryChange classes

19069 SUnit test suites should be run on singe TestExecutionEnvironment

19073 Image snapshot should be forcible executed un DefaultExecutionEnvironment

19076 New assert extension to compare floats by closeTo

19068 SUnit failed tests during command line or monkey run

Material Design Lite for Seaside

Hi everyone!

I am happy to announce the version 1 of Material Design Lite for seaside.

This version contains all components from V1.2.1 of Google's Material
Design Lite (,

This version also contains some widget build in top of MDL as:

    Pagination widget
    Sorted Paginated Table
    Select Widget
    Poll Widget
    Calendar Widget
    Nested List with dynamic loading and search function

Thanks to Kévin Lanvin, Olivier Auverlot, Thomas Heniart, Merwan Ouddane
and Guillaume Larcheveque who helped to release this version.

Thanks to Sabine Mana for the feedback she gave.

You can find the project on:

There is some documentation of the README.

If you find a bug you can open an issue on the repository.
If you have some question I will be happy to answer.

Trie and Grid…

We get now a trie implementation (developed by Benoit St-Jean) and Grid as part of a slow growing project called Container for collection outside of the image.

location: ‘’
user: ”
password: ”

There are now available in the catalog browser for Pharo 60.

If you have new collections that you want to add to the project just ask.

More to (slowly) come….


Synectique is recruiting

Synectique provides comprehensive and sophisticated analysis tools to improve the quality of software, reduce maintenance costs, and thus enable
easier software evolution.

The company was created in 2013 and already got some renowned customers.
To sustain our growth we are looking for a full-time Smalltalk (Pharo)
developer with some additional non Smalltalk skills.
2+ years OO programming experience or equivalent, with strong skills in OO
design, front-end JavaScript and back-end Seaside/Pharo.

The ideal candidate should be comfortable with meta-model approaches,
client-side web technologies (HTML, CSS, JavaScript), be familiar with
code parsing and master different languages (Java, C++, C#, ADA,

The job is based in Lille, which is centrally located with good connections by train to everywhere (one hour from Paris, 1h20 from London, 35 min from Brussels).

Duration: Permanent (CDI)
Starting date: September 2016
Salary: depending on skill set/experience
Ready to travel if needed.

Additional Skills:
Object-oriented design/programming
Agile Methodologies
Fluent in French and/or English
Please send your applications to

Pharo 50 Little Testimony

Hello all,

Thanks thanks thanks for Pharo 5.

Each year, from September to November, my students are learning Pharo with the last release.
And as you know, beginners and naive users are very good at stressing a software 🙂
Previous years I faced issues due to Pharo bugs (especially because of Nautilus but not only).
Since 2 weeks, no issue at all regarding Pharo, a real pleasure.
So this mail is just to thank all of you who made this cool release.


Metronomic attitude… systematic enh

19075 SmallLint tests failing after update
19055 More iconNamed: cleaning
19067 Wrong emphasis code for struck and narrow

19061 Move some of rules to new architecture & improve

19066 subclassDefinerClass needs to return Smalltalk compilerClass
19065 Symbol>>#asMethodPreamble isBroken

17879 Wrong example or code in Generator class comment

19063 Factory for RBModel classes

19047 fix vmstats report for spur

19056 Trait Polymorphism tests fail again

19052 rub shoutdecorator should not raise a debugger

19054 QA 3.2.7
19054 QA 3.2.7

19050 Copying a class doesnt replicate the pool dictionary definitions

19044 DebugAction should use key-mappings and not characters to indicate shortcuts

19048 move testZipped to Compression-Tests

19046 SUnit watch dog should not signal error when test environment is not active like during debugger

19028 Process ondo method to inject default exception handlers

18974 A Nautilus fix to support class method tests
19042 QA 3.2.6

19043 UnlimtedIvar slot: fix a #name deprecation side effect
18983 Kommitter is not working when invoked from Versionner

18859 Loading a package break word selection on Windows
19030 SystemAnnouncer restoreAllNotifications produces memory leak

19006 Add support for the file sync primitive to the FileSystem API

19001 Another pass to introduce iconNamed: and avoid Smalltalk ui icons

19002 iconNamed: in Catalog Browser

19015 Tests should never hang and leave forked processes live

18606 MessageBrowser should use fast table and provide filter field

19034 Improve comment of round:
19014 Autodeprecation creates a DoIt method on UndefinedObject

19029 SystemAnnouncer allInstances size = 2

19027 minimal Pharo build failing
19021 RB forgets to unmark removedClasses

10025 MethodDictionary at:put: and #flushCache
18859 Loading a package break word selection on Windows

18930 Regression: Time to show big methods is too high

19020 add preUnload message to Manifest

19022 asClass rules

18827 Mirror primitives should be easy to use

19019 Inexactitude in Dictionary class>> newFromPairs: comment

18950 CritiqueBrowser: Compiler error when accepting a method with argument

18992 asClass in font related package

18988 FreeTypeFontProvider should calculate correctly the directories where to look for fonts.

18974 A Nautilus fix to support class method tests

18991 asClass in RPackageTest

18989 asClass in BlueInk

19011 Integrate two double quotes inside comments

18033 Fraction isPowerOfTwo does too much work

19012 Added rules for icons

19013 Semaphore wait protocol based on duration

19005 Collection>>#ifEmpty: has useless return and wrong comment

18990 Text missing #includesSubstring: and includesSubstring:caseSensitive:

– case 18965 (removed GTExample)

– case 18596
Remove references from Glamour to Smalltalk evaluate:

– case 18948
remove a direct reference to Compiler from GT tests

– case 18923
inspector: improve “list methods using this variable”

– case 18905
cleanup #withThorougMethodsReferTo:do:

Integrations in Pharo for next generation VMs

Hi everyone,

With the help of multiple people (Marcus Denker, Eliot Miranda and some more), I introduced over the past year multiple changes in the Pharo image to support the next generation VMs. It’s still a work in progress, but once issue 19083 will be introduced the bulk of the changes will be in the Pharo image.
These changes have no impact on developers only reading/writing source code and analysing/working with the ASTs, but may have impact with people working with Opal’s IR, the bytecode or directly with the BlockClosure and CompiledMethod instances (People building frameworks like Reflectivity, using OpalCompiler extensions or people working on object serializers).
Three main changes were introduced:
– Secondary bytecode set support
– Read-only objects
– FullBlockClosure
The secondary bytecode set support allows the image to run on a VM supporting 2 bytecode sets. Each compiled method has a flag precising which set it uses. This change allows the image to convert all the methods from one bytecode set to another one without any bootstrap (only in-image do-its). The SistaV1 bytecode set was introduced as the second bytecode set. This bytecode set removes many encoding limitations of the existing bytecode set, simplifies bytecode decoding and features new instructions (such as full block closure instructions).
Read-only objects allows one to mark any object as read-only. Any attempt to mutate a read-only object (primitive operations, instance variable store) fails, and the programmer can handle the failures with Smalltalk code. This feature is present with less than 1% overhead in all of our benchmark suite. In the near future, we plan to have all literals read-only to allow more aggressive compiler optimizations and avoid literal mutation inconsistency bugs. This feature can also be used to build efficient object modification trackers and could be used to improve the performance of part of the Reflectivity framework. It may break your code if you mutate literals (Normally you don’t).
FullBlockClosures are a new implementation of BlockClosures. They allow efficient implementation of Blocks, with the Copying block and Clean block optimizations present in other Smalltalks. They simplify part of the VM, making Blocks more similar to methods. They also remove many dependencies between BlockClosure, compiled method and contexts, which will allow us to implement more aggressive optimizations in the VM in the future. With FullBlockClosures, the closure’s bytecode is present in a separate object (an instance of compiled block) instead of being inlined in the enclosing method. This is still confusing some tools. The debugging support of FullBlockClosure seems however to be complete.
With the issue 19083 integrated and the latest VM compiled with different settings than the current Pharo VM (MULTIPLEBYTECODESETS true bytecodeTableInitializer initializeBytecodeTableForSqueakV3PlusClosuresAndSistaV1 -DIMMUTABILITY 1), all these features seems to be working in the Pharo image. The goal is to get all of these features used by default before the Pharo 6 feature freeze in November. Alternatively I will need to wait many more months (or Pharo will get unstable and Esteban will scream at me ‘No do not integrate that’).
If you worry how any of these changes can impact your frameworks, please answer this thread so we can analyse the potential problems.